jz equ
Вышеуказанное equ
является директивой, которая говорит ассемблеру заменять все вхождения текста "jz" на без текста . Вот почему ваш условный переход не выполняется. Это даже не там!
Вот инструкции, которые выполняет ваша программа:
mov ax, @data
mov ds, ax
mov ch, 0
mov cl, 0
mov bh, 21h
mov bl, 21h
xor bl, bh \
|No jump was encoded here
not ch /
and ch, cl
jmp end
end:
mov ah, 4ch
int 21h
Просто выберите лучшее название для этого ярлыка:
xor bl, bh
jz IsZero
not ch
and ch, cl
jmp end
IsZero:
Я надеюсь, что вы не пришли к выводу, что jz equ
не работает, просто взглянув на регистрационную дамп в конце вашей программы, потому что все регистры будут иметь одинаковые конечные значения независимо от этого. BX=2100h CX=0000h
Ни одна ветвь не изменяет значения регистра в конце:
провалиться
not ch 0 becomes 255
and ch, cl 255 returns back to 0
скачок, если ноль
add bh, bl 21h is raised by 0
.stack 10h
Лучше настроить больший стек. 16 байт это несколько нереально. Я предлагаю минимум 256 байт.