1.4 本书的主要内容和组织结构
本书将围绕高级语言程序开发和执行所涉及的与底层机器级代码的生成和运行等相关的内容展开,具体包括高级语言程序的转换、程序中处理的数据在机器中的表示和运算、程序中各类控制语句对应的机器级代码的结构、可执行目标代码的链接生成、可执行目标代码的加载和执行等。
本书以高级语言程序为出发点来组织内容,按照“自顶向下”的方式,从高级语言程序→汇编语言程序→机器指令序列的顺序,展现程序从编程设计、翻译转换、链接,到最终运行的整个过程。
本书各章的主要内容说明如下。
第1章计算机系统概述
主要介绍计算机的基本工作原理、冯·诺依曼结构基本思想及冯·诺依曼结构计算机的基本构成、程序和指令执行过程、计算机系统的基本功能和基本组成、程序的开发与运行、计算机系统层次结构等概述性内容。
第2章高级语言程序
本书基于“IA-32/x86-64+Linux+GCC+C语言”平台介绍计算机系统的基础内容,因此第2章先从C语言程序出发,以C语言为基础介绍高级语言程序的基本内容,如变量和常量、表达式、函数和函数调用、变量的作用域及其存储分配、语句和流程控制结构等,将C语言程序与教材后续各章节内容建立关联,主要起教材导引和关联的作用。
第3章数据的机器级表示
高级语言程序中包括各种整数类型和浮点数类型数据,第3章重点讨论这些高级语言程序中的数据在计算机内部是如何表示的和存储的,主要包括进位计数制、二进制定点数的编码表示、无符号整数和带符号整数的表示、IEEE 754浮点数表示标准、西文字符和汉字的编码表示、C语言中各种类型数据的表示和转换、数据的宽度和在存储器中的存放顺序。
第4章数据的基本运算
计算机中运算部件只有有限位数,因而计算机中的算术运算与现实中的算术运算有所区别,例如,一个整数的平方可能为负数,一个负整数可能比一个正整数大,两个正整数的乘积可能比乘数小,浮点数运算时可能不满足结合律。计算机算术运算的这些特性使得有些程序会产生意想不到的结果,甚至造成安全漏洞,许多程序员为此感到困惑和苦恼。第4章将从数据的基本运算电路层面来解释计算机算术运算的本质特性,从而使程序员能够清楚地理解由于计算机算术的局限性而造成的异常程序行为。主要包括布尔代数和逻辑运算、基本运算电路、整数加减运算原理及其运算电路、整数乘除运算基本原理及其运算电路、浮点数运算。
第5章指令集体系结构
计算机硬件只能识别和理解机器语言程序,用高级语言编写的源程序要通过编译、汇编、链接等处理,生成以机器指令形式表示的机器语言,才能在计算机上直接执行。机器语言程序有相应的标准规范,这就是位于软件和硬件交界面的指令集体系结构,所有程序最终都必须转换为基于ISA规范的机器指令代码。第5章介绍程序的转换以及指令集体系结构相关的基本内容,主要包括程序转换概述、操作数类型及寻址方式、操作类型、Intel架构指令系统IA-32和x86-64中的各类基本指令。
第6章程序的机器级表示
高级语言程序员使用高度抽象的过程调用、控制语句和数据结构等来实现算法,因而无法了解程序在计算机系统中执行的细节,无法真正理解程序设计中的许多抽象概念,也就很难解释清楚某些程序的行为和执行结果。第6章在机器级汇编指令层面来解释程序的行为,因而能较为清楚地说明程序执行结果。本章主要介绍高级语言中的过程调用和控制语句(如选择、循环等结构语句)所对应的汇编指令序列,以及各类数据结构(如数组、指针、结构、联合等)元素的访问所对应的汇编指令序列。学习本章将会明白以下一些问题:过程调用时按值传递参数和按地址传递参数的差别在哪里?缓冲区溢出的漏洞是如何造成的?为什么递归调用会耗内存?为什么同样的程序在32位架构上和64位架构上执行的结果会不同?指针操作的本质是什么?
第7章程序的链接
主要介绍如何将多个程序模块链接起来生成一个可执行目标文件。通过介绍与链接相关的可重定位目标文件格式、符号解析、重定位、静态库、共享目标库等内容,使程序员清楚地了解哪些问题是与链接相关的,例如,程序一些意想不到的结果是由于变量在多个模块中的多重定义造成的;链接时可能存在一些无法解析的符号是与指定的输入文件顺序有关的。此外,链接生成的可执行目标文件与程序加载、虚拟地址空间和存储空间映射等重要内容相关,对于理解操作系统中的存储管理方面的内容非常有用,本章内容将为后续相关课程的学习打下坚实的基础。
第8章程序的加载和执行
前面第2章到第7章介绍了将高级语言源程序进行预处理、编译、汇编和链接形成可执行目标文件的过程,因而第8章将顺其自然地简要介绍可执行目标文件的加载以及机器代码在计算机中的执行。本章仅简要介绍程序和进程的概念、进程的存储器映射、程序的加载过程、进程的逻辑控制流和上下文切换、指令的执行过程、CPU的基本功能和基本组成以及打断程序正常执行的事件等基础内容。
不管构建计算机系统的各类硬件和软件如何千差万别,计算机系统的构建原理以及在计算机系统上程序的转换、生成、加载和执行的机理是相通的,因而,本书仅介绍特定计算机系统平台“IA-32/x86-64+Linux+GCC+C语言”下的相关内容。