您的位置:首页 > 移动开发 > IOS开发

第17章 使用BIOS进行键盘输入和磁盘读写 笔记2

2011-05-18 00:47 537 查看
上次只实现了向软盘中写数据。今天要实现向软盘中读取数据。今天晚上回来后看了会儿小说,就开始调试程序了。我上次是使用Virtual PC 2007进行实验的,但是发现Virtual PC 2007有一点小问题。今天就使用的是bochs。调试许久,终于出来了。真高兴啊。实验代码如下面:

assume cs:code

data segment
dw 256 dup (1324h)
data ends

code segment
int7ch:
jmp short begin
table dw int7chRead,int7chWrite
begin:	push cx

cmp ah,1
ja sret
mov cl,ah
mov ch,0
add cx,cx
mov si,cx
mov cx,table[si+200h]
add cx,200h
call cx

pop cx
sret:	iret

int7chRead:
push dx
push cx

mov ax,dx
cmp ax,1439
ja	set0
mov dh,0
jmp short sRead
set0:	mov dh,1		;dh中保存磁头号
sub ax,1440
sRead:	mov cl,18
div cl
mov ch,al		;ch中保存磁道号
add ah,1
mov cl,ah		;cl中保存扇区号
mov dl,1		;dl中保存驱动器号,0代表软驱A,1代表软驱B
mov al,1		;操作1个扇区
mov ah,2		;读扇区
int 13h

pop cx
pop dx
ret

int7chWrite:
push dx
push cx

mov ax,dx
cmp ax,1439
ja	set1
mov dh,0
jmp short sWrite
set1:	mov dh,1		;dh中保存磁头号
sub ax,1440
sWrite:	mov cl,18
div cl
mov ch,al		;ch中保存磁道号
add ah,1
mov cl,ah		;cl中保存扇区号
mov dl,1		;dl中保存驱动器号,0代表软驱A,1代表软驱B
mov al,1		;操作1个扇区
mov ah,3		;写扇区
int 13h

pop cx
pop dx
ret
int7chend:
nop

start:	mov ax,cs
mov ds,ax
mov si,offset int7ch

mov ax,0
mov es,ax
mov di,200h

mov cx,offset int7chend - offset int7ch
cld
rep movsb		;拷贝中断例程到0000:0200处

mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0		;设置中断向量

mov ax,data
mov es,ax
mov bx,0
mov dx,17
mov ah,0
int 7ch

mov ax,4c00h
int 21h
code ends
end start


使用本程序可以向软盘中写数据,读数据。但是一次只能读写一个扇区,因为每次在调用 int 13h 中断例程时我总指定 al=1。嘿嘿,努力了这么长时间,终于调通了哈。真高兴。虽然现在已经深夜了,我的心情可是很兴奋呐!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: