adfun.ru
 
BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Турбо Ассемблер 3.0/tasm/#2-2
Автор ""
Размер 465209 Байт
Страница 36 из 54
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

            with OldEmployee do
            begin
              Name := 'John Smith';
              Address := ' 123 F Street';
              City := 'Scotts Valley';
              State := 'CA';
              Zip := ' 90000-0000';
            end;
            with NewEmployee do
            begin
              Name := 'Mary Jones';
              Address := ' 9471 41st Avenue';
              City := 'New York';
              State := 'NY';
              Zip := ' 10000-1111';
            end;
            Writeln('Before: ',OldEmployee.Name,' ',NewEmployee.Name);
            Exchange(OldEmployee,NewEmployee,sizeof(OldEmployee));
            Writeln('After: ',OldEmployeeName,' ',NewEmployee.Name);
            Exchange(OldEmployee,NewEmployee,sizeof(OldEmployee));
            Writeln('After: ',OldEmployeeName,' ',NewEmployee.Name);
          end.

          Чтобы сформировать и запустить данные программы на Паскале и
     Ассемблере, используйте следующие команды командного файла:

          TASM XCHANGE
          TPC  XCHANGE
          XCHANGE

          Если использовать директиву .MODEL, то программа Exchange на
     Ассемблере будет выглядеть следующим образом:

                 .MODEL  large, PASCAL
                 .CODE
     Exchange    PROC FAR var1:DWORD,var2:DWORD,count:WORD
                 PUBLIC Exchange
                 cld                  ; обмен в прямом направлении
                 mov    dx,ds         ; сохранить DS

     Турбо Ассемблер 3.0/tasm/#2-2                             = 141 =

                 push   bp
                 mov    bp,sp         ; получить базу стека
                 lds    si,var1       ; получить первый адрес
                 les    di,var2       ; получить второй адрес
                 mov    cx,count      ; получить число перемещаемых
                                      ; байт
                 shr    cx,1          ; получить счетчик слов
                                      ; (младший бит -> перенос)
                 jnc    ExchangeWord  ; если не нечетный байт,
                                      ; войти в цикл
                 mov    al,es:[di]    ; считать нечетный байт
                                      ; из var2
                 movsb                ; переместить байт из var1
                                      ; в var2
                 mov    [si-1],al     ; записать var2 в var1
                 jz     Finis         ; выполнено, если нужно
                                      ; выполнить обмен только
                                      ; одного байта
     ExchangeWords:
                 mov    bx,-2         ; BX - это удобное место
                                      ; для хранения -2
     ExchangeLoop:
                 mov    ax,es:[di]    ; считать слово из var2
                 movsw                ; переместить из var1
                                      ; в var2
                 mov    [bx][si,ax    ; записать слово var2 в
                                      ; var1
                 loop   ExchangeLoop  ; повторить count/2 раз
     Finis:
                 mov    ds,dx         ; получить обратно DS
                                      ; Турбо Паскаля
                 ret
     Exchage     ENDP
     CODE        ENDS
                 END

          Вы можете использовать ту же программу на Паскале  и  просто
     ассемблировать  альтернативный вариант процедуры Exchаnge и пере-
     компилировать программу с помощью того же командного файла.

                  Пример анализа операционной среды DOS
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

          С помощью функции EnvString вы сможете просмотреть  операци-
     онную среду DOS и найти строку вида "s=НЕЧТО" и возвратить НЕЧТО,
     если это найдено.

     DATA           SEGMENT PUBLIC
                    EXTRN prefixSeg : Word  ; дает адрес PSP
     DATA           ENDS
                    SEGMENT PUBLIC
                    ASSUME  cs:CODE,ds:DATA


     Турбо Ассемблер 3.0/tasm/#2-2                             = 142 =





EnvString PROC FAR PUBLIC EnvString push bp cld ; работать в прямом ; направлении mov es,[prefixSeg] ; посмотреть PSP mov es,es:[2Ch] ; ES:DI указывают на ; операционную среду, xor di,di ; которая выровнена на ; границу параграфа mov bp,sp ; найти строку параметров, lds si,ss:[bp+6] ; которая следует за ; адресом возврата ASSUME ds:NOTHING lodsb ; посмотреть длину or al,al ; она равна 0? jz RetNul ; да, возврат mov ah,al ; в противном случае ; сохранить ее в AH mov dx,si ; DS:SI содержат указатель ; на первый параметр ; char xor al,al ; сделать его равным 0 Compare: mov ch,al ; мы хотим, чтобы для ; следующего отсчета ch=0 mov si,dx ; возвратить указатель на ; просмотренную строку mov cl,ah ; получить длину mov si,dx ; возвратить указатель на ; строку repe cmpsb ; сравнить байты jne Skip ; если сравнение неудач- ; ное попробовать следу- ; ющую строку cmp byte ptr es:[di],'=' ; сравнение ; завершилось успешно ; следующий символ '='? jne NoEqual ; если нет, все еще нет ; совпадения Found: mov ax,es ; DI:SI будет указывать ; на найденную нами строку mov ds,ax mov si,di inc si ; "пройти" символ '=' les bx,ss:[bp+10] ; получить адрес ; результата ; функции mov di,bx ; занести его в ES:DI inc di ; байт длины mov cl,255 ; задать максимальную ; длину Турбо Ассемблер 3.0/tasm/#2-2 = 143 = CopyLoop: lodsb ; получить байт or al,al ; проверить на 0 jz Done ; если 0, выполнено stosb ; занести его в результат loop CopyLoop ; переместить до 255 ; байт Done: not cl ; при сохранении мы ; уменьшали от CL до 255 mov es:[bx],cl ; сохранить длину mov ax,SEG DATE mov ds,ax ; восстановить DS ASSUME ds:DATA pop bp ret 4 ASSUME ds:NOTHING Skip: dec di ; проверить на 0 NoEqual: mov cx,7FFFh ; длинный поиск, если ; нужно sub cx,di ; операционная среда ; никогда не превышает ; 32К jbe RetNul ; если конец, выйти repne scasb ; посмотреть следующий ; 0 jcxz RetNul ; выйти, если не найден cmp byte ptr es:[di],al ; второй 0 в строке? jne Compare ; если нет, попытаться ; снова RetNul: les di,ss:[bp+10] ; получить адрес ; результата stosb ; сохранить там 0 mov ax,SEG DATA mov ds,ax ; восстановить DS ASSUME ds:DATA pop bp ret 4 EnvString ENDP CODE ENDS END Программа на Паскале, которая использует функцию EnvString, выглядит следующим образом:


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [36] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.