XOR register,register (assembler)

前端 未结 3 736
轮回少年
轮回少年 2020-12-20 16:16

From time to time we have to analyze pieces of assembler code (IA32), and more than often i come across an instruction that looks like this:

xor ax, ax


        
相关标签:
3条回答
  • 2020-12-20 16:47

    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
    
    0 讨论(0)
  • 2020-12-20 16:50

    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

    0 讨论(0)
  • 2020-12-20 16:51

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

    0 讨论(0)
提交回复
热议问题