我无法理解汇编语言的ja和jg之间的区别。我有一段代码:
cmp dh, dl
j-- hit
并且被问到将使用十六进制值DX = 0680进行哪个条件跳转(替换j--命中)。
这将使dl = 06并且dh = 80,因此在比较时,80> 06.我知道jg符合这一点,因为我们可以直接比较结果,但是如果ja适合(或者在这种情况下,不适合)这段代码,我应该如何解决?
答案 0 :(得分:8)
ja
和jg
之间的区别在于,ja
的比较是无符号的,jg
的比例是有符号的(将寄存器视为有符号与无符号整数)。 / p>
如果数字保证为正数(即符号位为0)那么你应该没问题。否则你必须小心。
如果ja
适用,你真的不能根据比较指令本身直觉。您必须查看上下文并确定签名是否会成为问题。
答案 1 :(得分:7)
dx
为0x0680,则dh
为0x06,dl
为0x80。jg
,因为6> -128,但是6< 128. jg
签署比较; ja
执行无符号比较。