程序是怎么跑起来的
硬件中的数据类型表示
硬件中的数据类型表示
硬件中的数据是平等的,不像程序会将数据划分三六九等。由于程序的另眼相待,导致我们不得不处理这种差异性。
在高级程序语言编译为汇编指令时,会按照高级程序语言的类型进行数据空间的划分。
例如:
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 ; cmov byte ptr [rbp - 1], 1 表示:把立即数 1 写入内存地址 rbp - 1,只写
- mov:数据传输指令
- byte ptr:明确内存操作数宽度为
字节 [rbp - 1]:有效地址;rbp一般作为栈帧基址,偏移是示例,真实偏移由编译器布局决定