任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36

修改后的代码,有需要的朋友可以去下载(c14_new文件夹)。下载地址是:
GitHub: https://github.com/LeslieChe/from-real-mode-to-protected-mode

第14章的习题2及解答

修改代码清单14-1和13-3,使得通过调用门请求读取硬盘扇区的服务时,通过栈传递参数。而且,传递的参数分别是逻辑扇区号、数据段选择子和段内偏移。要求使用ARPL指令。

注意,题目中的“数据段选择子”,不一定非得是DS,其他的指向数据段的段寄存也是可以的。

关于ARPL指令,可以参考我的博文
RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31

下面仅解释这道题最关键的部分:对栈中参数的提取和ARPL指令的使用。

read_hard_disk_0:                           ;从硬盘读取一个逻辑扇区;---------------;| 逻辑扇区号 |@1;---------------;|数据段选择子 |@2;---------------;| 段内偏移   |@3;---------------;|     |  CS  |;---------------;|     EIP    |;---------------;|  8个寄存器 |;---------------;|     |  DS  |;-------------- <-----EBP;|            |pushad push dsmov ebp,esp

因为是用栈传递参数,在执行完上面三行后,栈的示意图如上图所示。

         mov ax,[ebp+10*4] ;提取调用者的CSmov bx,[ebp+12*4] ;提取 @2数据段选择子arpl bx,ax        ;调整段选择子的 RPLmov ds,bxmov eax,[ebp+13*4];提取 @1逻辑扇区号mov ebx,[ebp+11*4];提取 @3段内偏移push eax ;因为后面的端口操作要用到 AL,所以先压栈保存扇区号

接下来的代码和配书源码基本相同,除了最后3行。

         loop .readwpop dspopad   retf 3*4                              ;段间返回 

用栈传递参数

除了上面的修改,我还把所有例程都改成了用栈来传递参数(如果需要传参的话)。

首先,要修改例程本身,这个与上面的习题类似,这里不再赘述。

其次,要修改调用门描述符中的参数个数字段。
为此,我修改了内核的符号表,在每个表项后面增加了参数个数字段(如下图)。如果不需要传递参数,那么这个字段应该填写0.这样做是为了在安装调用门的时候,可以方便地获得参数个数。

光在符号表中添加参数个数字段是不行的,我们还要修改安装调用门的代码,只需要增加下图中红色的那行。

put_string增加颜色支持

我对五彩缤纷的字符情有独钟,所以为put_string例程增加了颜色支持。

最后运行结果如下图所示:

%include包含文件

类似在C语言源文件中用#include "XXX.h"包含其他文件, 在.asm源文件中也可以使用

%include "xxxxx"

例如在一个源文件中写了一句:

%include "macros.mac"

这会把文件macros.mac中的内容包含到现在的源文件中。用nasm编译文件的时候,会在当前目录下寻找被包含的文件,也可以在nasm命令行使用-i选项来增加搜索路径。

因为增加了颜色支持,为了方便,我把一些字符属性的值专门放在了“color.inc”文件中。

; define some colorsGREEN  EQU 0X02
BLUE   EQU 0X09
RED    EQU 0X04
YELLOW EQU 0X0E

那么引用这些符号常量(如GREEN)的时候,就需要用%include把这个文件包含进来。

第14章的学习笔记就到这里,下次我们开始第15章的学习。敬请关注…

任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36相关推荐

  1. 访问数据段时的特权级检查,修改SS时的特权级检查——《x86汇编语言:从实模式到保护模式》读书笔记30

    1. 访问数据段时的特权级检查 为了访问数据段,数据段的选择子必须被加载进段寄存器(ES,ES,FS,GS,SS).在把一个段选择子加载进段寄存器之前,处理器会进行特权级检查(如下图所示). 在数值上 ...

  2. X86汇编语言从实模式到保护模式16:特权级和特权级保护

    目录 1. 特权级保护机制 1.1 基础段保护机制的不足 1.2 特权级划分 1.3 特权级的表示 1.3.1 当前特权级CPL 1.3.2 描述符特权级DPL 1.3.3 请求特权级RPL 1.4 ...

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

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

  4. 【OS修炼指南目录】----《X86汇编语言-从实模式到保护模式》读书笔记目录表

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 本文是将个人 ...

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

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

  6. [书]x86汇编语言:从实模式到保护模式 -- 第14章 任务和特权级保护,调用门、LDT、TSS、TCB

    # 加载用户程序 Part 1.TCB, Task Control Block, 任务控制块 分配内存作为该任务的TCB,并插入至TCB链表. Part 2.LDT, Locak Descriptor ...

  7. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述...

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  8. X86汇编语言从实模式到保护模式20:平坦模型

    1 引入平坦模型(Flat Model)的原因 1.1 内存管理模型变迁 1.1.1 分段模型 1.1.1.1 基本特点 1. 在程序中按结构组织为多个段 2. 在加载程序时,为程序中的每个段创建段描 ...

  9. 李忠 X86汇编语言 从实模式到保护模式-初学

    学习资料: 教学视频 网易云课堂 哔哩哔哩 原书网站 原书相关源码附件下载 网友帖子 除了后面没有图片之外很不错的笔记总结,写者很用心 留存待看,一片文章写了特点 很有特色总结的笔记 学习目标: 15 ...

最新文章

  1. mysql进程SHOW PROCESSLIST详解Command命令状态
  2. 截图推荐:FastStone Capture使用教程
  3. jquery1.9学习笔记 之选择器(基本元素五)
  4. android linearllayout 隐藏 动画,AnimatedLinearLayout:带删除动画的LinearLayout
  5. 计算机常用英文句子,英文简历常用句子
  6. [转][C#]Environment 类
  7. (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
  8. HG255D网页摄像头配置
  9. 市场需求分析报告及模板
  10. java 代码走查_Java代码走查具体考察点
  11. Win10 台式机机箱前置耳机插孔没声音如何修复
  12. GetLastError返回代码含义
  13. 操作系统——内存交换技术
  14. 一个计算机专业大专生大学两年来的学习经历
  15. Win7下eclipse ADT调试cocos2dx-lua工程
  16. L1正则化与L2正则化
  17. 笔记:源码修改开放5555端口
  18. 张柏芝《影子爱人》曝剧照 亲手设浪漫爱情桥段_0
  19. 年薪20万、50万、100万的管理者,有什么分别?
  20. 智慧物业综合解决方案

热门文章

  1. 电脑间用网线传输文件的方法Win10-Win10(Win7)
  2. Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 离散化】
  3. eclipse导入Tomcat8源码
  4. redis 基本类型和命令(一)
  5. ORACLE 11G EXP导出空表方法
  6. shell 编程学习笔记(一)
  7. 机器学习导论(张志华):EM算法
  8. 编程方法学23:搜索排序与算法效率分析
  9. GPU 共享内存bank冲突(shared memory bank conflicts)
  10. 二十万字C/C++、嵌入式软开面试题全集宝典六