汇编语言:ja和jg之间的区别?

时间:2011-09-22 06:20:02

标签: loops assembly x86

我无法理解汇编语言的ja和jg之间的区别。我有一段代码:

cmp  dh, dl
j--  hit

并且被问到将使用十六进制值DX = 0680进行哪个条件跳转(替换j--命中)。

这将使dl = 06并且dh = 80,因此在比较时,80> 06.我知道jg符合这一点,因为我们可以直接比较结果,但是如果ja适合(或者在这种情况下,不适合)这段代码,我应该如何解决?

2 个答案:

答案 0 :(得分:8)

jajg之间的区别在于,ja的比较是无符号的,jg的比例是有符号的(将寄存器视为有符号与无符号整数)。 / p>

如果数字保证为正数(即符号位为0)那么你应该没问题。否则你必须小心。

如果ja适用,你真的不能根据比较指令本身直觉。您必须查看上下文并确定签名是否会成为问题。

答案 1 :(得分:7)

  1. 如果dx为0x0680,则dh为0x06,dl为0x80。
  2. 0x80在无符号模式下被解释为128,在签名模式下被解释为-128。
  3. 因此,您必须使用jg,因为6> -128,但是6< 128. jg签署比较; ja执行无符号比较。