Contents
前 言
第1章 计算机基础 1
1.1 认识电 1
1.2 信息表示 5
1.2.1 二进制 5
1.2.2 十六进制 6
1.3 计算 7
1.3.1 逻辑运算 8
1.3.2 逻辑门 8
1.3.3 加法器 10
1.4 内存 12
1.4.1 物理实现 12
1.4.2 数学抽象 16
1.5 总线 17
1.6 寄存器 20
1.7 程序 22
1.8 外存 26
1.9 外设及接口 27
1.9.1 I/O地址空间 28
1.9.2 内存映射I/O 29
1.10 地址空间 30
1.11 数学模型到物理世界 31
第2章 认识Linux 34
2.1 什么是操作系统 34
2.2 文件系统 35
2.3 终端 37
2.4 shell 39
2.5 Linux常用命令 40
2.6 ANSI转义序列 43
2.7 编辑器 45
2.8 准备“物理”计算机 47
第3章 机器语言程序设计 49
3.1 程序及指令 49
3.2 补码 50
3.3 ASCII码 52
3.4 串口 53
3.5 “向串口写字符A”的
程序流程 55
3.6 写外设指令 55
3.7 准备源操作数 57
3.8 准备目的操作数 58
3.9 跳转指令 59
3.10 创建程序文件 60
3.11 程序执行过程 61
3.12 使用kvmtool运行程序 69
第4章 汇编语言程序设计 71
4.1 初识汇编语言 71
4.2 段及段寄存器 72
4.3 指令指针寄存器 74
4.4 通用寄存器 75
4.5 标志寄存器 76
4.6 汇编指令格式 78
4.7 第一个汇编程序 78
4.7.1 汇编和链接 79
4.7.2 运行 80
4.7.3 显式设置操作数的
段寄存器 83
4.7.4 伪指令.code16 85
4.8 构建工具Make 85
4.9 操作数寻址 86
4.9.1 立即数寻址 87
4.9.2 直接寻址 88
4.9.3 ModR/M寻址 89
4.9.4 SIB寻址 94
4.9.5 SIB disp寻址 98
4.10 程序运行流程控制 101
4.10.1 选择 101
4.10.2 循环 102
4.11 栈 103
4.12 函数及x86调用约定 107
4.12.1 call和ret指令 108
4.12.2 栈帧 110
4.12.3 多模块及符号可见性 113
4.12.4 参数传递 114
4.12.5 局部变量 116
4.12.6 返回值及参数清理 118
4.12.7 寄存器保存和恢复 119
4.13 链接 122
4.13.1 目标文件合并 123
4.13.2 符号解析 125
4.13.3 符号的可见性 128
第5章 C语言程序设计 129
5.1 基本语法 130
5.1.1 词法元素 130
5.1.2 表达式 131
5.1.3 声明 132
5.1.4 语句 133
5.1.5 标识符 135
5.1.6 对象的存储类别 138
5.1.7 头文件 138
5.1.8 预处理指令 139
5.2 C语言入口 141
5.3 第一个C程序 142
5.4 从C语言到机器语言 143
5.5 变量 145
5.5.1 变量类型 146
5.5.2 局部变量 147
5.5.3 全局变量 150
5.5.4 全局变量的链接性 151
5.5.5 静态局部变量 152
5.5.6 变量类型转换 154
5.5.7 溢出 155
5.6 运算 157
5.6.1 算术运算 157
5.6.2 递增和递减 158
5.6.3 关系运算 159
5.6.4 逻辑运算 161
5.6.5 位运算 163
5.6.6 赋值运算 164
5.6.7 运算的优先级和结合性 165
5.7 程序运行流程控制 166
5.7.1 选择 166
5.7.2 循环 168
5.8 数组 172
5.9 结构体 175
5.9.1 基本语法 175
5.9.2 内存布局 176
5.9.3 位域 179
5.10 指针 180
5.10.1 基本语法 181
5.10.2 指向结构体的指针 183
5.10.3 指针的 /-运算 185
5.10.4 双指针 186
5.10.5 void指针 188
5.10.6 空指针 189
5.11 函数 189
5.11.1 基本语法 189
5.11.2 参数的值传递和
指针传递 191
5.11.3 const参数 195
5.11.4 函数指针 195
5.12 内联汇编 197
第6章 32位引导过程 200
6.1 实模式 200
6.2 保护模式 201
6.3 内核映像组成及布局 203
6.3.1 实模式地址空间 203
6.3.2 内核映像的布局 205
6.3.3 内核映像文件组织 206
6.4 创建保护模式的段描述符 207
6.4.1 段描述符格式 207
6.4.2 保护模式的内核代码段
描述符 208
6.4.3 保护模式的内核数据段
描述符 210
6.4.4 创建保护模式的段
描述符表 210
6.5 告知处理器段描述符表地址 211
6.6 开启处理器保护模式 212
6.7 跳转到内核保护模式部分 213
6.7.1 准备保护模式部分 213
6.7.2 跳转到保护模式部分 214
6.8 编译及创建内核映像文件 215
6.8.1 编译内核 215
6.8.2