我有麻烦得到正确的答案。我明白,如果左操作数<右操作数JL指令是跳。我怎么知道哪个是我的权利或离开?当我手工完成时,我选择了1111 1110b作为我的右操作数。所以,我以十六进制的结果收到了00FC。在该计划中,我收到了00FB,谁能帮我弄清楚我的错误?谢谢!汇编语言x86 JL指令
MOV AL, 1111 1110b
CMP AL, 1111 0110b
JL DEST
DEC AL
DEST: DEC AL
DEC AL
我有麻烦得到正确的答案。我明白,如果左操作数<右操作数JL指令是跳。我怎么知道哪个是我的权利或离开?当我手工完成时,我选择了1111 1110b作为我的右操作数。所以,我以十六进制的结果收到了00FC。在该计划中,我收到了00FB,谁能帮我弄清楚我的错误?谢谢!汇编语言x86 JL指令
MOV AL, 1111 1110b
CMP AL, 1111 0110b
JL DEST
DEC AL
DEST: DEC AL
DEC AL
在CMP AL, 1111 0110b
清楚AL
是左操作数,以及保持1111 1110b
(这是当然的轻微过度简单化,但是这是如何Jcc
助记符已经选择)。因此,条件是1111 1110b < 1111 0110b
,但是比较是有符号的,因此它被解释为-2 < -10
,这不是真的,因此不采用跳转,这意味着AL
将减少3
,给出0xFB
(-5
)。
奇怪的是,它依赖于汇编语法。但是,对于英特尔语法,您有@Jester是正确的。它是AL <0xF6。可能令你困惑的是'JL'是一个_signed_检查,并且0xFE和0xF6都是负数。 – Gene