汇编语言-使用BIOS进行键盘输入和磁盘读写

int9中断例程对键盘输入的处理

??键盘输入将引发9号中断,BIOS提供了int9中断例程。CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。
??一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中。键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。

使用int16h中断例程读取键盘缓冲区

??BIOS提供了int 16h中断例程供程序员调用。int 16h中断例程中包含的一个最重要的功能是从键盘缓冲区中读取一个键盘输入,该功能的编号为0。下面的指令从键盘缓冲区中读取一个键盘输入,并且将其从缓冲区中删除。

mov ah,0
int 16h
结果: (ah)=扫描码,(al)=ASCII码

int 16h中断例程检测键盘缓冲区,发现缓冲区空,则循环等待,直到缓冲区中有数据。

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

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

字符串的输入

最简单的字符串输入程序,需要具备下面的功能:

  • 在输入的同时需要显示这个字符串;
  • 一般在输入回车符后,字符串输入结束;
  • 能够删除已经输入的字符。

以栈的方式处理字符串的输入,需要的功能有入栈、出栈、显示。

应用int13h中断例程对磁盘进行读写

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

??则:2面80磁道18扇区*512字节=1440KB~=1.44MB

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

??如果我们通过直接控制磁盘控制器来访问磁盘,则需要涉及许多硬件细节。BIOS提供了对扇区进行读写的中断例程,这些中断例程完成了许多复杂的和硬件相关的工作。我们可以通过调用BIOS中断例程来访问磁盘。

??BIOS提供的访问磁盘的中断例程为int 13h。

原文地址:https://www.cnblogs.com/chengmf/p/12506845.html

时间: 2024-10-01 00:47:44

汇编语言-使用BIOS进行键盘输入和磁盘读写的相关文章

使用BIOS进行键盘输入和磁盘读写(学习汇编)

1.键盘输入将引发9号中断,BIOS提供了int 9中断例程.CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中.一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中.键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ASCII码. 2.下面,我们通过下面几个键: A.B.C.D.E.shift_A.A 的输入过程,简要地看一下int 9中断例程对键盘输入的

[自制简单操作系统] 5、杂七杂八(高分辨率和键盘输入)

前言: >_<" 这几天正在研究一个好玩的,准备写<软硬结合第三篇——科班的还是可以修电脑的>,可是当前遇到个技术难点——WHDI,所以操作系统这里就慢了好大一节啦!但是以操作系统多任务的思路,感觉还是把这个优先级并不是太低的进程拿出来做一下吧!毕竟技术难点有时候需要灵感的哈~(不过有大神知道VGA接口的通信原理吗?求给个好一点的链接看看!).回到正题上来,这次学的东西有点杂,主要就是高分辨率和键盘输入相关~对于前者和汇编及硬件联系较多(具体可以查VBE Video El

VB模拟键盘输入的N种方法

VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程

virt-manager 解决kvm 不能键盘输入的问题

virt-manager  解决kvm 不能键盘输入的问题

Java键盘输入的几种方式,大爱Scanner

1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 import java.util.Scanner; 5 6 public class EnterTest { 7 8 public static void main(String[] args) { //主方法 9 CharTest(); //调用System.in方法 10 ReadTest()

通过VNC连接远程服务器,然后登陆服务器上的虚拟机,出现键盘输入问题的解决方法

前几天由于要在服务器上装一个虚拟机,然后就选择了vmware workstation,装好之后,进入虚拟机中的centOS系统,发现键盘上的Cpas Lock键不起作用,按下之后还是输入小写,而且按住shift + ,不会出现 ‘<' 而是出现 ‘>',这怎么可以,这完全没法在虚拟机中使用呀. 因为我是通过VNC连接到服务器,原先一直认为是vmware软件的问题,然后就换vmware的版本,结果还是不行:后来我就直接试了下直接在服务器上链接一个屏幕,然后使用vmware,发现完全没有这个问题:

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

Java中从键盘输入的三种方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 CharTest(); //调用System.in方法 ReadTest(); //调用ReadTest方法 Scan

键盘输入

运行时后面跟上参数:java hello a m m 使用Scanner获取键盘输入: Scanner sc = new Scanner(System.in) hasNextxxx():是否还有下一个输入项,xxx代表Int,Long等基础类型,如果只是判断是否包含下一个字符串,直接用hasNext() nextXXX():获取下一个输入项 useDelimiter("\n"):设置分隔符,默认使用空白作为分隔符(空格,回车,tab) boolean hasNextLine():是否还