【30天自制操作系统】day03:读写磁盘

软盘

  • 80个柱面,2个磁头,18个扇区
  • 每个扇区 512 字节,共 1440 KB

读磁盘汇编

读取 10 个柱面到 0x0820 内存位置

	;读取磁盘
		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			;读盘指令号
		MOV		AL,1			;1 个扇区
		MOV		BX,0			;ES:BX 为缓冲地址,即 0x8200
		MOV		DL,0x00			;A 驱动器
		INT		0x13			;调用磁盘 BIOS
		JNC		next			;jump if not carry 没错跳到 fin
		ADD		SI,1
		CMP		SI,5
		JAE		error			;jump if above or equal >5 跳转
		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			;读 18 个扇区
		JBE		readloop
		MOV		CL,1
		ADD		DH,1
		CMP		DH,2			;读 2 个磁头
		JB		readloop
		MOV		DH,0
		ADD		CH,1
		CMP		CH,CYLS			;读 10 个柱面
		JB		readloop
		
		MOV		[0x0ff0],CH		;将读取到的柱面数量写入内存地址 0x0ff0
		JMP		0xc200

error:
		MOV		SI,msg

  

posted @ 2019-10-06 11:00  闪客sun  阅读(908)  评论(1编辑  收藏  举报