1. 第15章代码修改

先不说习题,说一说我对源码的修改。从运行结果来看,主要是增加了颜色支持。不过把我的代码与配书代码相比较的话,还是有很多不同的。这些修改是怎么来的,可以参考我之前的博文。

运行效果如下图

2. 习题解答

请注意,我是在上面的修改的基础上完成了习题,下文的截图是习题代码和上面修改后的代码进行对比的截图。

虽然我的答案不是那么漂亮,但是经测试符合题目要求,所以写出来和大家讨论。囿于篇幅,我只讲解关键的部分,一些不那么重要的修改(比如修改了字符串的内容等)就不赘述了。

2.1 第一题

修改本章的源程序,使之能够顺序完成以下工作:
(1)从程序管理器任务切换到任务A,显示消息后返回程序管理器;
(2)从程序管理器任务切换到任务B,显示消息后返回程序管理器;
(3)再从程序管理器任务切换到任务A,显示另一条消息,然后返回程序管理器;
(4)再从程序管理器任务切换到任务B,显示另一条消息,再返回程序管理器;

解答:首先,我对terminate_current_task这个过程进行了修改。红色是添加的部分。

分析:(1)和(2)很好实现,因为配书源码已经帮我们做了。需要注意的是(3),当再从程序管理器任务切换到任务A的时候,注意,这时候还在A的全局空间,所以必须对terminate_current_task加上retf(第497行),这样才能返回到A的用户空间,然后打印另一条消息。

第471~472行,用内核数据的选择子core_data_seg_sel加载了用户程序的DS,如果不返回用户空间,还没有什么大的影响;但是,一旦返回,因为需要改变特权级,CPU就会则检查DS,ES,FS和GS的内容,如果段选择子指向数据段或者非一致代码段且段描述符的DPL在数值上小于返回后的新CPL,那么就把数值0传送到该段寄存器。

如果忘了这个知识点,可以参考我的博文调用门详解的末尾部分。
所以,461~464用于保存用户程序在用户空间的“现场”,第493~496用于恢复“现场”。

其次,填写用户TSS信息的时候,我增加了对ESP的填写。配书代码没有,我觉得这是一个BUG。虽然不填写也不会影响实验结果,但是从严谨的角度讲,有必要填写,不然用户的ESP就是一个不确定的值,很可能造成“灾难”。

最后,内核代码末尾增加了切换相关的代码。

需要注意的是第1148和1157行,作用都是取得TCB的基地址。

另外,用户程序也有修改。
下图显示对字符串有修改。

下图显示在用户程序末尾增加了一段。

最后,程序的运行结果是

第二题我们下次再说。敬请期待…

附:
修改代码下载地址:
http://download.csdn.net/detail/u013490896/9573297

习题代码下载地址:
http://download.csdn.net/detail/u013490896/9578126

第15章习题解答(一)——《x86汇编语言:从实模式到保护模式》读书笔记40相关推荐

  1. 第15章习题解答(二)——《x86汇编语言:从实模式到保护模式》读书笔记41

    我们接着上篇博文说. 2.2 第二题题目 修改本章的源程序,使之能够顺序完成以下工作: (1)从程序管理器任务切换到任务A,显示一条消息: (2)再从任务A转换到任务B,显示一条消息: (3)从B直接 ...

  2. c语言与单片机技术试卷与答案,哈尔滨工业大学《单片机原理及应用》课件、各章习题解答、试题及答案...

    哈尔滨工业大学<单片机原理及应用>课件.各章习题解答.试题及答案等 本光盘依托张毅刚等编著,高等教育出版社出版的高等学校教材<单片机原理及应用>制作的.主要包括电子教案及各种电 ...

  3. c语言程序设计教程第三版答案9.5,C语言程序设计-第5-9章习题解答.ppt

    C语言程序设计-第5-9章习题解答 华中科技大学计算机学院 C语言程序设计 第5-9章 部分习题解答 作业中问题较多的习题 第5章5.4(2) 第6章6.1,6.3,6.5(6),6.8 第7章无 第 ...

  4. c语言判断正整数位数 请用strengh,C语言程序设计-4、12章习题解答.doc

    C语言程序设计-4.12章习题解答 C语言程序设计概述 一个C程序的执行是从 A . A.从main()函数开始,直到main()函数结束B.第一个函数开始,直到最后一个函数结束C.第一个语句开始,直 ...

  5. X86汇编语言从实模式到保护模式15:任务和任务的创建

    目录 1. 任务的概念与组成 1.1 任务的概念 1.2 多任务系统 1.3 任务的组成 1.3.1 局部描述符表LDT 1.3.2 任务状态段TSS 2. 任务控制块和TCB链表 2.1 为何需要任 ...

  6. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  7. [书]x86汇编语言:从实模式到保护模式 -- 第13章 mbr加载内核、内核加载应用程序

    # mbr加载内核 1.0x7c00,16位实模式 2.进入保护模式前的准备工作:创建段描述符(代码段.数据段.堆栈段.显示缓冲区),构建gdt 3.进入保护模式 ; 开启保护模式 ; CR0的第1位 ...

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

    任务和特权级保护(五)--<x86汇编语言:从实模式到保护模式>读书笔记36 修改后的代码,有需要的朋友可以去下载(c14_new文件夹).下载地址是: GitHub: https://g ...

  9. 程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

    程序的加载和执行(六)--<x86汇编语言:从实模式到保护模式>读书笔记26 通过本文能学到什么? NASM的条件汇编 用NASM编译的时候,通过命令行选项定义宏 Makefile的条件语 ...

最新文章

  1. html embed详解
  2. 一个接口查3张表数据_“离婚冷静期”倒计时,天眼查专业版数据显示我国目前有3万余家婚姻咨询相关企业 北京市最多...
  3. [转]批处理for命令使用指南
  4. centos 6.0安装杀毒软件clamAV 0.98
  5. Android之在ubuntu上常用的am、pm命令的总结
  6. 让电脑清空数据或死机,一定要执行才舒服
  7. 在R语言中显示数学公式
  8. Android 开发设置系统闹钟
  9. 与计算机相关的潜在健康风险是什么,医疗安全与风险管理.新.ppt
  10. 来势汹汹,奥米克戎;是否补种,特定疫苗? | 经济学人全球早报精选
  11. LazyBrush论文笔记(4):问题建模-平滑项与数据项
  12. 【贝叶斯滤波与卡尔曼滤波】 第四讲 连续随机变量的贝叶斯公式
  13. 付宇泽20190919-3 效能分析
  14. 卧式铣床主传动系统设计建模及运动仿真
  15. HTML--百度百科
  16. 弹性地基梁板实用计算_桥梁支架设计计算,不会的戳进来!让你新手变行家!...
  17. FileReader的使用及其方法
  18. 手撕机器学习算法--一步步推导-------NFL(没有免费午餐定理)
  19. 为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片?
  20. unity在脚本中获取游戏对象有三种_Unity3D中用于删除当前脚本所在游戏对象的代码是:_学小易找答案...

热门文章

  1. hdu 1754 I Hate It(线段树之 单点更新+区间最值)
  2. shell练习03 安装mysql
  3. ELK日志平台一 ElasticSearch的安装
  4. Java中equlas和==的区别
  5. m函数与m文件的命名
  6. ubuntu12.10安装openssh-server与本身的软件冲突
  7. 70后、80后、90后的区别(很有意思)
  8. 斜率-有问题,部分没有归一化-错了——图片保存
  9. GPU中与CUDA相关的几个概念
  10. Linux配置启动挂载:fstab文件详解