⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gethddparamm.asm

📁 获取指定物理硬盘的参数 入口: DL 指定物理硬盘的盘号 出口: NC 操作完成, CX 柱面数, DH 磁头数, DL 每道扇区数, EAX 最大扇区号 CY 硬盘出错或者硬盘不存在
💻 ASM
字号:
; 获取指定物理硬盘的参数
; 入口:   DL 指定物理硬盘的盘号
; 出口:   NC 操作完成, CX 柱面数, DH 磁头数, DL 每道扇区数, EAX 最大扇区号
;         CY 硬盘出错或者硬盘不存在
GET_HD_PARA     PROC  NEAR
		PUSHAD
		MOV   SI,DX
		MOV   AH,41H           		;测试BIOS是否支持扩展INT13H
		MOV   BP,SP
		MOV   BX,55AAH
		MOV   DL,80H
		INT   13H              		;调用磁盘服务中断
		CMP   BX,0AA55H
		SETZ  AL               		;返回标志字节正确则置1
		AND   AL,CL            		;支持扩展INT13H(LBA方式)则CL位0有效
		MOV   DX,SI            		;盘符
		MOV   ENHANCED,AL      		;支持扩展INT13H则置1
		MOV   AH,08H
		INT   13H              		;获取物理硬盘的参数
		JC    SHORT GET_HD_ERR 		;硬盘不存在
		MOV   AL,CL
		INC   DH
		AND   AL,3FH           		;每道扇区数
		XCHG  CL,CH
		MOV   AH,DH            		;磁头总数
		SHR   CH,06H           		;柱面数的高2位
		MOV   [BP].REG_DX,AX   		;当前硬盘的磁头数和每道扇区数
		INC   CX
		MUL   DH               		;每柱面扇区数
		MOV   [BP].REG_CX,CX   		;当前硬盘的柱面数
		MOV   DI,AX
		MUL   CX
		SHL   EDX,10H          		;计算硬盘的最大扇区号
		MOV   DX,AX
		DEC   EDX              		;从0号开始
		CMP   EDX,03FCH*00FFH*003FH-01H ;去掉备用柱面
		MOV   [BP].REG_EAX,EDX 		;最大扇区号
		JB    SHORT GET_HD_RET 		;未超出BIOS极限,最大扇区号有效
		CMP   ENHANCED,00H
		JZ    SHORT GET_HD_RET 		;不支持扩展INT13H的LBA方式
		MOV   DX,SI            		;盘符
		MOV   SI,OFFSET BUFFER1
		MOV   AH,48H
		MOV   WORD PTR [SI],001AH
		INT   13H              		;取硬盘参数
		JC    SHORT GET_HD_RET 		;出错
		MOV   EAX,[SI+10H]
		DEC   EAX              		;LBA方式返回的最大扇区号
		MOV   [BP].REG_EAX,EAX 		;最大扇区号
		INC   EAX
		PUSH  EAX
		POP   AX
		POP   DX
		DIV   DI               		;总扇区数除以每柱面扇区数
		MOV   [BP].REG_CX,AX   		;得柱面数
GET_HD_RET:     CLC
GET_HD_ERR:     POPAD
		RET
GET_HD_PARA     ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -