Я написал код на эмуляторе эмулятора ассемблера emu8086 для сравнения x + c с 0, и мне нужны мои функции для работы по результатам сравнения.
f1, when x + c < 0
f2, when x + c = 0
f3, when x + c > 0
MOV ax, x[si]
MOV bl, c
CBW
ADD ax, bx
CBW
CMP ax, 0
JE f2;
JL f1;
JG f3 ;
Я ожидаю получить f2 функция работает, когда ax (x + c) равен нулю, f1 работает, когда ax (x + c) меньше нуля, и f3, когда ax (x + c) больше нуля, но почему-тотолько f2 и f3 правильно, я получаю f2 вместо f1 , я не могу понять, что не так. Даже когда я пишу
JE f1;
JL f1;
JG f1 ;
, он по-прежнему не выполняет f1, выполняет f2 вместо f1, но если я удаляю f3 из моего кода, то выполнение f1 выполняется. функции выглядят так:
f1: MOV ax, 2
IMUL a
JO kl1 ;
MOV bx, x[si]
CMP bx, 0
JG mod
NEG bx
mod: ADD ax, bx
MOV dx, ax
JO kl1
f2: MOV ax, 6
ADD ax, 3
JO kl1
JMP re
f3: MOV ax, 4
JO kl1
JMP re