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

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

2011-05-15 23:25 489 查看
P302 键盘输入将引发9号中断,BIOS提供了 int 9 中断例程。
P303 int 16h 中断例程的0号功能,进行如下的工作。
(1) 检测键盘缓冲区中是否有数据;
(2) 没有则继续做第1步;
(3) 读取缓冲区第一个字单元中的键盘输入;
(4) 将读取的扫描码送入ah,ASCII码送入al;
(5) 将已读取的键盘输入从缓冲区中删除。
BIOS的 int 9 中断例程和 int 16h 中断例程是一对相互配合的程序,int 9 中断例程向键盘缓冲区中写入,int 16h 中断例程从缓冲区中读出。它们写入和读出的实际不同,int 9 中断例程是在有键按下的时候想键盘缓冲区中写入数据;而 int 16h 中断例程是在应用程序对其进行调用的时候,将数据从键盘缓冲区中读出。
P310 实验17 编写包含多个功能子程序的中断例程
就这个程序,搞了好长时间,也还没有明白。现在只实现了写软盘的功能,而且还有限制。代码如下:

assume cs:code

data segment
dw 256 dup (1324h)
data ends

code segment
int7ch:	mov ax,dx
cmp ax,1439
ja	set
mov dh,0
jmp short s1
set:	mov dh,1		;dh中保存磁头号
s1:		sub ax,1440
mov cl,18
div cl
mov ch,al		;ch中保存磁道号
add ah,1
mov cl,ah		;cl中保存扇区号
mov dl,0		;dl中保存驱动器号,0代表软驱A
mov al,1		;操作1个扇区
mov ah,3		;写扇区
int 13h
iret
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,1440
int 7ch

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


我要写的是编号为1440的逻辑扇区。功能是向这个扇区中(512个字节)重复写入256个1324h。写到软盘中之后,使用hexedit查看如下图:



今天太晚了,明天再写好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐