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

rap*_*yen 2 x86 assembly loops

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

cmp  dh, dl
j--  hit
Run Code Online (Sandbox Code Playgroud)

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

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

Foo*_*Bah 8

ja和之间的区别在于jg比较是无符号的ja并且已签名jg(将寄存器视为有符号与无符号整数).

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

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


Chr*_*ung 7

  1. 如果dx是0x0680,那么dh是0x06并且dl是0x80.
  2. 0x80在无符号模式下解释为128,在签名模式下解释为-128.
  3. 因此,你必须使用jg,因为6> -128,但是6 <128.jg签名比较; ja没有签名的比较.