数据格式
由于是从16位体系结构扩展至32位的,因此Intel用术语“字(word)”表示16位数据类型。因此,称32位数据为“双字”,称64位数据为“4字”。C语言与x86-64的基本数据类型对应关系如下表所示。
C语言声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char* | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
一个x86-64的中央处理器单元(CPU)包含一组16个共有64位值的通用寄存器。他们的名字都以%r开头。
操作数
大多数指令有一个或多个操作数(operand),指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。操作数被分为三种类型:
- 第一种类型是立即数(immediate),用来表示常数值。在ATT格式的汇编代码中,立即数的书写方式是‘$’后面跟一个用标准C语言表示法表示的数字,例如,$-577或$0x1F。
- 第二种类型是寄存器(register),它表示某个寄存器的内容。例如,%rax。
- 第三种类型是内存引用,它会根据计算出来的地址(通常称为有效地址)访问某个内存位置。