操作系统实验一之引导程序

2023-11-22 20:10

本文主要是介绍操作系统实验一之引导程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一, 实验内容

改写bootsect.s和setup.s, 完成如下主要功能:1, bootsect.s能够在屏幕上打印一段提示信息"XXX is booting...", 其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等.2, bootsect.s能够完成setup.s的载入, 并跳转到setup.s开始地址执行. 3, setup.s能够像屏幕输出一行信息 "Now we are in SETUP" 4, setup.s能获取至少一个基本的硬件参数(如内存参数、显卡参数、硬盘参数等),将其存放在内存的特定地址,并输出到屏幕上。5,setup.s不再加载linux内核, 保持上述信息显示到屏幕上即可

二, 实验基础知识

1。启动流程  
这里写图片描述

三, 实验步骤

1, 完成bootsect的屏幕输出功能

  由于不需要加载linux内核,所以就不需要原始的linux代码那么复杂,比如: 将bootsect自身移动到0x90000处等操作,可以忽略的。

  要显示字符串,那么字符串显示到屏幕的哪里呢?当然是当前光标的位置了!所以第一步就要先读取光标的位置,这可以利用10号中断的3号子程序来完成。要显示字符串,可以利用10号功能的13号子程序来完成,需要注意的是一定要边显示字符边移动光标,最终的光标要移动到字符串的末尾处。最后要注意用0xAA55来标记引导扇区。代码如下:

entry _start
_start:
! 首先利用10号中断的3号功能来读取光标位置mov    ah,#0x03        xor    bh,bh            int    0x10! 再利用10号中断的13号功能显示字符串mov    cx,#50            ! 加上回车和换行,字符串一共包含50个字符,所以设置cx为50mov    bx,#0x0007mov    bp,#msg1mov     ax,#0x07c0mov     es,ax            ! es:bp=显示字符串的地址mov    ax,#0x1301        int    0x10Inf_loop:jmp Inf_loop            ! 无限循环! msg1处放置要显示的字符串
msg1:.byte 13,10            ! 换行+回车.ascii "AXF OS is booting, my name is Aixiangfei ...".byte 13,10,13,10        ! 两对换行+回车! 下面是启动盘具有有效引导扇区的标志. 仅供BIOS中的程序加载扇区时识别使用。
! 它必须位于引导扇区的最后两个字节中.
.org 510
boot_flag:.word 0xAA55    ! 引导扇区的标记就是0XAA55

编译和运行: 进入~/oslab/linux-0.11/boot/目录,编译并连接:

as86 -0 -a -o bootsect.o bootsect.s
ld86 -0 -s -o bootsect bootsect.o

  参数说明:-0(注意:这是数字0,不是字母O)表示生成8086的16位目标程序,-a表示生成与GNU as和ld部分兼容的代码,-s告诉链接器ld86去除最后生成的可执行文件中的符号信息。

  如果这两个命令没有任何输出,说明编译与链接都通过了。需要留意的生成的bootsect的大小是544字节,而引导程序必须要正好占用一个磁盘扇区,即512个字节。造成多了32个字节的原因是ld86产生的是Minix可执行文件格式,这样的可执行文件处理文本段、数据段等部分以外,还包括一个Minix可执行文件头部。所以最后必须要把这多余的32个字节删掉,可以用linux自带的工具dd来完成:

dd bs=1 if=bootsect of=Image skip=32

  去掉这32个字节后,将生成的文件拷贝到linux-0.11目录下,并一定要命名为“Image”(注意大小写)。然后就可以run了

2, setup的载入

  首先要确定setup是在磁盘的0磁道2扇区,linux 0.11中的setup占了4个扇区,而我们最后要写的setup显然没有那么复杂,所以可以只用1个扇区就可以了。另外,由于bootsect位于0x7c00处,占用512个字节,所以可以将setup载入到0x7e00处。要想从磁盘中载入数据到内存,可以利用BIOS提供的13号中断轻松完成。最后就直接用jumi指令跳转到0x7e00处即可。对前面的bootsect.s扩展之后的完整代码如下:

SETUPLEN = 1
SETUPSEG = 0x07e0entry _start
_start:
! 首先利用10号中断的3号功能来读取光标位置mov    ah,#0x03        xor    bh,bh            int    0x10! 再利用10号中断的13号功能显示字符

这篇关于操作系统实验一之引导程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati