《程序是怎样跑起来的》第十章主要讲的是通过汇编语言了解程序的实际构成。
在本章之前,我们也了解过汇编语言和反汇编语言。汇编语言转换成本地语言,负责转换工作的程序成为汇编器,转换这一处理本身成为汇编。本地代码也可以反过来转换成汇编语言的源代码。持有该功能的逆变换程序成为反汇编。通过编译器也可以输出汇编语言的源代码。汇编语言的源代码,是由转换成本地代码的指令和针对汇编器的伪指令所组成。汇编语言的语法是“操作码+操作数”。操作码指的是指令动作,操作数表示的是指令对象。寄存器是CPU中的存储区域。不过,寄存器并不仅仅具有存储指令和数据的功能,也有运算功能。x86系列CPU的寄存器的主要种类和角色如表10-2所示。寄存器的名称会通过汇编语言的源代码指定给操作数。内存中的存储区域是用地址编号来区分的。CPU内的寄存器是用eax及ebx这些名称来区分的。此外,CPU内部也有程序员无法直接操作的寄存器。例如,表示运算结果正负及溢出状态的标志寄存器及操作系统专用的寄存器等,都无法通过程序员编写的程序直接进行操作。
操作系统管理着计算机的资源,为程序的运行提供必要的环境和支持。它调度CPU进行运算,管理内存以存储数据,协调输入输出设备以实现人机交互。而硬件,尤其是CPU和内存,是程序得以运行的物质基础。CPU的寄存器、控制单元和运算单元协同工作,执行每一条指令,而内存则像是一个巨大的仓库,存放着程序运行时所需的数据和指令。第十章还详细解释了程序运行时会遇到的种种问题,如内存溢出、指针错误等,这些问题的出现往往是由于程序员的疏忽或对系统机制理解不足造成的。
在读了第十章的内容,我对于汇编语言有了更深的了解,也对于程序的构成有了足够的认识。