OS_lab——bochs源码的编译与安装

1. 实验环境VMware station 15 + Ubuntu 14.04.6 32位。2. 实验步骤2.1 安装虚拟机,并在虚拟机根目录下编译并安装bochs环境。

img

2.2 使用bochs自带工具bximage创建虚拟软驱。

img

2.3 编写引导程序boot.asm并用nasm编译得到引导文件boot.bin和boot.com。

img

2.4 修改bochsrc文件,运行并调试。

img

实验过程分析(实验分工,详细记录实验过程中发生的故障和问题,进行故障分析,说明故障排除的过程及方法。根据具体实验,记录、整理相应的数据表格等)

3. 实验练习

3.1 删除0xAA55,观察程序效果,找出原因。

删除0xAA55后boot.asm程序无法正常编译。

img

尝试将0xAA55改成0xBB66,编译后无法正常引导软盘启动。

img

原因在于一个符合要求的引导程序的第一个扇区必须有512个字节,而且该扇区的最后两个字节的内容应该是0xAA55。删除之后程序无法编译,而更改后程序无法引导。

3.2 修改程序中输出为,一个包含自己名字的字符串,调试程序。

img

把生成的可执行文件反汇编,看看输出的内容是怎样的,并在虚拟机启动过程,设置断点进行调试,在实验报告中截图。 使用指令ndisasm -o 0x7c00 boot.bin >> disboot.asm反汇编,得到如下图结果,其内容与我们编写的boot.asm一致。

img

对写入了原始boot.asm编译产生的boot.bin的a.img用bochs调试。b 0x7c00 设置断点;c 运行到断点。

img

x/64xb 0x7c00查看内存。

img

用n进行单步运行,用u来进行反汇编。

img

3.3 为什么要jmp $,如何改造程序,让这个输出过程执行100次。

jmp$的作用是让程序死循环,从而使操作系统保持运行状态。要打印100此字符串,可以在外层设置一个100次的循环。

img

3.4 回答:为什么要对段寄存器进行赋值。

要对段寄存器进行赋值是因为cs是代码段基址,将它的值赋给ds、es可以确定程序运行的基址,比如数据段基址,之后加上bp,使用ES:BP就可以访问到BootMessage地址上的内容。

3.5 回答:如何在该程序中调用系统中断。

使用汇编int 10h可以调用中断,调用时需要设置好其参数,比如cx为字符串长度,ah=13表示输出字符串,AL=01h为显示器模式,bx表示颜色,dl赋值为0表示在第一行输出,ES:BP为字符串地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/328075.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用sentinel作为熔断器

什么是sentinel Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维…

Python笔记01-你好Python

文章目录 Python简介环境安装Hello world开发工具 Python简介 python的诞生 1989年,为了打发圣诞节假期,Gudio van Rossum吉多 范罗苏姆(龟叔)决心开发一个新的解释程序(Python雏形) 1991年,第…

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为:MIT 二、选择三菱FX系列 三、确认端口号相关的参数(COM端:7.波特率:9600,数据位:7,校验:奇校验,停止位&#xf…

性能分析与调优: Linux 实现 CPU剖析与火焰图

目录 一、实验 1.环境 2.CPU 剖析 3.CPU火焰图 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter192…

UEditor在编辑对齐方式时产生额外空行问题

一、问题描述 一个关于UEditor富文本编辑器的问题:在编辑内容对齐方式后保存后浏览器显示的段落上下会比原先多出一些间距。 下面是对齐编辑后,未保存前的的HTML: 保存后,实际会多出一个段落空行: 二、问题调查 经…

案例102:基于微信小程序的旅游社交管理系统设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

北京交通大学高性能作业——多类积分函数华为鲲鹏 CPU 与 CPU + GPU 对比

多类积分函数华为鲲鹏 CPU 与 CPU GPU 对比 1.description of the problem you have chosen2.description of the HUAWEI platform you use (including both software and hardware)3.your algorithm flow chart直接计算流程图OpenMP计算流程图CUDA计算流程图 4.analysis of t…

Java学习,一文掌握Java之SpringBoot框架学习文集(5)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

Java设计模式-模板方法模式

目录 一、豆浆制作问题 二、模板方法模式基本介绍 三、原理类图 四、模板方法模式解决豆浆制作问题 五、模板方法模式的钩子方法 六、模板方法模式在Spring框架应用的源码分析 七、注意事项和细节 一、豆浆制作问题 编写制作豆浆的程序,说明如下 : 1) 制作…

【Docker基础三】Docker安装Redis

下载镜像 根据自己需要下载指定版本镜像,所有版本看这:Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…

swing快速入门(四十)JList、JComboBox实现列表框

注释很详细,直接上代码 新增内容 🧧1.列表的属性设置与选项监听器 🧧2.下拉框的属性设置与选项监听器 🧧3.Box中组件填充情况不符合预期的处理方法 🧧4.LIst向Vector的转化方法 源码: package swing31_40;i…

ReentrantLock底层原理学习一

J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中,回去剖析一些经典的比较…