代码在文件中是以ascii码形式的存放的。比如#include 对应的ascii 码就是
# i n c l u d e
35 105 110 99 108 117 100 101
预处理的过程是处理所有以 # 开头的语句。所以除了
#define
,#include
也会被处理。比如处理#include <stdio.h>
, 编译器会将 stdio.h 文件的内容插入到目标文件中,如果 stdio.h 中还有#include
语句就递归处理下去。这样就得到了另一个.i
文件。- 编译阶段就是将
.i
文件翻译成汇编语言, 也就是.s
。 - 汇编阶段是将汇编语言翻译成机器指令,生成一个二进制可执行程序。二进制文件的编码就不是单纯的文本编码了,而是机器语言指令编码。
-
信息存储
一个字节8位,用二进制表示就是 0~255,用16进制表示就是 0x00~0xFF。每4位表示一个16进制数。因此2进制转16进制,是以4个二进制位来转换的。所以一个 int 类型的变量4个字节,用16进制表示是8个16进制数 0x12345678。
访问主存
CPU和主存之间数据的传输通过总线来实现。
总线的传输以字位单位,32 位系统上一个字是4个字节, 64位系统上是 8个字节。
每次 CPU和主存之间的数据传送都是通过一系列步骤完成,这些步骤成为 总线事务。
读事务从主存传送数据到CPU,写事务从CPU传送数据到主存。