XOR寄存器,寄存器(汇编程序)

时间:2011-11-20 13:05:50

标签: x86 assembly xor ia-32

我们不时要分析汇编代码(IA32), 而且我经常遇到一个看起来像这样的指令:

xor ax, ax

或与其他寄存器一样:xor dx, dxxor al, al,...

这到底是做什么的? (ax xor ax总是给0?)

3 个答案:

答案 0 :(得分:13)

将寄存器设置为0是一种常见的汇编语言。

xor ax, ax对应于ax = ax ^ ax,正如您已经注意到的那样,ax = 0实际上是mov ax, 0

如果我没记错,主要优点是其代码大小小于{{1}}

答案 1 :(得分:2)

这正是它的作用 - 将寄存器的内容归零

答案 2 :(得分:1)

xor%ax,%ax,如先前评论中所述,对应于ax = ax xor ax。这基本上设置ax = 0.此外,它还影响/修改一些EFLAGS,例如OF,CF,SF,PF或ZF。在这种情况下,将设置PF和ZF标志。

SF - 指示上一次操作的结果是否导致最高有效位设置为1的值。

PF - 指示上次操作结果的二进制表示中的设置位数是奇数还是偶数。

ZF - 如果数学/逻辑运算的结果为零或者以其他方式重置,则置位。

示例如下所示,使用GDB代码段。

说明:xor%ax,%ax

在“xor”之前

(gdb) info registers
eax            0xaa55   43605
ecx            0x0  0
edx            0x80 128
ebx            0x0  0
esp            0x6f20   0x6f20
ebp            0x0  0x0
esi            0x0  0
edi            0x0  0
eip            0x7c02   0x7c02
eflags         0x2  [ ]
cs             0x0  0
ss             0x0  0
ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0

在“xor”之后

(gdb) info registers
eax            0x0  0          --------------------> AX = 0          
ecx            0x0  0
edx            0x80 128
ebx            0x0  0
esp            0x6f20   0x6f20
ebp            0x0  0x0
esi            0x0  0
edi            0x0  0
eip            0x7c04   0x7c04
eflags         0x46 [ PF ZF ] --------------------> Flags Set
cs             0x0  0
ss             0x0  0
ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0