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

2024-01-07 11:12
文章标签 编译 源码 安装 lab os bochs

本文主要是介绍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为字符串地址。

这篇关于OS_lab——bochs源码的编译与安装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579728

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3