<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
xor ax,ax
add al,17
add al, a
jnc ml ;если нет переноса, то перейти на ml
adc ah,0 ;в ах сумма с учетом переноса
<17> ml: ;...
<18> exit:
<19> mov ax,4c00h;стандартный выход
<20> int 21h
<21> end main ;конец программы
В строках 13-14 создана ситуация, когда результат сложения выходит за гра-
ницы операнда. Эта возможность учитывается строкой 15, где команда JNC (хотя
можно было обойтись и без нее) проверяет состояние флага CF. Если он установ-
лен в 1, то результат операции получился большим по размеру, чем операнд, и для
его корректировки необходимо выполнить некоторые действия. В данном случае
мы просто полагаем, что границы операнда расширяются до размера АХ, для чего
учитываем перенос в старший разряд командой ADC (строка 16). Напомню, что ис-
следовать работу команд сложения без учета знака вы можете в отладчике. Для
этого введите в текстовом редакторе текст листинга 8.3, получите исполняе-
мый модуль, запустите отладчик и откройте в нем окна командами View > Dump
и View > Registers. Далее, в пошаговом режиме отладки можно более наглядно про-
следить за всеми процессами, происходящими в процессоре во время работы про-
граммы. |