机器级编程——数据格式和寄存器知识

89 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第28天,点击查看活动详情

前言

在编程中,我们最常使用的就是数据以及数据是如何传输的,那么认识数据格式以及数据的表示形式是非常重要的。以及数据如何在计算机传输的?

数据格式

在x86中有多种数据格式,Intel用术语“字(word)”表示16位数据类型,32位数称为“双字(double words)” 例如int值存储的形式就是双字,64位数称为”四字(quad word)“。指针和long存储为8字节的四字。

C声明Intel数据类型汇编代码后缀大小(字节)
char字节b1
shortw2
int双字l4
long四字q8
char*四字q8
float单精度s4
double双精度l8

大家想必也注意到了double和int数据类型的汇编代码后缀的表示都是一样的l,其实这个不用担心的,因为浮点数使用的指令是另外的,跟整数的指令不是相同的。

寄存器

在x86的中央处理单元(CPU)中包含者一组存储64位值的通用目的的寄存器。这些寄存器用来存储整数数据和指针的。寄存器列表如下所示:

image.png 这些寄存器按照字节的大小,比如1字节,2字节,4字节,8字节的大小有各自的寄存器名称,1-8个的命名目前已经没有特殊的含义了,这是历史遗留的名称,现在我们当作是一个单纯的名称标识即可。寄存器有几条特殊的规则:

  • 生成1字节或者2字节数字的指令会保持剩下的字节不变
  • 生成4字节数字的指令会把高位4个字节设置为0.
  • 栈指针%rsp,用来指明栈的结束位置。

对于寄存器,我们主要是要记住它的功能作用,比如%rax就是返回值,%rdi就是第一个参数。这些作用要有一定的印象的。

总结

今天我们了解了数据格式的表示以及寄存器的作用。