"Опыт дизассемблирования большой .com - программы" - читать интересную книгу автора (Крупник А.Б.)

Если посмотреть в область со смещениями, близкими к с1с, то там окажется кусок
повисшего кода, который может быть только данными:

.......................................
or al,BYTE PTR [bp+di] ;00c14
add WORD PTR [bx+di],ax ;00c16
add BYTE PTR [bx+si],al ;00c18
add BYTE PTR [bx+si],al ;00c1a
mov di,1306h ;00c1c
add ax,06c0h ;00c1f
......................................

Рис.7

Теперь нужно поискать идентификаторы d00c1c и d00c1e в тексте, выданном диз-
ассемблером. Очень быстро можно найти фрагменты типа:
mov WORD PTR ds:d00c1c,ax, mov WORD PTR ds:d00c1e,ax.
Значит, ошибка дизассемблера состоит в том, что он перепутал данные и команды
и на этой почве сделал два неправильных присваивания, equ, попавших в начало
подпрограммы s32.
Исправления будут заключаться в следующем:
1. Убрать из начала подпрограммы s32 два псевдооператора equ.
2. Переписать коды на рисунке 7 следующим образом:

d00c14 db 0a,03,01,01,00,00,00,00 ;00c14
d00c1c db 0bf,06 ;00c1c
d00c1e db 13,05,0c0,06 ;00c1e

В заключение рассмотрим совсем простенький фрагмент кода:

;<01252>
s39 proc near
d0125d equ 00125dh
d0125f equ 00125fh
dec bh ;01252
jz b0124f ;01254 ;Jump if equal (ZF=1)
xor ah,ah ;01256
shl al,1 ;01258 ;Multiply by 2's
rcl ah,1 ;0125a ;CF<--[HI .. LO]<--CF
ret ;0125c
;-----------------------------------------------------
add BYTE PTR [bx+si],al ;0125d
add BYTE PTR [bx+si],al ;0125f
s39 endp

Укажем без комментариев, что подпрогромма s39 должна выглядеть так:

;<01252>
s39 proc near
dec bh ;01252