Справочник по языку Ассемблера IBM PC


Сложение двоичных чисел без знака - часть 2


Обратите внимание на последнюю команду — это команда сложения, учитывающая перенос единицы из старшего разряда. Механизм появления такой единицы мы уже рассмотрели. Таким образом, команда adc является средством микропроцессора для сложения длинных двоичных чисел, размерность которых превосходит поддерживаемые микропроцессором длины стандартных полей.

Рассмотрим пример вычисления суммы чисел (листинг 3).

   Листинг 3. Вычисление суммы чисел <1>     ;prg_8_3.asm <2>     masm <3>     model   small <4>     stack   256 <5>     .data <6>     a       db      254 <7>     .code   ;сегмент кода <8>     main: <9>     mov     ax,@data <10>    mov     ds,ax <11>    ... <12>    xor     ax,ax <13>    add     al,17 <14>    add     al,a <15>    jnc     m1      ;если нет переноса, то перейти на m1 <16>    adc     ah,0    ;в ax сумма с учетом переноса <17>    m1:     ... <18>    exit: <19>    mov     ax,4c00h        ;стандартный выход <20>    int     21h <21>    end     main    ;конец программы

В листинге 3 в строках 13–14 создана ситуация, когда результат сложения выходит за границы операнда. Эта возможность учитывается строкой 15, где команда jnc (хотя можно было обойтись и без нее) проверяет состояние флага cf. Если он установлен в 1, то это признак того, что результат операции получился больше по размеру, чем размер операнда, и для его корректировки необходимо выполнить некоторые действия. В данном случае мы просто полагаем, что границы операнда расширяются до размера ax, для чего учитываем перенос в старший разряд командой adc (строка 15). Если у вас остались вопросы, исследуйте работу команд сложения без учета знака, для чего введите листинг 3, получите исполняемый модуль, запустите отладчик и откройте в нем окна View|Dump и View|Registers. 




Начало  Назад  Вперед



Книжный магазин