如何通过比较数字来获得所需的功能?
How to get required function to work by comparing numbers?
我已经在汇编仿真器 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
CBW 将 AL 扩展为 AX。您想将 BL 扩展到 BX。
我建议你把c载入AL,用CBW,然后加上x。
我已经在汇编仿真器 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
CBW 将 AL 扩展为 AX。您想将 BL 扩展到 BX。
我建议你把c载入AL,用CBW,然后加上x。