zoukankan      html  css  js  c++  java
  • 【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
    

      

  • 相关阅读:
    检查使用的端口
    time is always agains us
    检查使用的端口
    dreque问题一例
    查看重定向的输出
    安装VSS时,Um.dat may be corrupt
    修改网卡ip
    redis install on ubuntu/debian
    上火了
    学这么多技术是为什么
  • 原文地址:https://www.cnblogs.com/flashsun/p/11626743.html
Copyright © 2011-2022 走看看