没有合适的资源?快使用搜索试试~ 我知道了~
硬盘读写中断
4星 · 超过85%的资源 需积分: 13 10 下载量 51 浏览量
2011-11-23
20:17:49
上传
评论
收藏 13KB TXT 举报
温馨提示
试读
14页
在dos实模式下对磁盘进行读写教程!这是一个很容易上手的教程,适合对MBR(maskter boot record)硬盘主引导记录研究的技术人士
资源推荐
资源详情
资源评论
使用BIOS 扩展 Int 13H 中断对硬盘进行读写
2009-08-20 20:09
要把操作系统等代码装载到内存中,就得读写硬盘。现在硬盘都很大了,所以就用扩展的INT 13H 来读写硬盘吧。
下面使用NASM汇编语言、ALINK 链接器进行编译链接。在虚拟机的实模式DOS中测试。
汇编程序:A.asm
segment _TEXT;代码段
..start: ;程序入口点
mov ax,_DATA
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop
call CheckInt13H ;调用该函数 检验扩展 13H 功能是否存在
call ExInt13H ;这个是进行读写功能的函数
;在DOS中结束的系统调用
programend:
mov ax,0x4c00
int 0x21
CheckInt13H: ;这个是检验扩展 13H 功能是否存在的函数。
mov ah,0x41; 功能号是 41H
mov bx,55aah; 入口参数之一
mov dl,81H; 第二个参数表示要测试的 驱动器, 80H 是第一块硬盘,则81H是第二块……
2009-08-20 20:09
要把操作系统等代码装载到内存中,就得读写硬盘。现在硬盘都很大了,所以就用扩展的INT 13H 来读写硬盘吧。
下面使用NASM汇编语言、ALINK 链接器进行编译链接。在虚拟机的实模式DOS中测试。
汇编程序:A.asm
segment _TEXT;代码段
..start: ;程序入口点
mov ax,_DATA
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop
call CheckInt13H ;调用该函数 检验扩展 13H 功能是否存在
call ExInt13H ;这个是进行读写功能的函数
;在DOS中结束的系统调用
programend:
mov ax,0x4c00
int 0x21
CheckInt13H: ;这个是检验扩展 13H 功能是否存在的函数。
mov ah,0x41; 功能号是 41H
mov bx,55aah; 入口参数之一
mov dl,81H; 第二个参数表示要测试的 驱动器, 80H 是第一块硬盘,则81H是第二块……
int 13H;
cmp bx,0xAA55; 如果存在扩展 13H 功能,则bx==AA55H
jnz NotSupport; ;检测结果是不支持,跳到下面显示不支持的信息。
push SupportEx13hMsg; 检测结果是支持,显示支持的信息。^_^
call display
add sp,2
ret
NotSupport:
push NotSupportEx13hMsg
call display
add sp,2
ret
ExInt13H:; 这个函数是对硬盘进行读(ah=42H)或写(ah=43H)的操作
;下面是填写地址包
mov byte [PacketSize],10h; 地址数据包的大小,规定是10h,也可能有其他版本
mov byte [Reserved],0; 这个是保留位=0
mov word [BlockCount],1; 要传输的数据块数量(扇区数).这里测试1个扇区
mov word [BufferOff], buf; 缓冲区的偏移值 2B
mov word [BufferSeg],seg buf; 缓冲区的段:2B
mov dword [BlockNum],00H; 磁盘起始绝对块地址(扇区) 8B,但这里只赋一部分,其余为0。读或写0扇区
mov dword [BlockNum+4],00H;
mov ah,0x43; 操作模式,42H 是读,43H 是写
mov al,0; 在写操作时有意义: 0 为无写校验,1为有
mov dl,81H; 驱动器 80H 是第一块硬盘
mov bx,seg DiskAddressPacket; 地址数据包的段值
push ds
mov ds,bx ;
cmp bx,0xAA55; 如果存在扩展 13H 功能,则bx==AA55H
jnz NotSupport; ;检测结果是不支持,跳到下面显示不支持的信息。
push SupportEx13hMsg; 检测结果是支持,显示支持的信息。^_^
call display
add sp,2
ret
NotSupport:
push NotSupportEx13hMsg
call display
add sp,2
ret
ExInt13H:; 这个函数是对硬盘进行读(ah=42H)或写(ah=43H)的操作
;下面是填写地址包
mov byte [PacketSize],10h; 地址数据包的大小,规定是10h,也可能有其他版本
mov byte [Reserved],0; 这个是保留位=0
mov word [BlockCount],1; 要传输的数据块数量(扇区数).这里测试1个扇区
mov word [BufferOff], buf; 缓冲区的偏移值 2B
mov word [BufferSeg],seg buf; 缓冲区的段:2B
mov dword [BlockNum],00H; 磁盘起始绝对块地址(扇区) 8B,但这里只赋一部分,其余为0。读或写0扇区
mov dword [BlockNum+4],00H;
mov ah,0x43; 操作模式,42H 是读,43H 是写
mov al,0; 在写操作时有意义: 0 为无写校验,1为有
mov dl,81H; 驱动器 80H 是第一块硬盘
mov bx,seg DiskAddressPacket; 地址数据包的段值
push ds
mov ds,bx ;
剩余13页未读,继续阅读
资源评论
- u0109666622013-09-28最近在研究MBR,资料很有用
- skiluo2014-01-12资料不错,值得推荐下
janes71
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功