x86-64数据格式、通用寄存器与操作数格式

x86-64数据格式、通用寄存器与操作数格式

数据格式

​ Intel用术语“字(word)”表示16位数据类型,32位为“双字(double words)”,64位数为“四字(quad words)”。

C声明Intel数据类型汇编代码后缀大小(字节)
char字节b1
shortw2
int双字l4
long四字q8
char*四字q8
float单精度s4
double双精度l8

大多数GCC生成的汇编代码指令都有一个字符的后缀,表明操作数的大小。

​ 例如,数据传送指令有四个变种:movb(传送字节)、movw(传送字)、movl(传送双字)、movq(传送四字)。“l”表示双字时意为“长字(longword)”。后缀“l”既可表示四字节整数,也可表示双精度浮点数的原因是整数和浮点数使用的是完全不同的指令和寄存器,因此不会产生歧义。

通用寄存器

通用目的寄存器用于存储整数数据和指针。其名称与功能如下表所示:

63~0位31~0位15~0位7~0位用途
%rax%eax%ax%al返回值
%rbx%ebx%bx%bl被调用者保存
%rcx%ecx%cx%cl第4个参数
%rdx%edx%dx%dl第3个参数
%rsi%esi%si%sil第2个参数
%rdi%edi%di%dil第1个参数
%rbp%ebp%bp%bpl被调用者保存
%rsp%esp%sp%spl栈指针
%r8%r8d%r8w%r8b第5个参数
%r9%r9d%r9w%r9b第6个参数
%r10%r10d%r10w%r10b调用者保存
%r11%r11d%r11w%r11b调用者保存
%r12%r12d%r12w%r12b被调用者保存
%r13%r13d%r13w%r13b被调用者保存
%r14%r14d%r14w%r14b被调用者保存
%r15%r15d%r15w%r15b被调用者保存

指令可以访问16个通用寄存器中的地位字节。

操作数格式

操作数的寻址有如下方式:

  • 立即数,用来表示常数值,书写方式为'$'加标准C表示法表示的整数,如$-577或$0x1F。
  • 寄存器,R[ra]表示ra寄存器的内容。
  • 内存引用,M[Addr]表示地址为Addr的存储单元内的值

立即数Imm、基址寄存器rb、变址寄存器ri、比例因子s(其值为1、2、4、8)。

类型格式操作数值名称
立即数$ImmImm立即数寻址
寄存器raR[ra]寄存器寻址
存储器ImmM[Imm]绝对寻址
存储器(ra)M[R[ra]]间接寻址
存储器Imm(rb)M[Imm+R[rb]](基址+偏移量)寻址
存储器(rb,ri)M[R[rb]+R[ri]]变址寻址
存储器Imm(rb,ri)M[Imm+R[rb]+R[ri]]变址寻址
存储器(,ri,s)M[R[ri]*s]比例变址寻址
存储器Imm(,ri,s)M[Imm+R[ri]*s]比例变址寻址
存储器(rb,ri,s)M[R[rb]+R[ri]*s]比例变址寻址
存储器Imm(rb,ri,s)M[Imm+R[rb]+R[ri]*s]比例变址寻址

例如:

%rax为寄存器寻址,(%rax)为间接寻址,$0x108为立即数寻址,0x104为绝对寻址。

由此可发现具有如下规律:

1412099-20190718211228817-610710609.png

转载于:https://www.cnblogs.com/sgawscd/p/11210026.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值