3.1 历史观点 3.2 程序编码

3.1
Intel处理器系列俗称x86。
8086、8087、8088、80286,16位;
i386、i486,32位;
Pentium、PentiumPro、Pentium2、Pentium3、Pentium4、Pentium4E;
Core2、Core I7.

3.2
gcc -Og -o p p1.c p2.c
命令gcc指的就是GCC C编译器。-Og选项告诉计算机编译生成尽可能符合c代码结构的汇编代码。编译过程包括:C预处理器扩展源代码,主要处理include和define;编译器产生两个源文件的汇编代码p1.s和p2.s;汇编器将汇编代码生成两个二进制目标代码文件p1.o和p2.o,目标代码是机器代码的一种形式,包含所有指令的二进制表示;最后链接器将两个目标代码文件和实现库函数的代码合并产生最终的可执行代码文件p。可执行代码是机器代码的第二种形式,是处理器执行的代码格式。

一、机器级代码
1、机器级编程的两个重要抽象:指令集架构定义了处理器状态和指令的格式;内存地址是虚拟地址,内存模型看上去像一个大的字节数组。
2、汇编代码非常接近于机器代码。
3、程序计数器、寄存器、逻辑处理器、向量寄存器等。
4、程序内存包括:程序的可执行机器代码、操作系统需要的一些信息、管理过程调用和返回的运行时栈以及用户分配的内存块。

二、代码示例
1、gcc -Og -s xxx.c,可以得到汇编代码。
2、objdump -d xxx.o,反汇编器,从机器代码得到汇编代码。

三、关于格式的注释
1、汇编程序员写汇编的格式,在右侧添加网络旁注
pushq %rbx save%rbx
movq %rdx,%rbx move dest to %rbx
call multi2 call multi2(x,y)
movq %rax, (%rbx) store result at *dest
popq %rbx restore %rbx
ret return
2、对于一些应用程序,程序员必须用汇编语言访问机器的低级特性。一种方法是用汇编代码编写整个函数,然后在链接阶段把它们和C函数组合起来。另一种方法是利用GCC的支持,直接在C程序中嵌入汇编代码。
3、我们书写的汇编代码格式是ATT,这也是GCC和OBJDUMP的默认格式,此外还有Intel

你可能感兴趣的:(3.1 历史观点 3.2 程序编码)