BIOS INT 13H

int 13h
Examples:读取0面0道1扇区至0: 200
mov ax,0
mov es,ax
mov bx,200h


mov al,1==>要写入的扇区数
mov ch,0==>磁道号
mov cl,1===>扇区号
mov dl,0==>软驱A
mov dh,0==>0号磁头,软盘0面


mov ah,2===>int 13h功能号,写扇区
int 13h


入口参数:
ah=2   int 13h的功能号(2表示读扇区, 3表示写扇区)
al=要读取的扇区数/要写入的扇区数
ch=磁道号
cl=扇区号
dh=磁头号(对于软盘即为面号,因为一个面用一个磁头来进行读写)
dl=驱动器号: 软驱从0开始:  ==> 软驱A:0  软驱B:1   
            硬驱从80h开始: ===> 硬盘C:80h    硬盘D: 81h ....

es:bx   指向接收从扇区读入数据的内存区

返回参数:
操作成功:   ah=0   al=读入的扇区数
操作失败:   ah=出错代码


=================================
Example:
将0:200中的内容写入0面0道1扇区:
mov ax,0
mov es,ax
mov bx,200h


mov al,1==>要写入的扇区数
mov ch,0==>磁道号
mov cl,1===>扇区号
mov dl,0==>软驱A
mov dh,0==>0号磁头,软盘0面


mov ah,3===>int 13h功能号,写扇区
int 13h

入口参数:
ah=3   int 13h的功能号(2表示读扇区, 3表示写扇区)
al=要读取的扇区数/要写入的扇区数
ch=磁道号
cl=扇区号
dh=磁头号(对于软盘即为面号,因为一个面用一个磁头来进行读写)
dl=驱动器号: 软驱从0开始:  ==> 软驱A:0  软驱B:1   
            硬驱从80h开始: ===> 硬盘C:80h    硬盘D: 81h ....
es:bx   指向将写入扇区的数据的内存区




返回参数:
操作成功:   ah=0   al=写入的扇区数
操作失败:   ah=出错代码
======================================
Example:   将当前屏幕的内容保存在磁盘上
分析:   1屏内容占4000B,需要8个扇区,我们用0面0道的1-8扇区存储显存中的内容.
25行*80列*2B(1B:ASCII, 1B:Attribute)=4000B
显存地址:
[A0000, AFFFF]:   VGA,EGA显示缓冲区
[B0000, B7FFF]:   单色显示缓冲区
[B8000, BFFFF]:   CGA显示缓冲区


assume   cs:code
code segment
start:   
       mov   ax,0b800h
       mov   es,ax
       mov   bx,0

mov   al,8===>8 sectors
       mov   ch,0===>Track 0
       mov   cl,1====>扇区号
       mov   dl,0====>软驱A
       mov   dh,0====>Head 0
       mov   ah,3=====>3号功能,写扇区
       int      13h
       mov      ax,4c00
       int 21h
code   ends
end    start

最佳答案
只能在DOS下用,windows下有保护。

BIOS中断INT 0x13中,
ah=0x02,即为读磁盘扇区到内存,利用这二号服务即可读入setup模块。
[b]说明:
al=需要读出的扇区数;    
ch=磁道号的低八位;
cl=开始扇区(位0—5),磁道号高二位(位6—7)
dh=磁头号
dl=驱动器号(若是硬盘则要置位7)
es:dx—>指向数据缓冲区
若出错则CF示志置位

程序:
……
load_setup:
mov dx,#0x0000       !驱动器0,磁头0;
mov cx,#0x0002       !扇区2,磁道0;
mov bx,#0x0200       !此时es已置为0x9000,则指向地址0x9200;
mov ax,#0x0200+SETUPLEN  !置为服务二,读入SETUPLEN=4个扇区;
int 0x13               !中断13;
jnc ok_load_setup      !判断是否成功;
mov dx,#0x0000         !未成功,复位磁盘;
mov ax,#0x0000          
int 0x13
j load_setup           !继续读;
ok_load_setup:
……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值