《汇编语言》学习(十八)
本文主要介绍《汇编语言》一书中的两个课程设计题。课程设计1位于第10章,要求在DOS下用彩色显示一张数据表格。课程设计2位于第17章,要求制作一个系统启动盘。
对于课程设计1,我已经在第10章做过了,参考我的博文链接:
http://blog.csdn.net/sagittarius_warrior/article/details/52931471
对于课程设计2,由于时间原因,我暂时不做了,后面有需要的时候,我会补上。在此,我根据网络搜索的结果,推荐两个链接,上面有针对这两个课程设计的答案,如下:
1,http://www.cnblogs.com/S-E-P/archive/2009/12/29/2045085.html
2,http://blog.csdn.net/qq_29134495/article/details/51444547
3,http://www.techbulo.com/770.html
注:链接2中要用到的“软驱仿真软件”,仅限于在XP下使用,win7 32位系统下也用不了。
一、课程设计2,资料解读
1,任务
这次课程设计的任务是编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。
该程序的功能如下:
1)列出功能选项,让用户通过键盘进行选择;
2)用户输入“1”,后重新启动计算机;
3)用户输入“2”后引导现有的操作系统;
4)用户输入“3”后,执行动态显示当前日期、时间的程序;
5)用户输入“4”后,可更改当前日期、时间。
2,BIOS、操作系统和程序启动过程
要实现以上功能,我们需要了解BIOS、操作系统和应用程序的启动原理。
1)BIOS的启动
BIOS,即基本输入输出系统(Basic Input/Output System),它是被固化在主板和各类接口卡(如显卡、网卡等)的ROM芯片上的一组程序。系统BIOS(位于主板的ROM芯片中)是计算机加电后第一个执行的程序。
开机后,CPU自动进入到FFFF:0单元执行(BIOS内),此处有一条跳转指令。CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。
初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。
硬件系统检测和初始化完成后,调用int 9进行操作系统的引导。
基于以上内容,我们要实现功能1——重启计算机,实际上就是要让CPU的执行流重新跳转到FFF:0处执行,也就是说,用户输入“1”后,我们需要修改CS:IP,让它指向FFF:0(用jmp指令就可办到)。
注:
关于BIOS的知识,可以参考1.4、13.4和课程设计2的阅读材料。此外,下面两个链接,第1个介绍了BIOS的启动过程,第2个给出了BIOS的内存分布图。
http://www.techbulo.com/760.html
https://www.mobibrw.com/2013/261
2)操作系统的启动引导
硬件系统检测和初始化完成后,调用int 19进行操作系统的引导。
int 19的最主要的一项工作,就是根据CMOS中的设置,将某个磁盘的0道0面0扇区的内容读取到0:7c00,然后将CS:IP执行0:7c00。
故此,要实现功能2,我们需要先设置CMOS,让int 19最开始从软盘引导启动我们的程序,然后再在我们的程序中修改CMOS,将它改回从C盘引导启动,最后,在我们的程序中调用int 19指令。
注:BIOS的用户设置,一般保存在CMOS中。
3)应用程序
应用程序是通过操作系统的shell来调用的,操作系统将应用程序装载到内存空间后,shell将CS:IP的值设为该应用程序的入口地址,然后CPU开始执行该应用程序。
注:关于应用程序的启动,可以参考4.8节。
《汇编语言》学习(十八)相关推荐
- PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization
PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...
- C1认证学习十八、十九(表单元素、转义字符)
C1认证学习十八.十九(表单元素.语义化标签) 十八 任务背景 HTML的表单用于收集用户的输入,表单元素是指的不同类型的input元素,复选框,单选按钮,提交按钮等等. 任务目标 掌握表单标签以及其 ...
- 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...
- android学习十八(Service服务的基本用法)
定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com. ...
- 汇编语言(十八)之求两个数的最大公约数
输入两个数,使用辗转相除法求最大公约数 程序运行: 代码: datas segmentM_max_len db 0ffhM_len db 0M_string db 100 dup(?)M dw 0 N ...
- stm32cubeMX学习十八、SD卡虚拟U盘实验
本程序编写基于秉火霸道STM32F103ZET6运行环境. 跑这个实验之前吃了一些亏,让我一一道来! 1.软件写好了,却发现插入USB线连接到电脑后USB居然没有枚举 解决方法: 野火的这款开发板上做 ...
- 国际商务英语学习[十八]
询价 Inquiry 1 某零售商想向制造商打探新型计算机的详情.第一次接触时,买方应如何得到初步的数据呢? 英文正文 Our contacts in the computer industry sp ...
- vue学习十八(axios)
文章目录 安装 get方法 post方法 批量请求 后端代码 安装 通过npm install axios安装 或者直接用cdn <script src="https://unpkg. ...
- OpenCV图像处理学习十八,霍夫变换实现交通车道线检测
一.霍夫变换 经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆.霍夫变换运用两个坐标空间之间的变换,将在一个空间中具有相同形状的曲线或直线映射到另一个坐标 ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
最新文章
- mysql forget the password
- 【AutoML】归一化(Normalization)方法如何进行自动学习和配置
- 【深度学习】CornerNet: 将目标检测问题视作关键点检测与配对
- vsftp:425 错误
- 使用 System.Net.Http.Json 简化 HttpClient 的使用
- 精典的网吧常用批处理收集
- Docker安装Kafka(docker-compose.yml)
- 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
- 记一次java-selenium自动抢红包最简单案例1
- Julia : global、local 以及 作用域问题
- WPS简历模板的图标怎么修改_个人简历模板集锦,简历自我评价怎么写?
- 教育培训机构如何利用小程序招生?
- 计算Sharp夏普率的python和c++代码
- Nvidia NX平台控制台调试串口修改调试记录
- 模拟电子电路(1)——概论
- 苏州VS上海:城市化的二个阶段
- 解决cdt.causality.graph.GES()报错的问题
- 计算机联锁控制台功能,计算机联锁控制台的改进及应用
- MobileNet网络学习笔记
- 草莓tv 无法播放_草莓:高质量的声音,开源音乐播放器
热门文章
- 衡水中学2021年的高考成绩查询,2021年全国百强高中排名,它拥有90%一本升学率,超衡水中学成第一...
- 海外IT工程师工作福利揭秘
- 亲身实践已解决:Mysql Row size too large ( 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT
- mac之强制退出程序方法
- manjaro kde安装 配置教程
- 安卓9.0 调用系统相册,拍照,图片裁剪的权限
- python IDEL 清屏
- echart雷达图详细配置
- 思岚科技激光雷达在室外使用效果如何?
- 英语电影观后感之角斗士