跳至主要內容

ComputerSystems

LincZero大约 2 分钟

ComputerSystems

目录

汇编数据类型

数据指定

汇编数据格式(位宽修饰符)

Inter术语字(word)表示16位数据类型(从16位体系结构扩展而来的原因),字不等于字长 一般不用字长正概念,高级语言中常用字节表示数据大小、汇编语言中常用字表示数据大小

  • 32位1字长=2字=4B,1字=2字节
  • 64位1字长=4字=8B,1字=2字节

C语言数据类型与汇编位宽修饰符的关系:(x86-64,64位机器中,指针长:4字 = 1个字长 = 2^64bit = 64位 = 8字节)

C声明汇编代码后缀
/位宽修饰符
后缀含义(double作l)Intel数据类型字节大小
charbbyte字节1
shortwword2
intldouble words双字4
longqquad words四字8
char *qquad words四字8
floatssingle ...单精度4
doubleldouble ...双精度8

表附:

  • int和double后缀都是l但字节大小不同:但不产生歧义,浮点数会使用一组完全不同的指令和寄存器
  • 使用立即数时需要加位宽修饰符且长度应该匹配 (否则warning)
  • 以寄存器为目的时不需要加修饰符因为寄存器宽度固定 (8086寄存器不拆开时是16位)

操作数指示符

reg		;register	寄存器	跟8/16
mem		;memory		内存	跟8/16
imm		;immediate	立即数	跟8/16

操作数格式(Mb为简便省去下标b,比例因子s必须是1/2/4/8)

类型格式操作数值寻址模式名称举例
立即数(immediate)$ImmImm立即数寻址mov ax, 0xb800
寄存器(register)raR[ra]寄存器寻址
存储器ImmM[Imm]绝对寻址
存储器(ra)M[R[ra]]间接寻址mov bl, [ds:si]
存储器Imm(rb)M[Imm+R[rb]](基址+偏移量)寻址
存储器(rb, ri)M[R[rb]+R[ri]]变址寻址
存储器Imm(rb, ri)M[Imm+R[rb]+R[ri]]变址寻址
存储器Imm(, ri, s)M[R[ri] · s]比例变址寻址
存储器ImmM[Imm+R[ri] · s]比例变址寻址
存储器(rb, ri, s)M[R[rb]+R[ri] · s]比例变址寻址
存储器Imm(rb, ri, s)M[Imm+R[rb]+R[ri] · s]比例变址寻址

根据操作数的可能性分三种类型:立即数、寄存器、内存引用(其他内存引用都是表中最后一行的特殊情况,只用记最后一行就行了!)