x64寄存器基本介绍
x64模式下有16个通用寄存器可使用,和x86相比多出了r8-r15共8个寄存器,这些寄存器每个都能能拆分为rXd(dword),rXw(word),rXb(byte)
rsp,rbp,rsi,rdi分别能分出最小单位spl,bpl,sil,dil,均为8位寄存器。
用户可用的寻址空间为00000000‘00000000-----00007FFF’FFFFFFFF
内核空间为FFFF8000‘-----FFFFFFFF’FFFFFFFF
对32位寄存器的操作
对32位寄存器的写,运算操作,会对相应64位寄存器的高32位清零。
例:
1.MOV eax,1
RAX = FFFF FFFF 0000 0000
执行后RAX = 0000 0000 0000 0001
2.XOR eax,eax
RAX = FFFF FFFF FFFF FFFF
执行后RAX = 0000 0000 0000 0001
立即数的使用
x64架构下优先使用32位的扩展。
例: MOV rax,1 //这条指令在编译中一般都会被编译为 MOV eax,1 ,
//因为 MOV eax,1的汇编指令的机器码会比MOV rax,1的机器码少四个字节,
//在指令多的情况下可以做到节约特别多的空间,且运行效率会更高
优先使用偏移寻址
例:
地址 机器码 指令
00000000‘10000000 E9 78563412 JMP 12345678