从C到机器代码机器代码就是处理器能够直接执行的字节层面上的程序,但是对于人类来说基本上是不可读的,所以把字节按照具体含义进行『翻译』,就成了人类可读的汇编代码。注意这里的用词是『翻译』而不是『编译』,可以认为汇编代码就是机器代码的可读形式。
C->可执行程序:
C 语言代码(a.c)经过编译器的处理(gcc -0g -S)成为汇编代码(a.s)
汇编代码(a.s)经过汇编器的处理(gcc 或 as)成为对象程序(a.o)
对象程序(a.o)以及所需静态库(lib.a)经过链接器的处理(gcc 或 ld)最终成为计算机可执行的程序
先来看一段C代码及其经过汇编产生的代码
12345678// C 代码*dest = t;// 对应的汇编代码movq %rax, (%rbx)// 对应的对象代码0x40059e: 46 89 03
C 代码的意思很简单,就是把值 t 存储到指针 dest 指向的内存中。对应到汇编代码,就是把 8字节(也就是四个字, Quad words)移动到内存中(这也就是为什叫做 movq)。t 的值保存在寄存器 %rax 中,dest 指向的地址 ...