计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理存储器、读写存储设备上的数据,以及利用网络通信。编译器基于编程语言的原则、目标机器的指令集和操作系统遵循的原则,经过一系列的阶段产生机器代码。GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编器和链接器,从而根据汇编代码生成可执行的机器代码。
当我们用高级语言编程的时候,机器屏蔽了程序的细节,即机器级的实现。与此相反,当用汇编代码编程的时候,程序员必须指定程序的低级指令以执行计算。高级语言提供的抽象级别比较高,大多数时候,在这种抽象级别上工作效率会更高,也更可靠。编译器提供的类型检查能帮助我们发现许多程序错误,并能够保证按照一致的方式来引用和处理数据。通常情况下,现代的优化编译器产生的代码至少与下一个熟练的汇编语言程序员手工编写的代码一样有效。最大的优点是,用高级语言编写的程序可以在很多不同的机器上编译和执行,而汇编代码则是与特定机器密切相关的。
程序员必须用汇编代码来访问机器的低级特性。一种方法是,整个函数都用汇编代码来写,然后在链接阶段与C语言函数结合起来。第二种方法是在C语言程序中直接利用GCC对嵌入汇编代码的支持。我们把两种不同机器语言的浮点代码分别放在两个网络旁注中。
一、历史观点
Intel处理器系列俗称x86,经历了一个长期的、不断进化的发展过程。开始时它是第一代单芯片、16位微处理器之一,由于当时集成电路技术水平十分有限,其中做了很多妥协。此后,它不断地成长,利用进步的技术满足更高性能和支持更高级操作系统的需求。
8086:(1978年,29K个晶体管)它是第一代单芯片、16位微处理器