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




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Справочник по системе программирования Турбо Ассемблер 2.0
Автор ""
Размер 416131 Байт
Страница 42 из 51
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

             .
             .
             .
             .DATA
 BaseVal     DW     99
 Adjust      DW     10
             .
             .
             .
             .CODE
             .
             .
             .
             mov   dx,[BaseVal]
             add   dx,11
             sub   dx,[Adjust]
             .
             .
             .

сначала загружают значение, записанное в BaseVal, в  регистр  DX,
затем прибавляют к нему константу 11 (в результате в DX получает-
ся значение 110) и, наконец, вычитают из DX значение 10, записан-
ное  в  переменной  Adjust.  Полученное в результате значение 100
сохраняется в регистре DX.

                         32-разрядные операнды
-----------------------------------------------------------------

     Операции ADD и SUB работают с 8- или 16-битовыми операндами.
Если  вы, к примеру, хотите сложить или вычесть 32-разрядные опе-
ранда, вы должны разбить операцию на ряд операций  со  значениями
размером в слово и использовать инструкции ADC и SBB.

     Когда вы складываете два операнда, процессор 8086 записывает
состояние во флаг переноса (бит С в регистре флагов), которое по-
казывает, был ли выполнен перенос  из  приемника.  Вы  знакомы  с
принципом  переноса  в десятичной арифметике: если вы складываете
90 и 10, то получаете перенос в третью цифру (разряд).

         90
       + 10
       ----
        100

     Рассмотрим теперь сложение двух шестнадцатиричных значений:

       FFFF
      +   1
      -----
      10000

     Младшее слово результата равно нулю, перенос равен  1,  пос-
кольку результат (10000h) не вмещается в 16 бит.

     Инструкция ADC аналогична инструкции ADD, но в ней  учитыва-
ется  флаг переноса (предварительно установленный предыдущим сло-
жением). Всякий раз когда вы складываете два значения,  превышаю-
щие  по  размеру  слово,  то младшие (менее значащие) слова нужно
сложить с помощью инструкции ADD, а остальные слова этих значений
- с помощью одной или нескольких инструкций ADC, последними скла-
дывая самые значащие слова. Например, следующие инструкции  скла-
дывают  значение  в регистрах CX:BX, размером в двойное слово, со
значением, записанным в регистрах DX:AX:

           .
           .
           .
           add   ax,bx
           adc   dx,cx
           .
           .
           .

а в следующей группе инструкций выполняется  сложение  четверного
слова  в  переменной  DoubleLong1 с четверным словом в переменной
DoubleLong2:

           .
           .
           .
           mov   ax,[DoubleLong1]
           add   [DoubleLong2],ax
           mov   ax,[DoubleLong1+2]
           adc   [DoubleLong2+2],ax
           mov   ax,[DoubleLong1+4]
           adc   [DoubleLong1+4],ax
           mov   ax,[DoubleLong1+6]
           adc   [DoubleLong2+6],ax
           .
           .
           .

     Инструкция SBB работает по тому же принципу, что и  инструк-
ция ADC. Когда инструкция SBB выполняет вычитание, в ней учитыва-
ется заем, произошедший в предыдущем вычитании. Например, следую-
щие инструкции  вычитают значение,  записанное в регистрах CX:BX,





из значения размером в двойное слово, записанного в регистрах DX:AX: . . . sub ax,bx sbb dx,cx . . . При работе с инструкциями ADC и SBB вы должны убедиться, что флаг переноса не изменился с момента выполнения последнего сложе- ния или вычитания, иначе состояние заема/переноса, хранящееся во флаге переноса, будет потеряно. Например, в следующем фрагменте программы сложение CX:BX с DX:AX выполняется некорректно: . . . add ax,bx ; сложить младшие слова sub si,si ; очистить SI (флаг переноса ; сбрасывается в 0) adc dx,cx ; сложить старшие слова... ; это будет работать некорректно, ; так как с момента последней ; операции сложения содержимое ; флага переноса потеряно . . . Увеличение и уменьшение ----------------------------------------------------------------- Иногда в программе не Ассемблере требуется выполнить сложе- ние, которое состоит просто в прибавлении к операнду значения 1. Такая операция называется увеличением (инкрементацией). Аналогич- но, из содержимого регистров и переменных в памяти иногда нужно вычесть значение 1. Такая операция называется уменьшением (декре- ментацией). Для таких операций, как изменение содержимого счетчи- ка или продвижение регистров-указателей по памяти все операции сложения и вычитания можно выполнять с помощью увеличения и уменьшения. Для выполнения таких часто требующихся действий в наборе инструкций процессора 8086 предусмотрены две инструкции - INC (увеличить) и DEC (уменьшить). Инструкция INC прибавляет к ре- гистру или переменной в памяти 1, а инструкция DEC вычитает из регистра или переменной в памяти 1. Например, следующая программа заполняет 10-байтовый массив TempArray числами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9: . . . .DATA TempArray DB 10 DUP (?) FillCount DW ? . . . .CODE . . . mov al,0 ; первое значение, ; записываемое в TempArray mov bx,OFFSET TempArray ; BX указывает на ; TempArray mov [FillCount],10 ; число элементов, ; которыми нужно ; заполнить массив FillTempArrayLoop: mov [bx],al ; установить текущий ; элемент TempArray inc bx ; ссылка на следующий ; элемент массива ; TempArray inc al ; следующее записываемое ; значение dec [FillCount] ; уменьшить счетчик ; числа заполняемых ; элементов jnz FillTempArray ; обработать следующий ; элементе, если мы еще ; не заполнили все ; элементы . . . Почему предпочтительнее использовать инструкцию: inc bx а не инструкцию: add bx,1


Страницы : 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


adfun.ru









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

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

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

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