上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码。 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): ...
上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码。 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): ...
本博文是对原书8.3.10的内容的总结。 一、相对短转移 指令格式是: jmp short 标号 ...(1)该指令属于段内转移指令,而且只允许转移到距离当前指令-128~127字节的地方。 (2)指令的功能是:(IP) = (IP)+8位位
一、段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符。80X86中有各种各样的段描述符,下图展示了它们的分类。 看了上图,你也许会说:天啊,怎么这么多段描述符啊!...
有幸结识了《X86汇编语言:从实模式到保护模式》一书。我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅。读罢一遍,意犹未尽。于是打算再读一遍,并把自己的读书所学总结成笔记,一来给自己留个纪念,...
存储器的保护(三) 改动本章代码清单,使之能够检測1MB以上的内存空间(从地址0x0010_0000開始,不考虑快速缓存的影响)。要求:对内存的读写按双字的长度进行。并在检測的同一时候显示已检測的内存数量。建议...
代码段间转移控制时的特权级检查(JMP或者CALL指令)在保护模式下,JMP或CALL指令可以用以下四种方法之一来引用另外一个代码段: 1. 目标操作数含有目标代码段的段选择子和偏移 2. 目标操作数指向一个调用门描述符...
程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25 前面几篇博文最终把代码分析完了。这篇就来说说代码的编译、运行和调试。 1.代码的编译及写入镜像文件 之前我们都是在命令行输入...
本文是将个人的关于《X86汇编语言-从实模式到保护模式》读书笔记做一个整体的目录,方便自己复习查阅。 一共40篇博文,最初是想自己记录笔记,为了不会丢失所以选择了写成博客。 本博文并没有非常细致的去详细...
所以从现在起,我要给代码加上行号。我写博客用的这个插入代码的插件,确实不支持自动插入行号。我真的没有找到什么好方法,无奈之下,只能按照网友的说法,在VIM中给每行代码加上行号,然后再贴出来。 在VIM中每一...
这样我们阅读原书的代码就会方便一点,只要运行这个小程序,就可以明白程序中定义的数据段或者代码段的描述符了。 这段代码,我用了“位字段”的知识,这还是第一次使用C语言的这个特性呢,如果有不对的地方,欢迎...
本文是原书第12章的学习笔记。 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志。司马迁曰:“文王拘而演《周易》;仲尼厄而作《春秋》;屈原...
(十)保护模式下的栈 76 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 77 mov cx,00000000000_11_000B ;加载堆栈段选择子 78 mov ss,cx 79 mov esp,0x7c00 第77~79行用来初始保护模式下的栈。栈段...
上一篇博文我们用了很大的篇幅说了加载器,这一篇我们该说说用户程序了。 先看作者的源码吧。 ;代码清单8-2 ;文件名:c08.asm ...==========================================================
1. 访问数据段时的特权级检查为了访问数据段,数据段的选择子必须被加载进段寄存器(ES,ES,FS,GS,SS)。在把一个段选择子加载进段寄存器之前,处理器会进行特权级检查(如下图所示)...否则,会产生一个一般保护异常。
80X86中断系统 能够处理256个中断 用中断向量号0~255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1、中断的分类 中断可以分为内部中断和外部中断。 ...除法错中断 指令中断 溢出中断 ...
1.BIOS中断 我们可以为所有中断类型自定义中断处理过程,包括内部中断、硬件中断和软中断。...比如说,以下的指令用于从键盘读取一个按键: mov ah,0x00 ;0功能号对应从键盘读字符 int 0x16 ...
(1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 (3)虚拟8086模式:这种方式可以使用户在保护模式下运行8086程序(比如cmd打开的console窗口,就是工作在虚拟...
5.代码段执行时的保护 每个代码段都有自己的段界限。同栈段一个道理,有效界限和G位相关。 G=0:有效界限 = 描述符中的段界限 G=1:有效界限 = 描述符中的段界限值 * 0x1000 + 0xFFF 当处理器取指令的时候,偏移...
第6章习题1,2 ;第6章习题1,2 ;文件名:c06_1.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2017-10-04 16:57 jmp near start ...data1: db 0x05,0xff,0x80,0xf0,0x97,0x30 data2: dw 0x90,0xfff0,0xa0,
本文是《x86汇编语言:从实模式到保护模式》(电子工业出版社)的读书实验笔记。 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果。 需要的源码文件 第一个文件是加载程序 ;代码清单8-1...
同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移地址。但是,在保护模式下,在每个段能够访问之前,必须先登记。这就好比像C语言中,“对变量的使用必须先定义”一样。 每个段在能够使用之前,都要...
本博文是对原书8.3.10的内容的总结。 一、相对短转移 ...(1)该指令属于段内转移指令,而且只允许转移到距离当前指令-128~127字节的地方。 (2)指令的功能是:(IP) = (IP)+8位位移量(范围是-127~12...
上次我们说了代码,这次我们说说怎样看到实验结果。 首先编译源文件(我的源文件就在当前路径下,a盘和c盘在上一级目录下): nasm -f bin c08_mbr.asm -o c08_mbr.bin nasm -f bin c09_1.asm -o c0901.bin ...
上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码。 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): ...
上一篇博文我们用了很大的篇幅说了加载器,这一篇我们该说说用户程序了。 先看作者的源码吧。 ;代码清单8-2 ;文件名:c08.asm ;文件说明:用户程序 ...================================================...