一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情。
前言
在编程中,我们最常使用的就是数据以及数据是如何传输的,那么认识数据格式以及数据的表示形式是非常重要的。以及数据如何在计算机传输的?
数据格式
在x86中有多种数据格式,Intel用术语“字(word)”表示16位数据类型,32位数称为“双字(double words)” 例如int值存储的形式就是双字,64位数称为”四字(quad word)“。指针和long存储为8字节的四字。
C声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节) |
---|---|---|---|
char | 字节 | b | 1 |
short | 字 | w | 2 |
int | 双字 | l | 4 |
long | 四字 | q | 8 |
char* | 四字 | q | 8 |
float | 单精度 | s | 4 |
double | 双精度 | l | 8 |
大家想必也注意到了double和int数据类型的汇编代码后缀的表示都是一样的l,其实这个不用担心的,因为浮点数使用的指令是另外的,跟整数的指令不是相同的。
寄存器
在x86的中央处理单元(CPU)中包含者一组存储64位值的通用目的的寄存器。这些寄存器用来存储整数数据和指针的。寄存器列表如下所示:
这些寄存器按照字节的大小,比如1字节,2字节,4字节,8字节的大小有各自的寄存器名称,1-8个的命名目前已经没有特殊的含义了,这是历史遗留的名称,现在我们当作是一个单纯的名称标识即可。寄存器有几条特殊的规则:
- 生成1字节或者2字节数字的指令会保持剩下的字节不变
- 生成4字节数字的指令会把高位4个字节设置为0.
- 栈指针%rsp,用来指明栈的结束位置。
对于寄存器,我们主要是要记住它的功能作用,比如%rax就是返回值,%rdi就是第一个参数。这些作用要有一定的印象的。
总结
今天我们了解了数据格式的表示以及寄存器的作用。