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适合(或者在这种情况下,不适合,我应该如何解决) )这段代码?
ja和之间的区别在于jg比较是无符号的ja并且已签名jg(将寄存器视为有符号与无符号整数).
如果数字保证为正数(即符号位为0)那么你应该没问题.否则你必须小心.
如果ja适用的话,你真的不能根据比较指令本身直觉.您必须查看上下文并确定符号是否会成为问题.
dx是0x0680,那么dh是0x06并且dl是0x80.jg,因为6> -128,但是6 <128.jg签名比较; ja没有签名的比较.