2016-03-07 332 views
1

我有麻烦得到正确的答案。我明白,如果左操作数<右操作数JL指令是跳。我怎么知道哪个是我的权利或离开?当我手工完成时,我选择了1111 1110b作为我的右操作数。所以,我以十六进制的结果收到了00FC。在该计划中,我收到了00FB,谁能帮我弄清楚我的错误?谢谢!汇编语言x86 JL指令

MOV AL, 1111 1110b 
CMP AL, 1111 0110b 
JL DEST 
DEC AL 
DEST: DEC AL 
DEC AL 
+2

奇怪的是,它依赖于汇编语法。但是,对于英特尔语法,您有@Jester是正确的。它是AL <0xF6。可能令你困惑的是'JL'是一个_signed_检查,并且0xFE和0xF6都是负数。 – Gene

回答

1

CMP AL, 1111 0110b清楚AL是左操作数,以及保持1111 1110b(这是当然的轻微过度简单化,但是这是如何Jcc助记符已经选择)。因此,条件是1111 1110b < 1111 0110b,但是比较是有符号的,因此它被解释为-2 < -10,这不是真的,因此不采用跳转,这意味着AL将减少3,给出0xFB-5)。

+0

谢谢,我明白你现在在说什么!我可以澄清一下吗?所以,即使跳跃是假的,我们仍然会DEC DEST?我认为如果它是错误的,我们只需要递减一次,而忽略DEST – knmn

+0

执行当然会继续到'dest',没有其他的跳转来跳过它。因此,所有三个“DEC”指令都将执行。如果没有进行跳转,CPU会照常执行指令。 – Jester

+0

好的,非常感谢! – knmn