由于CPU是从16位体系结构扩展成32位的,Intel用术语字(word)
表示16位数据类型,因此称32位数为双字(double words)
,称64位数为四字(quad words)
。
C声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
---|---|---|---|
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char* | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
大多数GCC生成的汇编代码指令都有一个字符的后缀,表明操作数的大小,例如数据传送指令有四个变种:movb(传送字节)
,movw(传送字)
,movl(传送双字)
和movq(传送四字)
。后缀l
用来表示双字,因为32位数被看成是长字(long word)
。
注意:汇编代码也是用l
来表示4字节整数和8字节双精度浮点数,这不会产生歧义,因为浮点数使用的是一组完全不同的指令和寄存器。