读取多个扇区

博客介绍了数据读取范围,从柱面0磁头0的扇区2开始,到柱面9磁头0的第18个扇区结束,共读取了10个柱面。

从柱面0 磁头0 的扇区2 读到 柱面9 磁头0 的第18个扇区完

读取了10个柱面

; haribote-ipl
; TAB=4

		CYLS EQU 10   			;定义了一个常量

		ORG		0x7c00			

		JMP		entry
		DB		0x90
		DB		"HARIBOTE"		; 启动区的名称 可以使任意字符
		DW		512				; 设置每个扇区的大小
		DB		1				; 簇的大小 也就是OS 每次对磁盘读写的 最小单元
		DW		1				; FAT的 起始位置 第一个扇区  001 扇区
								;BIOS 读取该扇区的内容 并将其放置在0x7C00位置
		DB		2				; FAT的个数
		DW		224				; 根目录的大小 一般设置为224
		DW		2880			; 该磁盘的大小 为2880扇区 2*80*18
								;两个磁头 每个磁头80个磁道 每个磁道 18个扇区
		DB		0xf0			; 磁盘的种类
		DW		9				; FAT的长度 必须为9个扇区
		DW		18				; 1个 磁道上 有多少个扇区 必须为18
		DW		2				; 磁头数 必须是2
		DD		0				; 不使用分区 必须是 0
		DD		2880			;重写 一次磁盘大小
		DB		0,0,0x29		; 固定写法
		DD		0xffffffff		; 卷标号
		DB		"HARIBOTEOS "	; 磁盘名称
		DB		"FAT12   "		; 磁盘格式名称
		RESB	18				; 空出 18个 字节

; 程序主体

entry:
		MOV		AX,0			; 初始化寄存器
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX

; 启动区 装载下一个块的内容

		MOV		AX,0x0820
		MOV		ES,AX
		MOV		CH,0			; 柱面0
		MOV		DH,0			; 磁头0
		MOV		CL,2			; 扇区2

ReadLoop:

		MOV SI, 0

retry:
		MOV		AH,0x02			; AH=0x02 : 读盘  BIOS 的 0x13中断
		MOV		AL,1			; 读取 一个扇区
		MOV		BX,0
		MOV		DL,0x00			; A驱动器
		INT		0x13
		JNC		next
		ADD		SI, 1			; 调用磁盘的BIOS
		CMP		SI, 5
		JAE		error
		MOV		AH, 0X00
		MOV		DL,0x00
		INT		0x13			;重置驱动器 			
		JMP		retry	;

; 一些处理函数

next:
	MOV AX, ES
	ADD AX, 0X0020
	MOV ES, AX
	ADD CL,1
	CMP CL, 18					; 读取柱面0 磁头02-18扇区
	JBE ReadLoop				;重复读取

	ADD DH, 1					; 读取磁头1 柱面018 个扇区
	MOV CL, 1
	CMP DH, 2					;如果 DH 小于2 就继续读取
	JB ReadLoop

	MOV DH, 0					;磁头0 柱面1 的第一个扇区 读取
	ADD CH, 1
	CMP CH , CYLS
	JB ReadLoop






fin:
		HLT						; 让CPU停止 等待指令
		JMP		fin				; 无限循环

error:
		MOV		SI,msg
putloop:
		MOV		AL,[SI]			;间接寻址
		ADD		SI,1			; SI 偏移到 下个地址
		CMP		AL,0			;因为 [SI]的结束 是0
		JE		fin
		MOV		AH,0x0e			; 显示一个文字
		MOV		BX,15			; 指定字符颜色
		INT		0x10			; 调用显卡的BIOS
		JMP		putloop			;循环
msg:
		DB		0x0a, 0x0a		; 输出两个换行
		DB		"load error"
		DB		0x0a			; 换行
		DB		0

		RESB	0x7dfe-$		; 填写0x00 直到7dfe

		DB		0x55, 0xaa      ;启动区 最后两个字节 必须是这种格式0x55AA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值