c语言之数据格式
intel用术语“字(word)”表示16位数据类型。因此称32位数为“双字(double word)”,称64位数为“四字(quad word)”。下表给出的是x86-64表示的c语言基本的数据类型。标准的int值存储为双字(32位)。指针(在此用char * 表示)存储为八字节的四字。
c声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
---|---|---|---|
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char * | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
浮点数主要有两种形式:单精度(4字节)值,对应c语言数据类型float:双精度(8字节)值,对应于c语言数据类型double。
如图所示,大多数GCC生成的汇编代码指令都有一个字符的后缀,表明操作数的大小。例如,数据传送指令的四个变种:movb(传送字节),movw(传送字),movl(传送双字),movq(传送四字)。后缀“ l ”用来表示双字,因为32位数被看成是“长字(long word)”。注意,汇编代码也使用后缀“ l ”来表示4字节整数和8字节双精度浮点数。这不会产生歧义,因为浮点数使用的是一组完全不同的指令和寄存器。