2702:0315 Fec0 inc al ;длину результата.
2702:0317 A20006 MOV [0600],AL;
2702:031A C3 RET
5. Результаты трассирования введенной в эвм программы
Начальное состояние флагов.
OF DF IF SF ZF AF PF CF
0 0 1 0 0 0 0 0
Производимое Рез-т Флаги
действие OF DF IF SF ZF AF PF CF
61 + 76 D7 1 0 1 1 0 0 1 0
76 + 65 DB 1 0 1 1 0 0 1 0
6F + 79 E8 1 0 1 1 0 1 1 0
72 + 73 E5 1 0 1 1 0 0 0 0
61 + 6F D0 1 0 1 1 0 1 0 0
6B + 67 D2 1 0 1 1 0 1 1 0
70 + 69 D9 1 0 1 1 0 0 0 0
65 + 72 D7 1 0 1 1 0 0 1 0
68 + 47 AF 1 0 1 1 0 0 1 0
43 + 0 43 1 0 1 0 0 0 0 0
Состояние памяти после выполнения программы.
DS:0300 0A 61 76 6F 72 61 6B 70 65 68 43
DS:0400 09 76 65 79 73 6F 67 69 72 47
DS:0500 0A D7 DB E8 E5 D0 D2 D9 D7 AF 43
6. Ошибок обнаружено не было.
Форматы и схемы выполнения машинных команд дальнего и ближнего перехода программы.
1. Внутрисегментный переход
014C E9FD00 JMP 024C
В двоичной форме:
E9h=11101001 => Команда JMP disp {near}
Схема выполнения: IP:=(IP)+dispHL
FDh=11111101 dispL
00h=00000000 dispH
После выполнения этой команды IP=(смещение команды в сегменте)+ +(длина команды)+dispHL, т.е. IP:=014Ch+03h+00FDh=024Ch
2. Межсегментный переход
0277 FF2E0006 JMP Far [0600]
В двоичной форме:
FFh=11111111 => Команда JMP r/m {far} (т.к. в следующем
байте 3, 4, 5-й биты равны соответственно 1, 0, 1) Схема выполнения: CS:IP:=(r/m).
2Eh=00 101 110 md=00 и r/m=110 => адресация прямая, т.е.
md ~~~ r/m адрес перехода берется из
следующих 4-х байт
00h=00000000 \
} {disp} т.е. IP:=(0600h) CS:=(0602h)
06h=00000110 /
Форматы и схемы выполнения машинных команд программы замыкания цикла с внутрисегментным и межсегментным переходом.
1 Замыкание цикла с внутрисегментным переходом
0249 E9FAFE JMP 0146
......
0251 E2F6 LOOP 0249
В двоичной форме:
E2h=11100010 => Команда LOOP dispL
Схема выполнения: CX:=(CX)-1 если (CX)=0, то
IP:=(IP)+dispL
F6h=11110110 dispL в дополнительном коде, т.е. -8
После выполнения этой команды IP=(адрес команды)+dispL
т. е. IP:=0251h-08h=0249h.
Команда LOOP не может выполнить близкий переход, поэтому она должна ссылаться на команду JMP, которая и выполнит этот переход.
2 Замыкание цикла с межсегментным переходом
04FC FF2E0406 JMP Far [0604]
......
0505 E2F5 LOOP 04FC
Работает аналогично команде LOOP с близким переходом, только ссылается на команду JMP, которая выполняет межсегментный переход.