
本书主要面向应用型大学计算机类专业学生,从程序员的视角出发,围绕可执行文件的生成、加载和执行,重点介绍如何利用计算机系统相关知识来编写更有效的程序。全书将每个环节涉及的硬件和软件的基本概念关联起来,帮助学生建立完整的层次框架,从而加强“系统观”。本书共分8章,涵盖计算机系统基础、高级语言程序、数据的机器级表示、数据的基本运算、指令集体系结构、程序的机器级表示、程序的链接、程序的加载和执行等内容。本书内容详尽、概念清楚、实例丰富,适合作为高等学校计算机专业计算机系统相关课程的教材,也适合相关专业的研究生和技术人员阅读参考。
封面
前折页
书名页
版权
前言
第1章 计算机系统概述
1.1 计算机基本工作原理
1.1.1 冯·诺依曼结构基本思想
1.1.2 冯·诺依曼模型机基本结构
1.1.3 程序和指令的执行过程
1.2 程序的开发与运行
1.2.1 程序设计语言和翻译程序
1.2.2 从源程序到可执行文件
1.2.3 可执行文件的启动和执行
1.3 计算机系统的层次结构
1.3.1 计算机系统抽象层的转换
1.3.2 计算机系统核心层之间的关联
1.3.3 计算机系统的不同用户
1.4 本书的主要内容和组织结构
1.5 小结
习题
第2章 高级语言程序
2.1 C语言概述
2.2 变量和常量及其类型
2.2.1 C程序中的变量及其类型
2.2.2 C程序中的常量及其类型
2.3 表达式及运算符
2.3.1 C语言表达式中的运算符
2.3.2 C语言程序中的运算
2.4 控制结构和函数调用
2.4.1 C语言中的控制结构
2.4.2 C语言中的函数调用
2.4.3 变量的作用域及其存储分配
2.4.4 C标准I/O库函数
2.5 小结
习题
第3章 数据的机器级表示
3.1 二进制编码和进位计数制
3.1.1 信息的二进制编码
3.1.2 进位计数制
3.1.3 进位计数制之间数据的转换
3.2 整数的表示
3.2.1 定点数的编码表示
3.2.2 无符号整数和带符号整数的表示
3.2.3 C语言中的整数及其相互转换
3.3 浮点数的表示
3.3.1 浮点数的表示范围
3.3.2 浮点数的规格化
3.3.3 IEEE 754浮点数标准
3.3.4 C语言中的浮点数类型
3.4 非数值数据的编码表示
3.4.1 位串或逻辑值
3.4.2 西文字符
3.4.3 汉字字符
3.5 数据的宽度和存储
3.5.1 数据的宽度和长度单位
3.5.2 数据的存储和排列顺序
3.5.3 数据扩展和数据截断操作
3.6 小结
习题
第4章 数据的基本运算
4.1 布尔代数和逻辑运算
4.1.1 布尔代数
4.1.2 逻辑电路基础
4.2 基本运算电路
4.2.1 多路选择器
4.2.2 全加器和加法器
4.2.3 带标志信息加法器
4.2.4 算术逻辑部件
4.3 整数加减运算
4.3.1 补码加减运算器
4.3.2 无符号整数加减运算
4.3.3 带符号整数加减运算
4.3.4 对整数加减运算结果的解释
4.4 整数的乘运算
4.4.1 无符号数乘法运算
4.4.2 原码乘法运算
4.4.3 补码乘法运算
4.4.4 两种整数乘的关系
4.5 整数的除运算
4.5.1 无符号数除法运算
4.5.2 原码除法运算
4.5.3 补码除法运算
4.6 整数常量的乘除运算
4.7 浮点数运算
4.7.1 浮点数加减运算
4.7.2 浮点数乘除运算
4.7.3 浮点运算异常和精度
4.8 小结
习题
第5章 指令集体系结构
5.1 程序转换概述
5.1.1 机器指令与汇编指令
5.1.2 指令集体系结构概述
5.1.3 生成机器代码的过程
5.2 IA-32指令系统概述
5.2.1 数据类型及格式
5.2.2 寄存器组织
5.2.3 操作数的寻址方式
5.2.4 机器指令格式
5.3 IA-32常用指令类型
5.3.1 传送指令
5.3.2 定点算术运算指令
5.3.3 按位运算指令
5.3.4 程序执行流控制指令
5.3.5 x87浮点处理指令
5.3.6 MMX/SSE指令集
5.4 兼容IA-32的64位系统
5.4.1 x86-64的发展简史
5.4.2 x86-64的基本特点
5.4.3 x86-64的基本指令
5.5 小结
习题
第6章 程序的机器级表示
6.1 过程调用的机器级表示
6.1.1 IA-32中过程的调用约定
6.1.2 变量的作用域和生存期
6.1.3 按值传递参数和按地址传递参数
6.1.4 递归过程调用
6.1.5 非静态局部变量的存储分配
6.1.6 x86-64的过程调用
6.2 流程控制语句的机器级表示
6.2.1 选择语句的机器级表示
6.2.2 循环结构的机器级表示
6.3 复杂数据类型的分配和访问
6.3.1 数组的分配和访问
6.3.2 结构体数据的分配和访问
6.3.3 联合体数据的分配和访问
6.3.4 数据的对齐
6.4 越界访问和缓冲区溢出
6.4.1 缓冲区溢出
6.4.2 缓冲区溢出攻击
6.4.3 缓冲区溢出攻击的防范
6.5 小结
习题
第7章 程序的链接
7.1 编译、汇编和静态链接
7.1.1 预处理、编译和汇编
7.1.2 可执行目标文件的生成
7.2 目标文件格式
7.2.1 ELF目标文件格式
7.2.2 可重定位目标文件格式
7.2.3 可执行目标文件格式
7.2.4 可执行文件的存储器映射
7.3 符号表和符号解析
7.3.1 符号和符号表
7.3.2 符号解析
7.3.3 与静态库的链接
7.4 重定位
7.4.1 重定位信息
7.4.2 重定位过程
7.5 动态链接
7.5.1 动态链接的特性
7.5.2 程序加载时的动态链接
7.5.3 程序运行时的动态链接
7.5.4 位置无关代码
7.6 小结
习题
第8章 程序的加载和执行
8.1 进程与可执行文件的加载
8.1.1 程序和进程的概念
8.1.2 Linux系统的虚拟地址空间
8.1.3 进程的存储器映射
8.1.4 程序的加载过程
8.2 进程的控制
8.2.1 进程的逻辑控制流
8.2.2 进程的上下文切换
8.3 程序执行与CPU基本组成
8.3.1 程序及指令的执行过程
8.3.2 打断程序正常执行的事件
8.3.3 CPU的基本功能和组成
8.4 小结
习题
附录A gcc的常用命令行选项
附录B GDB的常用命令
参考文献
后折页
封底
机械工业出版社 京icp备14043556号-1 (署)网出证(京)字第214号 Copyright (C) 2001 CmpBook. All Rights Reserved