Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

程序是怎么跑起来的

硬件中的数据类型表示

作者:oasis


硬件中的数据类型表示

硬件中的数据是平等的,不像程序会将数据划分三六九等。由于程序的另眼相待,导致我们不得不处理这种差异性。

在高级程序语言编译为汇编指令时,会按照高级程序语言的类型进行数据空间的划分。

例如:

c
char a;
short b;
long c;

a = 1;
b = 1;
c = 1;

对于数值 1 的存储,每种类型分配的字节数量是不一样的。所以在读取数据的时候,需要指定基址和偏移。

例如上面的代码编译后的汇编指令可能如下:

asm
mov byte ptr [rbp - 1], 1  ; a
mov byte ptr [rbp - 4], 1  ; b
mov byte ptr [rbp - 16], 1 ; c

mov byte ptr [rbp - 1], 1 表示:把立即数 1 写入内存地址 rbp - 1,只写 1 个字节。

  • mov:数据传输指令
  • byte ptr:明确内存操作数宽度为 1 字节
  • [rbp - 1]:有效地址;rbp 一般作为栈帧基址,偏移 1 是示例,真实偏移由编译器布局决定