汇编中的XOR语句

vik*_*dat 3 assembly gdb x86-64

我试图了解该程序的反汇编版本:

#include <stdio.h>

int main(){
   int i=0;
   printf("HELLO VIK");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

gdb反汇编:

(gdb) disass main
Dump of assembler code for function main:
0x0000000100000ef0 <main+0>:    push   rbp
0x0000000100000ef1 <main+1>:    mov    rbp,rsp
0x0000000100000ef4 <main+4>:    sub    rsp,0x10
0x0000000100000ef8 <main+8>:    mov    DWORD PTR [rbp-0xc],0x0
0x0000000100000eff <main+15>:   xor    al,al
0x0000000100000f01 <main+17>:   lea    rcx,[rip+0x50]        # 0x100000f58
0x0000000100000f08 <main+24>:   mov    rdi,rcx
0x0000000100000f0b <main+27>:   call   0x100000f2c <dyld_stub_printf>
0x0000000100000f10 <main+32>:   mov    DWORD PTR [rbp-0x8],0x0
0x0000000100000f17 <main+39>:   mov    eax,DWORD PTR [rbp-0x8]
0x0000000100000f1a <main+42>:   mov    DWORD PTR [rbp-0x4],eax
0x0000000100000f1d <main+45>:   mov    eax,DWORD PTR [rbp-0x4]
0x0000000100000f20 <main+48>:   add    rsp,0x10
0x0000000100000f24 <main+52>:   pop    rbp
0x0000000100000f25 <main+53>:   ret
Run Code Online (Sandbox Code Playgroud)

如果我正确理解前三行,则将基本指针作为返回地址推入堆栈。然后,将基本指针设置为当前堆栈指针。堆栈的大小设置为16个字节(x10)。int i的大小为12个字节(0xc),并设置为0。我不确定(xor al,al)会做什么。我是否正确插入了这个?xor al,al line是做什么的?

Mar*_*c B 5

xor al,al是将寄存器清零的快速方法。在x86汇编器中,它是一个字节的操作码,而在中是2bytes mov al, 0