XOR register,register (assembler)

那年仲夏 提交于 2019-11-29 13:43:45

It's a common assembler idiom to set a register to 0.

xor ax, ax corresponds to ax = ax ^ ax which, as you already notices, is effectively ax = 0.

If I recall correctly the main advantage is that its code-size is smaller than mov ax, 0

That is exactly what it does -- zero the contents of a register

xor %ax, %ax, as stated in earlier comments corresponds to ax = ax xor ax. This essentially set ax = 0. In addition, it also affects/modifies some of the EFLAGS such as OF, CF, SF, PF or ZF. In this case, PF and ZF flags will be set.

SF - Indicates whether the result of the last operation resulted in a value whose most significant bit is set to 1.

PF - Indicates if the number of set bits is odd or even in the binary representation of the result of the last operation.

ZF - It is set if the result of the mathematical/logical operation is zero or reset otherwise.

Example is shown below using GDB snippets.

Instruction: xor %ax,%ax

Before "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

After "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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!