《汇编语言》第十七章 使用BIOS进行键盘输入和磁盘读写

键盘输入是最基本的输入,程序和数据通常需要长期存储在磁盘,BIOS为这两种外设的I/O提供了最基本的中断例程

17.1 int 9中断例程对键盘输入的处理

键盘输入将引发9号中断,BIOS提供了int 9中断例程,CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在指定空间(键盘缓冲区或状态字节)中

一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中,键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ASCII码

在这里插入图片描述
在这里插入图片描述

17.2 使用int 16h中断例程读取键盘缓冲区

BIOS提供了int 16h中断例程供程序员调用,int 16h中断例程中包含的一个最重要的功能是从键盘缓冲区读取一个键盘输入,该功能的编号是0

mov ah,0
int 16h
这两个指令从键盘缓冲区中读取一个键盘输入
并将其从缓冲区中删除
结果:(ah)=扫描码,(al)=ASCII码

int 16h中断例程的0号功能进行的工作:
1,检测键盘缓冲区是否有数据
2,没有则继续做第一步
3,读取缓冲区第一个字单元中的键盘输入
4,将读取的扫描码送入ah,ASCII码送入al
5,将已读取的键盘输入从缓冲区中删除

BIOS的 int 9中断例程和 int 16中断例程是一对相互配合的程序,int 9中断例程向键盘缓冲区写入,int 16h中断例程从缓冲区中读出

它们写入和读出的时机不同,int 9中断例程是在有按键按下时向键盘缓冲区中写入数据,而int 16h中断例程是在应用程序对其进行调用时,将数据从缓冲区中取出

17.3 字符串的输入

用户通过键盘输入的通常不仅仅是单个字符而是字符串,最基本的字符串输入程序,需要满足:
1,在输入的同时显示这个字符串
2,一般在输入回车后,字符串输入结束
3,能删除已经输入的字符

在字符串输入的过程中,字符的输入和输出是按照栈的访问规则进行的,即先进后出,这样就可以用栈的方式来管理字符串的存储空间,字符串的存储空间实际上是一个字符栈,字符栈中的所有字符,从栈底到栈顶组成一个字符串

17.4 使用int 13h中断例程对磁盘进行读写

以3.5英寸软盘为例,3.5英寸软盘分为上下两面,每面80个磁道,每个磁道又分为18个扇区,每个扇区大小为512个字节

磁盘的实际访问由磁盘控制器进行,可以通过磁盘控制器来访问磁盘,只能以扇区为单位对磁盘进行读写,在读写扇区时,要给出面号,磁道号和扇区号,面号和磁道号从0开始,扇区号从1开始

BIOS提供的访问磁盘的中断例程为 int 13h,读取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
mov dh,0
mov ah,2

int 13h
 

入口参数:
(ah) = int 13h的功能号,2表示读扇区
(al) = 读取的扇区数
(ch) = 磁道号
(cl) = 扇区号
(dh) = 磁头号 对于软盘即面号,一个面用一个磁头读写
(dl) = 驱动器号

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值