ComputerSystems
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数据类型 | 字节大小 | 
|---|---|---|---|---|
| char | b | byte | 字节 | 1 | 
| short | w | word | 字 | 2 | 
| int | l | double words | 双字 | 4 | 
| long | q | quad words | 四字 | 8 | 
| char * | q | quad words | 四字 | 8 | 
| float | s | single ... | 单精度 | 4 | 
| double | l | double ... | 双精度 | 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) | $Imm | Imm | 立即数寻址 | mov ax, 0xb800 | 
| 寄存器(register) | ra | R[ra] | 寄存器寻址 | |
| 存储器 | Imm | M[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] | 比例变址寻址 | |
| 存储器 | Imm | 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] | 比例变址寻址 | 
根据操作数的可能性分三种类型:立即数、寄存器、内存引用(其他内存引用都是表中最后一行的特殊情况,只用记最后一行就行了!)
链接到当前文件 0
没有文件链接到当前文件