Assembly 如何解释x86-64 xor后跟jle?
如果部分装配代码如下所示:Assembly 如何解释x86-64 xor后跟jle?,assembly,x86,x86-64,eflags,Assembly,X86,X86 64,Eflags,如果部分装配代码如下所示: xor %ebp,%ebx jle some address 这个jle是否意味着它将在(%ebx^%ebp==0)时跳转,因为这会将ZF设置为1?这是实现jle的方法之一。另一个是SF≠OF,根据手册: 因为XOR总是清除,SF!=OF减少到仅SF jle如果SF | ZF,将在布尔运算后执行,即如果结果是,那么如果%ebp和%ebx的最高有效位不同或相等,它将跳转?很难想象,除了作为一个考试题之外,什么时候它会有用。@NateEldredge:我想在我的答案
xor %ebp,%ebx
jle some address
这个jle是否意味着它将在(%ebx^%ebp==0)时跳转,因为这会将ZF设置为1?这是实现jle的方法之一。另一个是
SF≠OF
,根据手册:
因为XOR总是清除,SF!=OF
减少到仅SF
jle
如果SF | ZF
,将在布尔运算后执行,即如果结果是,那么如果%ebp
和%ebx
的最高有效位不同或相等,它将跳转?很难想象,除了作为一个考试题之外,什么时候它会有用。@NateEldredge:我想在我的答案中说一些关于它的话,而不是告诉你很多关于输入的信息,因为是的,这似乎不是一件有意义的事情,除非其中一个寄存器只能设置或不设置符号位,或者类似的事情。但似乎可以用异或的结果做一些事情,让编译器想测试它的>0
。对结果执行其他操作,将其视为有符号整数,肯定会导致编译器将其与xor一起优化;这正是我们使用编译器的原因。