学习资料:

教学视频
网易云课堂
哔哩哔哩

原书网站
原书相关源码附件下载

网友帖子
除了后面没有图片之外很不错的笔记总结,写者很用心
留存待看,一片文章写了特点
很有特色总结的笔记


学习目标:

15天看完全书-未实际完成


学习内容:

第1部分 预备知识
第1章 十六进制计数法 3
1.1 二进制计数法回顾 3
1.1.1 关于二进制计数法 3
1.1.2 二进制到十进制的转换 4
1.1.3 十进制到二进制的转换 4
1.2 十六进制计数法 5
1.2.1 十六进制计数法的原理 5
1.2.2 十六进制到十进制的转换 6
1.2.3 十进制到十六进制的转换 6
1.2.4 为什么需要十六进制 6
1.3 使用Windows计算器方便你的学习过程 8
本章习题 9
第2章 处理器、内存和指令 10
2.1 最早的处理器 10
2.2 寄存器和算术逻辑部件 10
2.3 内存储器 12
2.4 指令和指令集 14
2.5 古老的Intel 8086处理器 16
2.5.1 8086的通用寄存器 16
2.5.2 程序的重定位难题 16
2.5.3 内存分段机制 19
2.5.4 8086的内存分段机制 21
本章习题 24
第3章 汇编语言和汇编软件 25
3.1 汇编语言简介 25
3.2 NASM编译器 27
3.2.1 NASM的下载和安装 27

3.2.2 代码的书写和编译过程 27
3.2.3 用HexView观察编译后的机器代码 30
本章习题 31
第4章 虚拟机的安装和使用 32
4.1 计算机的启动过程 32
4.1.1 如何将编译好的程序提交给处理器 32
4.1.2 计算机的加电和复位 33
4.1.3 基本输入输出系统 33
4.1.4 硬盘及其工作原理 34
4.1.5 一切从主引导扇区开始 36
4.2 创建和使用虚拟机 37
4.2.1 别害怕,虚拟机是软件 37
4.2.2 下载和安装Oracle VM VirtualBox 37
4.2.3 虚拟硬盘简介 39
4.2.4 练习使用FixVhdWr工具向虚拟硬盘写数据 40
第2部分 实模式
第5章 编写主引导扇区代码 45
5.1 本章代码清单 45
5.2 欢迎来到主引导扇区 45
5.3 注释 46
5.4 在屏幕上显示文字 46
5.4.1 显卡和显存 46
5.4.2 初始化段寄存器 49
5.4.3 显存的访问和ASCII代码 49
5.4.4 显示字符 51
5.4.5 MOV指令的格式 52
5.5 显示标号的汇编地址 54
5.5.1 标号 54
5.5.2 如何显示十进制数字 58
5.5.3 在程序中声明并初始化数据 58
5.5.4 分解数的各个数位 59
5.5.5 显示分解出来的各个数位 63
5.6 使程序进入无限循环状态 64
5.7 完成并编译主引导扇区代码 66
5.7.1 主引导扇区有效标志 66
5.7.2 代码的保存和编译 67
5.8 加载和运行主引导扇区代码 67
5.8.1 把编译后的指令写入主引导扇区 67
5.8.2 启动虚拟机观察运行结果 68
5.9 程序的调试技术 68
5.9.1 开源的Bochs虚拟机软件 68
5.9.2 Bochs下的程序调试入门 69
本章习题 75
第6章 相同的功能,不同的代码 76
6.1 代码清单6-1 76
6.2 跳过非指令的数据区 76
6.3 在数据声明中使用字面值 77
6.4 段地址的初始化 77
6.5 段之间的批量数据传送 78
6.6 使用循环分解数位 80
6.7 计算机中的负数 81
6.7.1 无符号数和有符号数 81
6.7.2 处理器视角中的数据类型 85
6.8 数位的显示 87
6.9 其他标志位和条件转移指令 88
6.9.1 奇偶标志位PF 88
6.9.2 进位标志CF 89
6.9.3 溢出标志OF 89
6.9.4 现有指令对标志位的影响 90
6.9.5 条件转移指令 90
6.10 NASM编译器的和和和$标记 92
6.11 观察运行结果 93
6.12 本章程序的调试 93
6.12.1 调试命令“n”的使用 93
6.12.2 调试命令“u”的使用 94
6.12.3 用调试命令“info”察看标志位 96
本章习题 97
第7章 比高斯更快的计算 98
7.1 从1加到100的故事 98
7.2 代码清单7-1 98
7.3 显示字符串 98
7.4 计算1到100的累加和 99
7.5 累加和各个数位的分解与显示 99
7.5.1 栈和栈段的初始化 99
7.5.2 分解各个数位并压栈 101
7.5.3 出栈并显示各个数位 103
7.5.4 进一步认识栈 104
7.6 程序的编译和运行 105
7.6.1 观察程序的运行结果 105
7.6.2 在调试过程中察看栈中内容 106
7.7 8086处理器的寻址方式 107
7.7.1 寄存器寻址 107
7.7.2 立即寻址 107
7.7.3 内存寻址 108
本章习题 112
第8章 硬盘和显卡的访问与控制 113
8.1 本章代码清单 114
8.2 用户程序的结构 114
8.2.1 分段、段的汇编地址和段内汇编地址 114
8.2.2 用户程序头部 117
8.3 加载程序(器)的工作流程 120
8.3.1 初始化和决定加载位置 120
8.3.2 准备加载用户程序 121
8.3.3 外围设备及其接口 122
8.3.4 I/O端口和端口访问 123
8.3.5 通过硬盘控制器端口读扇区数据 125
8.3.6 过程调用 127
8.3.7 加载用户程序 133
8.3.8 用户程序重定位 134
8.3.9 将控制权交给用户程序 137
8.3.10 8086处理器的无条件转移指令 138
8.4 用户程序的工作流程 140
8.4.1 初始化段寄存器和栈切换 140
8.4.2 调用字符串显示例程 141
8.4.3 过程的嵌套 142
8.4.4 屏幕光标控制 142
8.4.5 取当前光标位置 143
8.4.6 处理回车和换行字符 144
8.4.7 显示可打印字符 145
8.4.8 滚动屏幕内容 145
8.4.9 重置光标 146
8.4.10 切换到另一个代码段中执行 146
8.4.11 访问另一个数据段 147
8.5 编译和运行程序并观察结果 147
本章习题 148
第9章 中断和动态时钟显示 149
9.1 外部硬件中断 149
9.1.1 非屏蔽中断 150
9.1.2 可屏蔽中断 150
9.1.3 实模式下的中断向量表 152
9.1.4 实时时钟、CMOS RAM和BCD编码 154
9.1.5 代码清单9-1 157
9.1.6 初始化8259、RTC和中断向量表 157
9.1.7 使处理器进入低功耗状态 159
9.1.8 实时时钟中断的处理过程 160
9.1.9 代码清单9-1的编译和运行 162
9.2 内部中断 163
9.3 软中断 163
9.3.1 BIOS中断 163
9.3.2 代码清单9-2 165
9.3.3 从键盘读字符并显示 165
9.3.4 代码清单9-2的编译和运行 165
本章习题 166
第3部分 32位保护模式
第10章 32位x86处理器编程架构 169
10.1 IA-32架构的基本执行环境 169
10.1.1 寄存器的扩展 169
10.1.2 基本的工作模式 172
10.1.3 线性地址 173
10.2 现代处理器的结构和特点 174
10.2.1 流水线 174
10.2.2 高速缓存 175
10.2.3 乱序执行 175
10.2.4 寄存器重命名 176
10.2.5 分支目标预测 177
10.3 32位模式的指令系统 178
10.3.1 32位处理器的寻址方式 178
10.3.2 操作数大小的指令前缀 179
10.3.3 一般指令的扩展 181
本章习题 184
第11章 进入保护模式 185
11.1 代码清单11-1 185
11.2 全局描述符表 186
11.3 存储器的段描述符 187
11.4 安装存储器的段描述符并加载GDTR 191
11.5 关于第21条地址线A20的问题 193
11.6 保护模式下的内存访问 195
11.7 清空流水线并串行化处理器 199
11.8 保护模式下的栈 200
11.8.1 关于栈段描述符中的界限值 200
11.8.2 检验32位下的栈操作 201
11.9 程序的运行和调试 202
11.9.1 运行程序并观察结果 202
11.9.2 处理器刚加电时的段寄存器状态 203
11.9.3 设置PE位后的段寄存器状态 205
11.9.4 JMP指令执行后的段寄存器状态 205
11.9.5 察看全局描述符表GDT 206
11.9.6 察看控制寄存器的内容 207
本章习题 207
第12章 存储器的保护 208
12.1 代码清单12-1 208
12.2 进入32位保护模式 208
12.2.1 话说mov ds,ax和mov ds,eax 208
12.2.2 创建GDT并安装段描述符 209
12.3 修改段寄存器时的保护 211
12.4 地址变换时的保护 213
12.4.1 代码段执行时的保护 213
12.4.2 栈操作时的保护 214
12.4.3 数据访问时的保护 216
12.5 使用别名访问代码段对字符排序 217
12.6 程序的编译和运行 219
本章习题 220
第13章 程序的动态加载和执行 221
13.1 本章代码清单 222
13.2 内核的结构、功能和加载 222
13.2.1 内核的结构 222
13.2.2 内核的加载 223
13.2.3 安装内核的段描述符 225
13.3 在内核中执行 229
13.4 用户程序的加载和重定位 230
13.4.1 用户程序的结构 230
13.4.2 计算用户程序占用的扇区数 232
13.4.3 简单的动态内存分配 233
13.4.4 段的重定位和描述符的创建 234
13.4.5 重定位用户程序内的符号地址 238
13.5 执行用户程序 242
13.6 代码的编译、运行和调试 243
本章习题 244
第14章 任务和特权级保护 245
14.1 任务的隔离和特权级保护 246
14.1.1 任务、任务的LDT和TSS 246
14.1.2 全局空间和局部空间 248
14.1.3 特权级保护概述 250
14.2 代码清单14-1 257
14.3 内核程序的初始化 257
14.3.1 调用门 258
14.3.2 调用门的安装和测试 261
14.4 加载用户程序并创建任务 264
14.4.1 任务控制块和TCB链 264
14.4.2 使用栈传递过程参数 266
14.4.3 加载用户程序 268
14.4.4 创建局部描述符表 269
14.4.5 重定位U-SALT表 270
14.4.6 创建0、1和2特权级的栈 271
14.4.7 安装LDT描述符到GDT中 271
14.4.8 任务状态段TSS的格式 272
14.4.9 创建任务状态段TSS 276
14.4.10 安装TSS描述符到GDT中 276
14.4.11 带参数的过程返回指令 277
14.5 用户程序的执行 278
14.5.1 通过调用门转移控制的完整过程 278
14.5.2 进入3特权级的用户程序的执行 281
14.5.3 检查调用者的请求特权级RPL 284
14.5.4 在Bochs中调试程序的新方法 286
本章习题 286
第15章 任务切换 287
15.1 本章代码清单 287
15.2 任务切换前的设置 287
15.3 任务切换的方法 289
15.4 用call/jmp/iret指令发起任务切换的实例 292
15.5 处理器在实施任务切换时的操作 296
15.6 程序的编译和运行 298
本章习题 299
第16章 分页机制和动态页面分配 300
16.1 分页机制概述 301
16.1.1 简单的分页模型 301
16.1.2 页目录、页表和页 305
16.1.3 地址变换的具体过程 307
16.2 本章代码清单 308
16.3 使内核在分页机制下工作 309
16.3.1 创建内核的页目录表和页表 309
16.3.2 任务全局空间和局部空间的页面映射 314
16.4 创建内核任务 319
16.4.1 内核的虚拟内存分配 319
16.4.2 页面位映射串和空闲页的查找 320
16.4.3 创建页表并登记分配的页 323
16.4.4 创建内核任务的TSS 324
16.5 用户任务的创建和切换 325
16.5.1 多段模型和段页式内存管理 325
16.5.2 平坦模型和用户程序的结构 327
16.5.3 用户任务的虚拟地址空间分配 328
16.5.4 用户程序的加载 329
16.5.5 段描述符的创建(平坦模型) 332
16.5.6 重定位U-SALT并复制页目录表 333
16.5.7 切换到用户任务执行 334
16.6 程序的编译、执行和调试 336
16.6.1 本章程序的编译和运行方法 336
16.6.2 察看CR3寄存器的内容 337
16.6.3 察看线性地址对应的物理页信息 337
16.6.4 察看当前任务的页表信息 338
16.6.5 使用线性(虚拟)地址调试程序 339
本章习题 339
第17章 中断和异常的处理与抢占式多任务 340
17.1 中断和异常 340
17.1.1 中断和异常概述 340
17.1.2 中断描述符表、中断门和陷阱门 343
17.1.3 中断和异常处理程序的保护 345
17.1.4 中断任务 347
17.1.5 错误代码 348
17.2 本章代码清单 349
17.3 内核的加载和初始化 349
17.3.1 彻底终结多段模型 349
17.3.2 创建中断描述符表 352
17.3.3 用定时中断实施任务切换 354
17.3.4 8259A芯片的初始化 359
17.3.5 平坦模型下的字符串显示例程 362
17.4 内核任务的创建 362
17.4.1 创建内核任务的TCB 362
17.4.2 宏汇编技术 364
17.5 用户任务的创建 366
17.5.1 准备加载用户程序 366
17.5.2 转换后援缓冲器的刷新 367
17.5.3 用户任务的创建和初始化 368
17.6 程序的编译和执行 370
本章习题 371
附录Ⅰ 本书用到的x86指令及其页码 372
附录Ⅱ 本书用到的重要图表及其页码 374


学习时间:

1、2020年9月15日 15:00-2020年9月16日0:30
2、2020年9月16日 14:00-2020年9月17日1:00
3、2020年9月17日 15:00-2020年9月18日2:20
4、2020年9月18日 15:00-2020年9月19日1:10
5、2020年9月19日 14:00-2020年9月20日1:00
6、2020年9月20日 14:00-2020年9月21日1:00
7、2020年9月21日 14:00-2020年9月22日3:00
8、2020年9月22日 16:30-2020年9月23日2:00
9、2020年9月23日 15:30-2020年9月24日0:50
10、休息一天,找些工具。
11、2020年9月25日 19:20-2020年9月25日23:30
12、2020年9月26日 15:20-2020年9月27日00:30
13、2020年9月27日 15:00-2020年9月28日01:10
14、2020年9月28日 22:00-2020年9月28日23:10
15、2020年9月29日 14:00-2020年9月29日21:10


学习产出:

第01天
第02天
第03天
第04天
第05天
第06天
第07天
第08天
第09天
第10天
第11天
第12天
第13天
第14天
第15天

第八章笔记
第九章笔记
第八章复习


学习总结:



用一句话,脑子太笨,人太懒,信心不够,没耐心。只学会了个10%左右。
每天都浪费了很多时间与精力,抽几天时间反思一下问题,整理下体系。
十月再战!!!!!复习!!!!!我要学会!!!!!!!!!!!!


李忠 X86汇编语言 从实模式到保护模式-初学相关推荐

  1. 《x86汇编语言:从实模式到保护模式》视频来了

    <x86汇编语言:从实模式到保护模式>视频来了 很多朋友留言,说我的专栏<x86汇编语言:从实模式到保护模式>写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节. ...

  2. 《X86汇编语言:从实模式到保护模式》读书笔记之引言

    有幸结识了<X86汇编语言:从实模式到保护模式>一书.我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅.读罢一遍,意犹未尽.于是打算再读一遍,并把自己的读书所学总结成笔记,一来给 ...

  3. x86汇编语言从实模式百度云_x86汇编语言:从实模式到保护模式

    x86汇编语言:从实模式到保护模式2013年1月由电子工业出版社出版发行,总共6000行的源代码,全方位地向读者展现汇编语言程序设计之美.尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们 ...

  4. x86汇编语言从实模式百度云_Intel x86 CPU 32位保护模式杂谈之任务切换 上

    目录: 什么是任务 任务由什么组成 任务门描述符是什么东东?有了TSS描述符为什么要有任务门描述符? 参考文献 什么是任务 任务(task)是处理器可以分配.执行.挂起的工作单位,笔者认为和我们操作系 ...

  5. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01

    本文是<x86汇编语言:从实模式到保护模式>(电子工业出版社)的读书实验笔记. 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果. 需要的源码文件 第一个文件是加载程 ...

  6. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  7. 《x86汇编语言:从实模式到保护模式》读书笔记之后记

    本来打算把整本书的读书笔记写完,可是由于有其他的计划(就叫做"B计划"吧)且优先级更高,所以我的读书笔记搁浅了.为了全力以赴执行B计划,我的博客要荒芜一段时间(我希望不要永远荒芜下 ...

  8. 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39

    处理器在实施任务切换时的操作--<x86汇编语言:从实模式到保护模式>读书笔记39 处理器可以通过以下四种方法实施任务切换: 1. call指令或者jmp指令的操作数是GDT内的某个TSS ...

  9. 任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38

    任务切换--<x86汇编语言:从实模式到保护模式>读书笔记38 本文及后面的几篇博文是原书第15章的学习笔记. 本章依然使用第13章的主引导程序. 1. 协同式多任务与抢占式多任务 有两种 ...

最新文章

  1. proxy实现 mysql 读写分离
  2. 粘贴铜箔简易实验电路制作
  3. 微信小程序接入,https服务器搭建和调试
  4. 【总结】百家稷学!重点汇总有三AI(教育)服务过的那些企业与学校
  5. python计算两个数乘积_如何用PYTHON使两个数字总和变成乘积
  6. java 中random类使用_Java中的天使和魔鬼:Unsafe类
  7. SpringBoot项目启动时提示程序包不存在和找不到符号
  8. 玩转带外触发的单目相机之一
  9. ResNet Keras实现
  10. MySQL裸机性能测试(2021)
  11. SpringBoot 接口快速开发神器(接口可视化界面实现)
  12. 如何将知识图谱引入推荐系统?
  13. php上传文件插件怎么用,使用jquery-fileupload上传插件
  14. Netty游戏服务器二
  15. 手把手从零开始学习树莓派教程
  16. IMU惯性测量单元是什么?
  17. java反射获取一个对象中属性(field)的值
  18. 使用电脑热点和Fiddler对Android app进行抓包
  19. AllenNLP—笔记—json
  20. 杂项-DB:DW/DWH(数据仓库)

热门文章

  1. 股东大会上巴菲特亲传选股10招
  2. adxl345取出值怎么算角度_adxl345怎样通过想,x,y,z的输出计算出角度值
  3. 【图像分割】基于 K-means 聚类算法实现图像区域分割matlab代码
  4. 大学生为长经验“白打工”,值vs不值!
  5. shell脚本--常用知识
  6. 语义分割数据增强python代码
  7. 泰坦尼克号生存预测python_泰坦尼克号生存预测(python)
  8. 亚马逊跟卖系统,四种采集类型+跟卖选品小技巧
  9. IPv4路由exception缓存
  10. CentOS 7 Docker 安装软件