Assembly 理解cmp指令中的部分标志

Assembly 理解cmp指令中的部分标志,assembly,x86,att,eflags,Assembly,X86,Att,Eflags,我想我不太明白eflags寄存器中的PF是什么。以下是我为了解其工作原理所做的两个比较: # a > b -- 0b01 mov $4, %rax mov $3, %rbx cmp %rax, %rbx # [ CF PF AF SF IF ] *PF* included # a > b -- 0b10 mov $5, %rax mov $3, %rbx cmp %rax, %rbx # [ CF AF SF IF ] # a = b -- 0b00 mo

我想我不太明白eflags寄存器中的
PF
是什么。以下是我为了解其工作原理所做的两个比较:

 # a > b -- 0b01
 mov $4, %rax
 mov $3, %rbx
 cmp %rax, %rbx  # [ CF PF AF SF IF ] *PF* included

 # a > b -- 0b10
 mov $5, %rax
 mov $3, %rbx
 cmp %rax, %rbx  # [ CF AF SF IF ]

 # a = b -- 0b00
 mov $5, %rax
 mov $5, %rbx
 cmp %rax, %rbx  # [ PF ZF IF ] *PF* included

在第一次操作中,比较将产生
1
0x01
,在第二次操作中,比较将产生
2
0x10
。那么为什么奇偶校验标志设置在第一个而不是第二个,因为它们都有一个位设置为1。

3-4=0xFFFFFFFFFF
。在低位字节中设置的偶数位。别忘了,这里是AT&tsyntax@PeterCordes我懂了。但是为什么它要以
4-3
而不是
3-4
的方式进行比较呢?它不做
4-3
。它有
3-4
。AT&T语法始终是最后一个目标,操作数列表与Intel语法相反。因此
cmp%rax,%rbx
类似于
sub%rax,%rbx
,但不修改目的地(rbx)。如果像
cmp
这样的指令没有反转它们的操作数列表,那就更奇怪了。@PeterCordes得到了它——实际上这有点棘手,感谢您澄清了
cmp
在做标记时是如何工作的。