`
897371388
  • 浏览: 530208 次
文章分类
社区版块
存档分类
最新评论

读王爽老师汇编语言笔记---int指令、端口、外中断以及键盘的输入

 
阅读更多
2013-7-15 18:42:05
中断信息可以来自cpu的内部和外部。当cpu内部有需要处理的事情发生的时候,将产生需要马上处理的
中断信息,引发中断过程。我们将介绍另外一种重要的内中断,用int指令引发中断。

int指令
int指令的指令格式:int n,n为中断类型码,它的功能是引发中断过程。
cpu执行int n 指令,相当于引发一个n号中断过程,执行过程如下:
(1)、取中断类型码n
(2)、标志寄存器入栈,IF=0,TF=0.
(3)、CS、IP入栈。
(4)、(IP) = (n*4), (CS)=(n*4+2)
从此处转去执行n号中断的中断处理程序。
可以在程序中使用int指令调用任何一个中断的中断处理程序。
例如 cpu执行int 0指令时,将引发中断过程,执行0号中断处理程序的功能是显示"Divide overflow",
然后返回到系统。可见,int指令的最终功能和call指令相似,都是调用一段程序。
一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用,我们在
编程的时候,可以用int指令调用这些子程序。当然,也可以自己编写一些中断处理程序供别人使用。我
们称中断处理程序称为中断例程。

BIOS和DOS中断
在系统板的ROM中存放着一套程序,称为BIOS(基本输入和输出系统),BIOS中主要包含以下几个部分内容:
(1)、硬件系统的检测和初始化程序;
(2)、外部中断和内部中断的中断例程
(3)、用于对硬件设备进行I/O操作的中断例程
(4)、其他和硬件系统相关的中断例程

操作系统DOS也提供了中断例程,从操作系统的角度来看,DOS的中断例程就是操作系统向程序员提供的
编程资源BIOS和DOS在所提供的中断例程中包含了许多子程序,这些子程序实现了程序员在编程时候经常需要用到
的功能,程序员在编程的时候,可以用int指令直接调用BIOS和DOS提供的中断例程,开完成某些工作。

BIOS和DOS中断例程的安装过程
BISO和DOS提供的中断例程如何安装到内存中的:
1、开机后,cpu一加电,初始化(CS)=0FFFFH, (IP) = 0,自动从FFFF:0单元开始执行程序。FFFF:0处
有一条转跳指令,cpu执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序
2、初始化程序将建立BIOS所支持的中断向量,即将BISO提供的中断例程的入口地址登记到中断向量表中
。注意,对于BIOS所提供的中断例程,只需将入口地址登记到中断向量表中即可,因为它们有固化到ROM
中的程序,一直在内存中存在。
3、硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导,然后在计算机交给由操作系统控制
4、DOS启动完成后,除了完成其他工作外,还将塔提供的中断例程装入内存,并建立相应的中断向量。


端口
各种存储器都和cpu的地址线、数据线、控制线相连。cpu在操控它们的时候,把它们当作内存来对待,
把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器,我们称其为内存地址空间。
在pc机系统中,和cpu通过总线相连的芯片除各种存储器外,还有以下三种芯片:
1 各个接口卡(网卡, 显卡)上的接口芯片,它们控制接口卡进行工作
2 主板上的接口芯片,cpu通过它们对部分外设进行访问
3 其他芯片,用来存储相关系统信息,或进行相关的输入输出处理
在这些芯片中,都有一组可以由cpu读写的寄存器,这些寄存器,它们在物理上可能处于不同的芯片,但
是它们在以上两点上是相同的:
1 都是和cpu的总线相连,当然这种连接是通过它们所在的芯片进行的。
2 cpu 对它们进行读或写的时候都通过控制线向它们所在的芯片发出端口读写命令
可见,从cpu的角度,将这些寄存器都当作端口,对它们进行统一编址,从而建立了一个统一的端口地址
空间,每一个端口的地址空间都有一个地址。
cpu可以直接读写三个地方的数据
(1)、cpu内部的寄存器
(2)、内存单元
(3)、端口


端口的读写
在访问端口的时候,cpu通过端口地址来定位端口,因为端口所在的芯片和cpu通过总线相连,所以端口
地址和内存地址一样,通过地址总线来传送,在pc系统中,cpu最多可以定位64K个不同的端口,则端口的范围为0~65535
对端口的读写不能用mov,push,pop等内存读写指令。端口的读写指令只有两条:in 和out,分别用于
从端口读取数据和往端口写入数据

cpu执行内存访问指令和端口访问指令的时候,总线上的信息:
1 访问内存:
mov ax,dx:[8] ;假设执行前(ds) = 0
执行时与总线相关操作:
(1)、cpu通过地址线将地址信息8发出
(2)、cpu通过控制总线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据
(3)、存储器将8号单元的数据通过数据线送入cpu
2 访问端口:
in al,60h ; 从60h号端口读入一个字节
(在in 和out 指令中, 只能使用al或ax来存放从端口中读入的数据或要发送到端口中的数据)
执行时与总线相关操作
(1)、cpu通过地址线将地址信息60h发出
(2)、cpu通过控制线发出端口读命令,选中存储芯片,并通知它,将要从中读取数据
(3)、端口所在的芯片将60h端口中的数据通过数据线送入cpu中


CMOS RAM芯片
pc机中,有一个CMOS RAM芯片,一般简称为CMOS。此芯片的特征如下:
(1) 包含一个实时钟和一个128个存储单元的RAM存储器
(2) 该芯片靠电池供电
(3) 128个字节的RAM中,内部实时钟占0~0dh单元保存时间信息, 其余大部分单元用于保存系统配置信
息,供系统启动时BIOS程序读取,BIOS也提供了相关的程序,使我们在开机的时候配置CMOS RAM中的系
统信息。
(4) 该芯片内部有两个端口,端口地址为70h和71h,通过这两个端口来读写CMOS RAM

(5) 70h为地址端口,存放要访问的CMOS RAM单元的地址;71h为数据端口,存放从选定的CMOS RAM单元

中读取的数据,或要写入到其中的数据。可见CMOS RAM的读写是分两步完成的

比如 读 CMOS RAM的2号单元:
将2送入端口70h
从71h读出2号单元的内容


shl和shr指令:shl和shr是逻辑移位指令,
shl是逻辑左移指令,它的功能:
(1) 将一个寄存器或内存单元中的数据向左移位
(2) 将最后移出的移位写入CF中
(3) 最低位用0 补充
mov al, 01001000b
shl al, 1 ;将 al中数据左移一位
执行后 (al) = 10010000b, CF=0


shr是逻辑右移指令,它的功能:
(1) 将一个寄存器或内存单元中的数据向右移位
(2) 将最后移出的移位写入CF中
(3) 最高位用0 补充


外中断
cpu除了有运算能力外,还要有I/O(Input/Output)功能
外设的输入不直接送入内存和cpu 中,而是送入相关的接口芯片的端口中;cpu向外设的输出也不是直接
送入外设,而是先送入端口中,再由相关芯片送到外设。cpu还可以向外设输出控制命令,而这些控制命
令也是先送到相关芯片的端口中,然后由芯片送到外设实施控制。
所以cpu是通过端口和外部设备进行联系

外中断信息
外设随时都可能发生需要cpu即使处理的事情,cpu是如何即使得知并进行处理的呢?
cpu提供中断机制来满足这样需要。当cpu内部有需要处理的事情发生的时候,将产生中断信息,引发中


断过程。这种中断信息来源cpu内部
当cpu外部有需要处理的事情发生的时候,如外设的输入到达,相关芯片将想cpu发出响应的中断信息。

cpu在执行完当前指令后,可以检测到发送过来的中断信息,引发中断过程,处理外设的输入。
在PC系统中,外中断源有两类:
(1) 可屏蔽中断
可屏蔽中断是cpu可以不响应的外中断。cpu是否响应可屏蔽中断,要看标志寄存器IF位的设置
当cpu检测到可屏蔽中断信息时,
如果IF = 1,则cpu 执行完当前指令后响应中断,引发中断过程;
如果IF = 0,则cpu 不响应可屏蔽中断
(2)不可屏蔽中断

不可屏蔽中断是cpu必须响应的外中断。打不过cpu 检测到不可屏蔽中断时,执行完当前指令后,

立即响应,引发中断过程。几乎所有的由外设引发的外中断,都是可屏蔽中断,当外设有需要处理的事件发生时,相关芯片向cpu发

出可屏蔽中断。不可屏蔽中断是在系统中必须处理的紧急情况发生时,用来通知cpu 的中断信息。


pc机键盘的处理过程
1 键盘输入
键盘上的每一个键相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫面,按下
一个键时,开关接通,该芯片就产生一个扫描码,扫描码说明了按下的键在键盘上的位置。扫描码被送
入主板上的相关接口芯片的寄存器中,该寄存器的端口地址为60h。
松开一个键时,也产生一个扫描码,扫描码说明了松开的键在键盘的位置。松开时产生的扫面码也被送
入60h端口中。
一般情况下按一下一个键产生的扫描码称为通码,松开一个键产生的扫描码称为断码。
通常扫描码为一个字节,通码的第7位为0,断码的第7位为1 即:
断码 = 通码 + 80H

2 引发9号中断
键盘的输入到达60H端口时,相关的芯片就会向cpu发出中断类型吗为9的可屏蔽中断信息。cpu检测到该
中断信息后,如果IF=1,则相应中断,转去执行int 9中断例程

3 执行int 9例程
BIOS提供了int 9中断例程,用来进行基本的键盘输入处理
(1) 读出60H端口的扫描码
(2) 如果是字符键的扫描码,将该扫描码和对应的字符码(ASCII码)送入内存中的BIOS键盘缓冲区;
如果是控制键的扫描码,则将其转变成状态字节写入内存中存储状态字节单元。
(3) 对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息
键盘输入过程:
键盘产生扫描码-> 扫描码送入60h端口 -> 引发9号中断 -> cpu执行int 9中断例程处理键盘输入





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics