【操作系统】优化MBR程序:让MBR调用显存吧

这篇具有很好参考价值的文章主要介绍了【操作系统】优化MBR程序:让MBR调用显存吧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.显存、显卡以及显示器的概述

        显卡用于连接CPU和显示器,我们调用显示器时,其实就是利用显卡提供的IO接口间接地对显示器进行操作,所以显卡也称之为显示适配器。接下来我们将优化之前写的MBR程序(参考:【操作系统】BIOS与MBR之间的过渡实践),使我们的程序通过直接操作显卡来输出,显卡给我们的输入接口有显存和端口,而本文中主要用到显存。

        如果看过我之前发过的文章(参考:【操作系统】BIOS开机自检)就可以知道,内存布局中关于显存地址分布如下:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        显卡支持三种模式:文本模式、黑白图形模式以及彩色图形模式,本文中我们将使用文本模式,以实现类似Linux控制台风格的字符界面。从起始地址0XB800到C7FFF这片32KB大小的内存区域用于文本显示,我们只需要把要显示在显示器上的字符直接输入到0XB800开始的显存中,显存有了数据,会直接将数据搬到显示器屏幕上,至于数据怎么搬到屏幕上的不用我们了解,我们只要保证写入的数据符合格式就好了。

         由于在文本模式下,字符不仅可以显示黑白颜色,也可以打印出彩色,所以每个显示在屏幕上的字符都由2个连续的字节表示,一个字节存储ASCII码的数据,另一个字节存储字符的属性:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        在屏幕上每个字符的低字节是字符的ASCII码,高字节属于字符的属性信息,其中低4位是字符前景色,高4位是字符背景色,颜色由RGB三色调和,第11位和第15位分别控制亮度位以及是否闪烁(1为高亮/闪烁,0为正常/不闪)。

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

二.改进MBR并解析

        有了上面的知识,我们就可以通过改编之前的MBR程序来调用显存了,代码如下:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        我们保留原先的MBR程序滚屏的操作,将通过BIOS输出改成通过显存输出。我们重点来分析第9~10行,以及第19~32行代码,其他代码在另外一篇文章已经解析过了,不再次赘述。

  • 第9~10

        在第一节我们已经知道,内存地址0XB8000为显存的文本模式,在实模式下,内存的访址方式是“段基址×16+段内偏移地址”,所以我们直接在段寄存器gs(通过通用寄存器ax中转,原因已在上一篇文章说明,不再赘述)中存入0xb800即可。在此有个小知识点:在进行内存访址时,CPU将ds作为默认的段基址寄存器,如果不用CPU默认寄存器,我们就需要自行指定具体的段基址寄存器,而这个行为叫做“段跨越前缀”。

 9         mov ax,0xb800
 10         mov gs,ax
  • 第19~32

        我们直接拿前面两段作为例子,后面的都是大同小异:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        “mov  byte [gs:0x00] ‘1’”是以gs为段基址寄存器,以0为偏移地址起始的内存中,写入大小为1byte大小的字符为”1”的ASCII码,当然,如果你对ACSII码十分熟悉,也可以写成“mov  byte [gs:0x00] 0x31”。

         而第二行则是字符的属性,具体参数可以参照上文中所提及的。

三.运行

         代码编写完成后,我们保存一下代码(本文保存文件名为A.S),并且使用nasm对代码进行编译:

nasm  –o  A.bin  A.S

        此时,我们就可以开始运行调试了,我们需要用到之前写过的一篇文章(【操作系统】Bochs安装和配置)里面的两个东西:

  •         使用Bximage工具生成的空白镜像(本文文件名为test.img),大小随意,大于512个字节即可
  •         Bochs模拟硬件环境的配置文件(文章中文件名为boch.disk)

        我们首先将生成的A.bin文件写入到空白镜像中:

dd  if=./A.bin  of=./test.img  bs=512  count=1  conv=notrunc

        上述代码的具体参数可以自行百度,不再次赘述,将代码写入到镜像后,我们再将镜像文件加入到Bochs的模拟硬件环境配置文件中,根据文章中所描述的,我们直接将新生成的镜像写入配置文件的以下位置即可:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        保存一下修改后的配置文件,我们开始运行Bochs模拟器进行模拟操作:

./Bochs  –f   boch.disk(你自己的硬件配置文件名)

         运行成功后,会显示以下信息,并且默认为【6】:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        此时我们再按一次回车,即可开始模拟:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存

        我们在控制台中输入“c”(具体含义请查看上面所说的文章),继续往下运行,就能看到弹出的窗口中出现了我们所要的字符串:

【操作系统】优化MBR程序:让MBR调用显存吧,操作系统,MBR,BIOS,显存文章来源地址https://www.toymoban.com/news/detail-819470.html

到了这里,关于【操作系统】优化MBR程序:让MBR调用显存吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统实验 2.3系统调用:linux-0.11-lab “为版本0内核增加一个系统调用getjiffies” 和 “在用户程序中使用新增的系统调用”

    打开 vscode ,在如图所示位置打开 ~/os/linux-0.11-lab/0 文件夹 1.定义getjiffies系统调用 题目中给的提示:进入到 unistd.h 文件中 阅读代码,可以发现上图划线处有个系统调用名为 getpid :返回当前进程号——这与我们期望实现的功能类似:通过系统调用返回jiffies值。 于是此时希望

    2023年04月08日
    浏览(98)
  • 我的acer电脑U盘装系统前BIOS设置及装系统过程中的操作

    由于既使能了F12,又将U盘的优先级进调整到了最高,所以,电脑进入boot选择界面后无需操作,等待几秒,默认进入U盘系统,然后便可开始安装系统

    2024年02月04日
    浏览(45)
  • 电脑bios使用的uefi启动,系统盘使用的mbr格式,为什么安装完系统无法进入?

      在电脑的安装系统过程中,我们会遇到一些问题,比如说使用UEFI启动但是磁盘分区使用MBR格式,导致系统安装完成之后无法引导。这是因为UEFI启动只支持GPT格式的磁盘分区。 在本文中,我们将探讨如何将磁盘转换成GPT格式,并重新安装系统,以便正确地引导系统。    

    2024年02月12日
    浏览(60)
  • 操作系统 day04(系统调用)

    什么是系统调用 库函数和系统调用的区别 应用程序可以通过汇编语言直接进行系统调用,也可以使用高级语言的库函数来进行系统调用。而有的库函数涉及系统调用,如“创建一个新文件”函数,有的不涉及,如“取绝对值”函数 什么功能要用到系统调用 系统调用的过程

    2024年02月06日
    浏览(42)
  • 操作系统的运行机制、中断和异常、系统调用

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 程序是如何运行的? 一条高级语言的代码翻译过来可能会对应多条机器指令 程序运行的过程就是CPU一条一条的机器指令的执行过程 “指令”就是处理器(

    2024年02月14日
    浏览(43)
  • 探索操作系统:内核、启动和系统调用的奥秘

    首先,对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝

    2024年02月11日
    浏览(56)
  • BIOS MBR UEFI GPT详解

    名词解释 1、启动方式: BIOS:Basic Input Output System,中文名称\\\"基本输入输出系统\\\",也叫 Legacy BIOS。 UEFI:Unified Extensible Firmware Interface,中文名称\\\"统一的可扩展固件接口\\\"。 2、硬盘分区: MBR分区:Master Boot Record,中文名称\\\"主引导记录\\\"。 GPT分区:GUID Partition Table,中文名称

    2024年02月08日
    浏览(38)
  • 【Linux操作系统】深入理解系统调用中的read和write函数

    在操作系统中,系统调用是用户程序与操作系统之间进行交互的重要方式。其中,read和write函数是常用的系统调用函数,用于在用户程序和操作系统之间进行数据的读取和写入。本文将深入介绍read和write函数的工作原理、用法以及示例代码,以帮助读者更好地理解和应用这两

    2024年02月13日
    浏览(46)
  • 网络攻防——kali操作系统基本使用-调用摄像头

    本文章中生成的木马带有一定的攻击性,使用时请遵守网络安全相关的法律法规(恶意攻击操作系统属于违法行为)。 kali中打开终端最好是进入root sudo su 获取IP ip address 重新打开一个终端 输入指令,注:-p表示攻击载荷,表示的是说明这个程序需要载入什么功能,这里就是

    2024年02月13日
    浏览(45)
  • HDU 操作系统实验二 -设计一个系统调用,返回指定进程的相关时间信息

    目录 一、实验思路 二、准备工作——Linux内核编译步骤 1.实验环境配置 2.下载内核源码 3.解压缩内核源码文件 4.清除残留的.config和.o文件 5.配置内核 6.编译内核,生成启动映像文件 7.编译模块 8.安装内核 9.配置grub引导程序 10.重启系统 三、设计系统调用,返回指定进程的相关

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包