《x86汇编语言:从实模式到保护模式》读书笔记
文章平均质量分 61
《x86汇编语言:从实模式到保护模式》这本书令我受益匪浅。我利用工作之余,把对这本书的理解总结成读书笔记,可以看成是对书上内容的总结与延伸。
车子 chezi
乐于开源,善于分享。死磕自己,方便大家。广泛查阅,独立思考。持续琢磨,自成一家。
展开
-
x86分页机制详解
文章目录1. 为什么会有分页机制?2. 从虚拟地址到物理地址3. 简单的分页模型4. 页表和页目录4.1 层次化的分页结构4.2 页表4.3 页目录5. 地址变换的具体过程1. 为什么会有分页机制?有些资料说是为了实现“虚拟内存”,真的是这样吗?如果没有分页机制,能否实现“虚拟内存”?答案是肯定的。当同时运行的任务很多时,内存可能就不够用。如图所示,每个段描述符都有 AVL 位(简称 A 位),用于表示一个段最近是否被访问过(准确地说是表明从上次操作系统清零该位后一个段是否被访问过)。当创建描述原创 2020-07-13 23:10:18 · 1925 阅读 · 2 评论 -
简单的分页模型
分页机制是 80x86 内存管理机制的第二部分。它在分段机制的基础上完成虚拟(逻辑)地址到物理地址的转换。为了理解分页机制,本文介绍一个简单的分页模型,虽然简单,但是对理解真正的分页模型非常有帮助。咱们开始吧!在单纯的分段模式下,线性地址就是物理地址。比如下面的汇编语句:mov edx [0x1008]这是要把内存中某个位置的值赋给 EDX,但究竟是内存的哪个位置呢?这就要看数据段描述符了。假设描述符中的段基地址为 0x0020_0000,界限值为 0x2007,段的粒度是字节 ,那么该段的最大原创 2020-07-10 22:51:12 · 776 阅读 · 0 评论 -
硬盘的工作原理
文章目录物理结构容量计算磁盘读写的三个步骤磁盘读写响应时间物理结构一块磁盘有若干盘片,每个盘片有上下两个面,每个盘面都对应地有一个读写磁头,所以经常用磁头来指代盘面。磁头都有编号,第一个盘片,上面的磁头编号是 0,下面的磁头编号是 1;第二个盘片,上面的磁头编号是 2,下面的磁头编号为 3,…下图显示的是一个盘面,盘面中一圈圈的灰色同心圆为一条条磁道。磁道也要编号,从盘面最外面的那条磁道开始,向着圆心的方向,从 0 开始编号。所有盘面具有相同编号的磁道形成一个圆柱,称之柱面。柱面是一个用来优化原创 2020-06-21 20:36:11 · 544 阅读 · 1 评论 -
《x86汇编语言:从实模式到保护模式》视频来了
《x86汇编语言:从实模式到保护模式》视频来了很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。毕竟我不是作者,只有作者的解读才是最权威的。当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。如果你正在学这本书或者汇编语言,那你有福气了。本书作者李忠老师,以此书为蓝本,录制了全套视频。试看点这里如...原创 2020-04-06 11:06:57 · 5026 阅读 · 6 评论 -
Ubuntu环境下安装Bochs
Ubuntu环境下安装Bochs原创 2015-10-20 22:34:04 · 7971 阅读 · 1 评论 -
NASM在Ubuntu上的安装与简单使用
一 、安装NASM 1. 下载安装文件 地址是:http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/解压(具体命令要根据压缩包的类型来选用)进入解压目录 进入刚解压的目录 ./configure make sudo make install二、简单使用NASM准备好源文件 假设命名为 c07_mbr.asm(这是《x86汇编语原创 2015-10-24 18:22:14 · 6396 阅读 · 1 评论 -
《x86汇编语言:从实模式到保护模式》读书笔记之后记
本来打算把整本书的读书笔记写完,可是由于有其他的计划(就叫做“B计划”吧)且优先级更高,所以我的读书笔记搁浅了。为了全力以赴执行B计划,我的博客要荒芜一段时间(我希望不要永远荒芜下去)。关于《x86汇编语言:从实模式到保护模式》读书笔记系列文章,除了引言和后记,一共44篇文章。希望这些文章能给读者带来哪怕是些微的收获。因为是初学,对知识的理解肯定有不对的地方,如果读者发现问题,欢迎留言斧正。维护一个原创 2016-12-24 11:59:41 · 2455 阅读 · 5 评论 -
开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44
开启分页机制必须说明的是,必须在保护模式下才能启动分页功能。本章的引导程序依然用第13章的。开启分页机制之前,必须创建页目录和页表。原创 2016-08-13 11:25:20 · 2937 阅读 · 3 评论 -
页目录项和页表项——《x86汇编语言:从实模式到保护模式》读书笔记43
上图就是页目录项和页表项的格式。原创 2016-08-09 21:05:01 · 5423 阅读 · 0 评论 -
x86分页机制——《x86汇编语言:从实模式到保护模式》读书笔记42
1. 为什么会有分页机制?2.从虚拟地址到物理地址3.简单的分页模型4.页表和页目录5.地址变换的具体过程原创 2016-07-30 13:01:16 · 3044 阅读 · 3 评论 -
第15章习题解答(二)——《x86汇编语言:从实模式到保护模式》读书笔记41
第二题题目: 修改本章的源程序,使之能够顺序完成以下工作: (1)从程序管理器任务切换到任务A,显示一条消息; (2)再从任务A转换到任务B,显示一条消息; (3)从B直接返回到程序管理任务。原创 2016-07-17 11:36:51 · 1632 阅读 · 2 评论 -
第15章习题解答(一)——《x86汇编语言:从实模式到保护模式》读书笔记40
1. 第15章代码修改2.习题一解答原创 2016-07-17 09:57:17 · 4373 阅读 · 6 评论 -
处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39处理器可以通过以下四种方法实施任务切换: 1. call指令或者jmp指令的操作数是GDT内的某个TSS描述符的选择子; 2. call指令或者jmp指令的操作数是GDT或者LDT内某个任务门的选择子; 3. 一个异常或者中断发生时,中断号指向IDT内的某个任务门; 4. 在EFLAGS寄存器的NT位置原创 2016-07-09 10:27:58 · 1439 阅读 · 3 评论 -
任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38
第15章代码讲解。原创 2016-06-29 23:24:02 · 2070 阅读 · 2 评论 -
任务切换的方法——《x86汇编语言:从实模式到保护模式》读书笔记37
处理器可以通过以下四种方法实施任务切换:1. call指令或者jmp指令的操作数是GDT内的某个TSS描述符;2. call指令或者jmp指令的操作数是GDT或者LDT内某个任务门描述符;3. 一个异常或者中断发生时,中断号指向IDT内的某个任务门;4. 在EFLAGS寄存器的NT位置位的情况下,当前任务执行了一个iret指令。原创 2016-06-23 20:44:30 · 3567 阅读 · 0 评论 -
任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36
任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36修改后的代码,有需要的朋友可以去下载(c14_new文件夹)。下载地址是: GitHub: https://github.com/LeslieChe/from-real-mode-to-protected-mode1. 第14章的习题2及解答2. 用栈传递参数......原创 2016-06-04 19:15:19 · 1468 阅读 · 0 评论 -
任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35原创 2016-05-25 23:26:42 · 2464 阅读 · 0 评论 -
任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34
任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34原创 2016-05-24 23:31:49 · 2356 阅读 · 0 评论 -
TSS详解 ——《x86汇编语言:从实模式到保护模式》读书笔记33
TSS(Task State Segment,任务状态段)详解原创 2016-05-23 22:00:30 · 5995 阅读 · 0 评论 -
任务和特权级保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记32
之前做了那么多铺垫,我们终于可以看看第14章的代码了。 对于引导代码和用户程序,依然采用第13章的;对于内核程序(c14_core.asm),编译的时候有几行报错了,只要加上dword即可解决。原创 2016-05-21 20:52:08 · 5014 阅读 · 3 评论 -
RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
关于RPL(请求特权级),网上的资料不少,不过我认为都没有说明白。希望我可以把这个问题讲清楚,如有纰缪,还请您不吝赐教。原创 2016-05-12 00:20:15 · 2406 阅读 · 1 评论 -
访问数据段时的特权级检查,修改SS时的特权级检查——《x86汇编语言:从实模式到保护模式》读书笔记30
1. 访问数据段时的特权级检查为了访问数据段,数据段的选择子必须被加载进段寄存器(ES,ES,FS,GS,SS)。在把一个段选择子加载进段寄存器之前,处理器会进行特权级检查(如下图所示)。在数值上必须满足以下两点: 1. CPL<=数据段描述符的DPL 2. RPL<=数据段描述符的DPL 否则,会产生一个一般保护异常。原创 2016-05-11 22:40:58 · 1210 阅读 · 0 评论 -
通过调用门进行控制转移 ——《x86汇编语言:从实模式到保护模式》读书笔记29
通过调用门进行控制转移1.关于堆栈切换2.通过调用门进行控制转移和返回的具体过程原创 2016-05-10 22:30:14 · 2847 阅读 · 1 评论 -
代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
代码段间转移控制时的特权级检查(JMP或者CALL指令)在保护模式下,JMP或CALL指令可以用以下四种方法之一来引用另外一个代码段: 1. 目标操作数含有目标代码段的段选择子和偏移 2. 目标操作数指向一个调用门描述符 3. 目标操作数指向一个TSS 4. 目标操作数指向一个任务门后两种涉及任务的切换。本文仅对前两种进行讨论。原创 2016-05-07 10:21:27 · 2528 阅读 · 0 评论 -
任务和特权级保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记27
本文及后面的几篇文章是原书第14章的读书笔记。1. LDT2. TSS3. DPL4. CPL5. RPL6. I/O特权级原创 2016-05-02 11:47:38 · 4796 阅读 · 2 评论 -
程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26
【通过本文能学到什么?】1.NASM的条件汇编2.用NASM编译的时候,通过命令行选项定义宏 3.Makefile的条件语句4.在make命令行中覆盖Makefile中的变量值5.第13章习题解答6.复习如何构造栈段描述符原创 2016-04-16 12:59:27 · 4030 阅读 · 3 评论 -
程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25内容提要:1. 为13章的配书源码写Makefile2. 在源码的基础上修修补补 2.1 让字符带有颜色 2.2 对过程put_hex_dword的修改 2.3 修复符号表重定位的小BUG原创 2016-04-13 22:53:29 · 4954 阅读 · 2 评论 -
程序的加载和执行(四)——《x86汇编语言:从实模式到保护模式》读书笔记24
程序的加载和执行(四)——《x86汇编语言:从实模式到保护模式》读书笔记24通过本文能学到什么?1. 怎样跳转到用户程序 2. 用户程序通过调用内核过程完成自己的功能 3. 怎样从用户程序返回到内核原创 2016-03-27 11:05:41 · 1546 阅读 · 0 评论 -
程序的加载和执行(三)——《x86汇编语言:从实模式到保护模式》读书笔记23
程序的加载和执行(三)——读书笔记23接着上次的内容说,关于过程load_relocate_program的讲解还没有完,还差创建栈段描述符和重定位符号表。内容提要:1. 创建用户栈段描述符2. 符号表的重定位原创 2016-03-26 18:28:28 · 2443 阅读 · 4 评论 -
程序的加载和执行(二)——《x86汇编语言:从实模式到保护模式》读书笔记22
本博文对应原书13.3-13.4节的内容。内容提要:1. 显示处理器的品牌信息2. 用户程序的头部结构3. 加载用户程序到内存4. 根据头部信息为用户建立各种段描述符原创 2016-03-22 22:42:22 · 2152 阅读 · 0 评论 -
程序的加载和执行(一)——《x86汇编语言:从实模式到保护模式》读书笔记21
程序的加载和执行(一)本文及之后的几篇博文是原书第13章的学习笔记。 本章主要是学习一个例子,对应的代码分为3个文件: ;代码清单13-1 ;文件名:c13_mbr.asm ;文件说明:硬盘主引导扇区代码 ;代码清单13-2 ;文件名:c13_core.asm ;文件说明:保护模式微型核心程序 ;代码清单13-3 ;文件名:c13.asm ;文件说明:用户程序因为代码比较长,完整的原创 2016-03-20 19:35:11 · 2868 阅读 · 1 评论 -
存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
存储器的保护(三) 修改本章代码清单,使之可以检测1MB以上的内存空间(从地址0x0010_0000开始,不考虑高速缓存的影响)。要求:对内存的读写按双字的长度进行,并在检测的同时显示已检测的内存数量。建议对每个双字单元用两个花码0x55AA55AA和0xAA55AA55进行检测。上面的文字选自原书第12章的习题1. 这篇博文就讨论一下这道题。由于是初学,我不对自己做太高的要求,只要实现功能原创 2016-03-13 17:27:39 · 2382 阅读 · 4 评论 -
存储器的保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记19
接着上一篇博文说。 5.代码段执行时的保护 每个代码段都有自己的段界限。同栈段一个道理,有效界限和G位相关。 G=0:有效界限 = 描述符中的段界限 G=1:有效界限 = 描述符中的段界限值 * 0x1000 + 0xFFF 当处理器取指令的时候,偏移地址由EIP提供,EIP的范围应该在 [0,有效界限] 之间(为了说明问题,我就用数学上的闭区间表示了)。否则会引发异常。 对于本原创 2016-02-25 21:03:00 · 1447 阅读 · 0 评论 -
存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
本文是原书第12章的学习笔记。 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志。司马迁曰:“文王拘而演《周易》;仲尼厄而作《春秋》;屈原放逐,乃赋《离骚》;左丘失明,厥有《国语》;孙子膑脚,《兵法》修列;不韦迁蜀,世传《吕览》……”好了,不煽情了,进入正题。 第12章的代码如下。 1 ;代码清单12-原创 2016-02-28 13:52:06 · 2053 阅读 · 4 评论 -
进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
(十)保护模式下的栈 76 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 77 mov cx,00000000000_11_000B ;加载堆栈段选择子78 mov ss,cx79 mov esp,0x7c00第77~79行用来初始保护模式下的栈。栈段描述符是GDT中第3个(从原创 2016-01-28 20:52:50 · 1654 阅读 · 0 评论 -
16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一、Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式。 (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 (3)虚拟8086模式:这种方式可以使用户在保护模式下运行8086程序(比如cmd打开的console窗口,就是工作在虚拟8086模式) 有几点需要特别说明: (1)保护模式可分为16原创 2016-01-28 19:44:19 · 7380 阅读 · 4 评论 -
关于80286——《x86汇编语言:从实模式到保护模式》读书笔记15
一、80286的工作模式 80286首次提出了实模式和保护模式的概念。 实模式:和8086的工作方式相同; 保护模式:提供了存储器管理机制和保护机制,支持多任务。 二、80286的寄存器 (一)通用寄存器 80286的通用寄存器和8086一样,有AX,BX,CX,DX,BP,SP,SI,DI; (二)IP 80286的指令指针寄存器也和8086一样,没有什么特别的。 (三)原创 2016-01-24 20:57:45 · 2316 阅读 · 0 评论 -
进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14
首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便。所以从现在起,我要给代码加上行号。我写博客用的这个插入代码的插件,确实不支持自动插入行号。我真的没有找到什么好方法,无奈之下,只能按照网友的说法,在VIM中给每行代码加上行号,然后再贴出来。 在VIM中每一行都添加上行号的方法是: :%s/^/\=line(".")/ 对,只要执行这个命令就可以了。 我们接着上篇博文原创 2016-01-16 20:45:01 · 2460 阅读 · 0 评论 -
8086处理器的无条件转移指令——《x86汇编语言:从实模式到保护模式》读书笔记13
本博文是对原书8.3.10的内容的总结。 一、相对短转移 指令格式是: jmp short 标号标号也可以替换成具体的数值(标号和数值是等价的),例如 jmp short 0x2000说明:(1)该指令属于段内转移指令,而且只允许转移到距离当前指令-128~127字节的地方。(2)指令的功能是:(IP) = (IP)+8位位原创 2016-01-16 18:36:56 · 2383 阅读 · 0 评论 -
进入保护模式(一)——《x86汇编语言:从实模式到保护模式》读书笔记12
之前已经做了一些理论上的铺垫,这次我们就可以看代码了。 一、代码清单 ;代码清单11-1 ;文件名:c11_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54 ;设置堆栈段和栈指针 mov ax,cs mov原创 2016-01-13 22:39:55 · 5375 阅读 · 5 评论