admin 管理员组

文章数量: 1184232


2024年3月11日发(作者:伦勃朗光为什么这么厉害)

x86-64位汇编语言简介

一、x86-64的寄存器

x86-64较x86-32多了8个通用寄存器,而且,每个通用寄存器都是64位宽,它们是:

rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp

r8,r9,r10,r11,r12,r13,r14,r15

同时,x86-64全面支持x86-32和x86-16的通用寄存器:

eax,ax,al,ah,

ebx,bx,bl,bh,

....

而且,还对传统的edi,esi做了改进:

edi ,32位

di,16位

dil ,8位,在传统的x86机器中,di是不可按照8位来访问的,但在x86-64下可以。

同样esi也可以按照8位来访问。一个很特别的寄存器 rip,相当于x86-32的eip.

在x86-32是不可直接访问的,如mov eax,eip是错的,但在x86-64位下却可以,如

mov,rax,qword ptr [rip+100]是对的。而且,它除了是个程序计数器外,也是个“数据基

地址”,有此可见,它现在是身兼两职!为什么在x86-64位下要用rip做访问数据的基地

址呢?因为,在x86-64下,DS,ES,CS,SS都没有实际意义了,也就是说,它们不再参与地

址计算,只是为了兼容x86-32。FS,GS还是参与地址计算,它们两个和x86-32的意义相

同。

二、x86-64的汇编

x86-64的汇编和x86-32的没有多大的区别。添加了新寄存器和指令。

写64位汇编代码时,可以用8、16、32、64位寄存器,如:

push rdi

sub rsp, 48 ;

mov r10, rcx

; Line 36

mov rdi, rdx

xor eax, eax


本文标签: 访问 寄存器 计算