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
版权声明:本文标题:64位汇编语言简介 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710121539a558779.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论