首页 > 其他分享 >02-使用BIOS中断 显示字符/读取磁盘 【实现boot中加载loader的功能】

02-使用BIOS中断 显示字符/读取磁盘 【实现boot中加载loader的功能】

时间:2024-07-19 19:07:16浏览次数:9  
标签:02 显示字符 INT AH boot 扇区 0x10 -- 磁盘


bios提供了一组服务,可以帮助我们操纵硬件,避免我们直接与硬件细节打交道

当触发软中断时,会自动从中断向量表中取出想用的中断程序的首地址,来执行中断程序,参数通过寄存器传递



一、Bios的INT10中断


  • INT10中断是BIOS用于控制显示屏的关键接口,包括设置显示器模式、光标管理和显示特性等

    INT 0x10 是显示类指令:

    INT 0x10, AH = 1 -- set up the cursor
    INT 0x10, AH = 3 -- 获取光标位置
    INT 0x10,AH = 0xE -- 显示字符
    INT 0x10, AH = 0xF -- get video page and mode
    INT 0x10, AH = 0x11 -- set 8x8 font
    INT 0x10, AH = 0x12 -- detect EGA/VGA
    INT 0x10, AH = 0x13 -- 显示字符串,具体寄存器设置可以参考:http://www.ctyme.com/intr/rb-0210.htm
    INT 0x10, AH = 0x1200 -- Alternate print screen
    INT 0x10, AH = 0x1201 -- turn off cursor emulation
    INT 0x10, AX = 0x4F00 -- video memory size
    INT 0x10, AX = 0x4F01 -- VESA get mode information call
    INT 0x10, AX = 0x4F02 -- select VESA video modes
    INT 0x10, AX = 0x4F0A -- VESA 2.0 protected mode interface

  • 在调用 BIOS 函数之前,需要先设置 AH 或 AX(或 EAX) 寄存器,然后执行对应的 INT 指令

  • AH=0xE 的功能是显示字符,同时光标前移(寄存器值的设置:AL=字符,BL=在图形模式下表示文字的颜色,BH=目前的显示页·在图形模式下为0)



二、实操(显示字符)


通过INT10中断的AH中断功能来在qemu显示器上显示字符,从而表明引导程序已经正常运行了(即把磁盘的第一个扇区512字节的内容成功的加载到了内存中的0x7C00处)


接着编译一下,再调试,结果如下:



三、Bios的INT13中断


bios提供了磁盘读取接口,方便我们从磁盘加载loader


  • 先通过BIOS把boot程序的代码(也就是磁盘第0扇区的内容)加载到内存中,再通过执行boot程序来加载loader到内存中。

  • 目前loader还暂时未编写,接下来先编写boot模块中用来加载loader的代码

  • boot程序的功能是:加载磁盘上的从第1扇区开始到指定扇区结束的内容(也就是存放loader的几个扇区)到内存中的指定的位置


  • INT 13H直接磁盘服务Direct Disk Service

    00H —磁盘系统复位
    01H —读取磁盘系统状态
    02H —读扇区
    03H —写扇区
    04H —检验扇区
    05H —格式化磁道
    06H —格式化坏磁道
    07H —格式化驱动器
    08H —读取驱动器参数
    09H —初始化硬盘参数
    0AH —读长扇区
    0BH —写长扇区
    0CH —查寻
    0DH —硬盘系统复位
    0EH —读扇区缓冲区
    0FH —写扇区缓冲区
    10H —读取驱动器状态
    11H —校准驱动器
    12H —控制器RAM诊断
    13H —控制器驱动诊断
    14H —控制器内部诊断
    15H —读取磁盘类型
    16H —读取磁盘变化状态
    17H —设置磁盘类型
    18H —设置格式化媒体类型
    19H —磁头保护
    1AH —格式化ESDI驱动器



  • 02H 功能:读扇区

    入口参数:AH=02H
    出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    寄存器值的设置:
    AL=扇区数
    CH=柱面 (填0)
    CL=扇区 (填1,表示从第1个扇区开始读取)
    DH=磁头 (填0)
    DL=驱动器,00H7FH:软盘;80H0FFH:硬盘 (填0x80,表示硬盘)
    ES:BX=缓冲区的地址 (段地址+一个偏移的形式)(前面的_start代码里面已经将es寄存器设为0了,e而BX寄存器是存放如上图所示的内存的0x8000这个地址)


四、实操(磁盘读取)


接着编译一下。编译后,用16进制方式打开磁盘映像文件,定位到第一个扇区:

简单的修改一下用来测试:

调试后,接着在调试控制台(是与GDB交互的一个接口)输入一些命令来查看测试结果:

-exec x /20xb 0x8000 查看内存中0x8000地址开始的20个字节,20xb中的x意思是用16进制表示

(上面的调试过程试了好几次才成功,之前提示无法进行下一步,这次等的时间长一点成功了,可能是读写磁盘比较慢所以需要等待一段时间?也可能是其他原因,暂时没有搞明白具体原因。)





标签:02,显示字符,INT,AH,boot,扇区,0x10,--,磁盘
From: https://www.cnblogs.com/kakafa/p/18312145

相关文章

  • ISYS1002 Cybersecurity
    ISYS1002Cybersecurity-Assignment2SummaryTitleAssignment2TypeCaseStudy. MustbecompletedasindividualsDue Date:Monday,Week5, 11:59 pmLength:1000wordsWeighting:40%AcademicIntegrityGenAImayNOT b......
  • 20240719数据库关联查询、条件查询
    mysql关联外键查询商品表和图片表是分开的,用一张商品图片表关联起来了。查询商品表所有字段和图片信息。其余的,商人id、区域id、分类id都是直接关联,没有中间表SELECTp.id,p.name,p.price,p.unit,f.file,p.description,p.is_on_sale,p.......
  • bootstrap-datetimepicker设置时分
    bootstrap-datetimepicker设置时分需求背景时分年月日需求背景在日常工作中遇到一个业务场景,需要时间控件来选择时分,但是不需要年月日的成分,实现之后的效果如图那么下面就开始查找相关的时间控件插件,这里示例图中用到的是bootstrap-datetimepicker时间控件时分......
  • macOS Sequoia 15 beta 3 (24A5289h) Boot ISO 原版可引导镜像下载 (首个公共测试版)
    macOSSequoia15beta3(24A5289h)BootISO原版可引导镜像下载(首个公共测试版)iPhone镜像、Safari浏览器重大更新、备受瞩目的游戏和AppleIntelligence等众多全新功能令Mac使用体验再升级请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版......
  • 在Spring Boot中实现日志管理与监控
    在SpringBoot中实现日志管理与监控大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在SpringBoot应用程序中实现日志管理与监控。日志管理和监控是现代应用程序的核心部分,它们有助于跟踪应用程序的运行状态、诊断问题并提高系统的可维......
  • 安川伺服驱动器SGDV-1R6A01B002000的应用
    YASKAWA安川伺服电机及驱动器应用YASKAWA安川伺服电机及驱动器是一种运动控制设备,可以广泛应用于各种机器人、自动化系统、数控机床等行业中。安川伺服系统采用先进的控制技术、传感器技术和电机技术,能够稳定、精准地执行各种运动控制任务。以下是安川伺服电机及驱动器的应用......
  • 安川伺服驱动器SGDV-1R6AE1A002000
    安川驱动器工作原理一、工作原理安川驱动器是一种在工业生产过程中广泛使用的电子设备,主要用于控制和调节电机的运转。安川驱动器是由交流电源产生交流电信号,通过变频控制芯片将交流电信号转化为直流电信号,再通过逆变电路将直流电信号转化为可调频率和电压的交流电信号,最终控......
  • 安川伺服驱动器SGDV-200A01A002000
    安川驱动器工作原理一、工作原理安川驱动器是一种在工业生产过程中广泛使用的电子设备,主要用于控制和调节电机的运转。安川驱动器是由交流电源产生交流电信号,通过变频控制芯片将交流电信号转化为直流电信号,再通过逆变电路将直流电信号转化为可调频率和电压的交流电信号,最终控......
  • 02线性表 - 链表
    这里是只讲干货不讲废话的炽念,这个系列的文章是为了我自己以后复习数据结构而写,所以可能会用一种我自己能够听懂的方式来描述,不会像书本上那么枯燥和无聊,且全系列的代码均是可运行的代码,关键地方会给出注释^_^全文1W+字版本:C++17编译器:Clion2023.3.24暂时只给出代码,不会涉......
  • 【开源分享】2024PHP在线客服系统源码(全新UI+终身使用+安装教程)
    PHP在线客服系统核心功能用户留言协同工作:留言后,用户能够享受在线咨询、订单查询等服务;登录状态也用于权限控制,确保不同用户访问合适的资源。咨询处理作用:提供实时或异步的客服咨询功能,允许用户向客服发送问题并接收回复。重要性:是客服系统的核心功能,直接影响用户体验和满意......