自制操作系统系列(二):软盘读取

本文是自制操作系统系列的第二篇,主要讲解如何使用汇编读取软盘数据。通过设置BIOS INT 13H调用来读取软盘扇区,循环遍历磁头、柱面和扇区,将数据加载到内存并验证读取内容。文章提供了详细的操作步骤、代码示例及参考资料。
摘要由CSDN通过智能技术生成

代码仓库地址:https://github.com/freedom-xiao007/operating-system

简介

在上一篇中,我们使用汇编编写了一个直接显示hello的程序,接下来我们继续探索如果使用汇编读取软盘数据

软盘数据读取准备

在上一篇中,我们使用nasm将程序制作成了img文件,在尝试中,这个就可以视为软盘,使用软盘的读取方式能读取我们这个img文件

文件读取的功能不用自己实现,在BIOS函数中(可以视为系统级的函数库,里面提供了一些通用的函数)有相关的文件读取功能:BIOS INT 13H

其相关的说明如下:

① 13H号功能调用02H号子功能:
读扇区入口参数:

  • AH=02,指明读扇区功能调用
  • AL要读扇区数
  • DL驱动器代号,0和1代表软盘,80H和81H代表硬盘
  • DH所读磁盘磁头号,以软盘来说,只能是0和1
  • CH 10位磁道号的低8位,
  • CL寄存器的第6、第7位存放其高2位CL低5位为要读的第一个扇区的扇区号(注意扇区号从1开始而非从0开始)。高2位表示磁道柱面号的高2位ES:
  • BX指出存放从磁盘所读数据的内存地址出口参数:
  • 读出数据放在ES:BX所指的内存区域中若产生错误,CF置1,AH内为错误代码

更多的细节可以参考:《汇编语言程序设计》第三版的10.2.2和10.3章节,微信读书上有

还需要了解软盘的相关知识,在《30天自制操作系统》中,我们看到其对软盘的描述,如下图:

在这里插入图片描述

我们需要循环读取磁头,柱面,扇区,才能把整个磁盘的数据进行读入

根据两本参考书和相关的资料,我们先把软盘数据读取功能实现,博主能力问题,没有办法步子迈太大

程序整体思路

程序实现的大致思路如下:

  • 1.软盘读取相关的参数定义,也就是:AH、AL、DL、DH、CH、BX、ES
  • 2.循环磁头、柱面、扇区,读取整个软盘数据到内存中
  • 3.为了验证,我们读取内存中的内容,并打印到屏幕上

整体思路有了,我们开始看代码细节

程序细节实现

1.软盘读取的相关的参数定义

我们把软盘读取函数的相关的参数先给定义好,具体的说明如下,代码中已加入相关的注释:

; 定义数据存放的内存开始地址
OffSetOfLoader	equ	0x0820
read_file_ready: ;读软盘准备
	MOV AH, 02 ;指明读扇区功能调用
	MOV AL, 1 ;指明要读的扇区数为1
	MOV DL, 0x00 ;指明要读的驱动为A
	MOV DH, 0 ;指定读取的磁头0
	MOV CH, 0 ;柱面0
	MOV CL, 1 ;读取扇区1(因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值