上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
输入输出和中断
作者:未知 申领版权
2010年12月12日 共有 1941 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    第8章 输入输出和中断
    输入输出功能是计 算机的重要组成部分,是人—机交互功能的主要承担者。在早期的计算机系统中,通常把输入输出设备或功能作为次要的部分,而把CPU作为主要研究对象。但现 在随着输入输出设备的日益丰富、功能要求越来越复杂,输入输出部分在整个计算机系统中的地位也得到了进一步提高。
    本章先介绍了I/O的基本概念和I/O指令,再叙述了中断的概念及其工作过程,并列举出计算机系统中若干个常用的中断及其功能。
    8.1 输入输出的基本概念
    输入输出是一个完整应用程序的重要组成部分,是交互式应用程序不可缺少的组成部分。
    在用高级语言编程 时,程序员可直接用输入输出语句来完成键盘输入、屏幕显示或打印输出等需求,而无需关心这些输入输出语句是如何实现的,因为编译程序会自动把这些语句转换 成相应的输入输出指令。但如果用汇编语言编写程序的话,情况就不同了,因为汇编语言是与机器有关的程序设计语言,要编写出具有输入输出功能的代码段就必须 清楚CPU为输入输出提供了哪些指令,或计算机系统提供了哪些可直接使用的功能调用。
    8.1.1 I/O端口地址
    I/O端口是CPU与输入输出设备的交换数据的场所,通过I/O端口,处理机可以接受从输入设备输入的信息;也可向输出设备发送信息。在计算机系统中,为了区分各类不同的I/O端口,就用不同的数字给它们进行编号,这种对I/O端口的编号就称为I/O端口地址。按照
    每次可交换一个字节数据的端口称为字节端口,每次可交换一个字数据的端口称为字端口。
    在Intel公司的CPU家族中,I/O端口的地址空间可达64K,即可有65536个字节端口,或32768个字端口。这些地址不是内存单元地址的一部分,不能普通的访问内存指令来读取其信息,而要用专门的I/O指令才能访问它们。虽然CPU提供了很大的I/O地址空间,但目前大多数微机所用的端口地址都在0~3FFH范围之内,其所用的I/O地址空间只占整个I/O地址空间的很小部分。表8.1列举了几个重要的I/O端口地址。
    表8.1 几个重要的I/O端口地址
    

端口地址
    
端口名称
    
端口地址
    
端口名称
    
020H~023H
    
中断屏蔽寄存器
    
378H~37FH
    
并行口LPT2
    
040H~043H
    
时针/计数器
    
3B0H~3BBH
    
单色显示器端口
    
060H
    
键盘输入端口
    
3BCH~3BFH
    
并行口LPT1
    
061H
    
扬声器(0, 1位)
    
3C0H~3CFH
    
VGA/EGA
    
200H~20FH
    
游戏控制口
    
3D0H~3DFH
    
CGA
    
278H~27FH
    
并行口LPT3
    
3F0H~3F7H
    
磁盘控制器
    
2F8H~2FFH
    
串行口COM2
    
3F8H~3FFH
    
串行口COM1
    
计算机在启动时,BIOS程序(Basic Input/Output System)将检查计算机系统中有哪些端口地址。当发现有串行端口地址时,BIOS就把 该端口存放在以地址40:00H开始的数据区内;当发现有并行端口地址时,BIOS会把它 存入以地址40:08H开始的数据区内。
    每类端口有4个字的空间,对有二个串行口、二个并行口的计算机系统,其BIOS程序将得到如图8.1所示的部分数据表。
    图中03F8H、02F8H、0378H和0278H分别为COM1、COM2、LPT1和LPT2的端口地址。
    8.1.2 I/O指令
    由于I/O端口地址和内存单元地址是相互独立的,这些端口地址不能普通的访问内存指令来访问其信息,所以,在CPU的指令系统中就专门设置了I/O指令来存取I/O端口的信息。按功能分类来看,I/O指令应属于数据传送指令。
    1、输入指令IN
    输入指令IN的一般格式如下:
    IN  AL/AX, PortNo/DX
    该指令的作用是从端口中读入一个字节或字,并保存在寄存器AL或AX中。如果某输入设备的端口地址在0~255范围之内,那么,可在指令IN中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。
    
例如:
    
 
    
IN
    
AL, 60H
    
;从端口60H读入一个字节到AL中
    
IN
    
AX, 20H
    
;把端口20H、21H按“高高低低”组成的字读入AX
    
MOV
    
DX, 2F8H
    
IN
    
AL, DX
    
;从端口2F8H读入一个字节到AL中
    
IN
    
AX, DX
    
;把端口2F8H、2F9H按“高高低低”组成的字读入AX
    
2、输出指令OUT
    输出指令OUT的一般格式如下:
    OUT  PortNo/DX, AL/AX
    该指令的作用是把寄存器AL或AX的内容输出到指定端口。如果某输出设备的端口地址在0~255范围之内,那么,可在指令OUT中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。
    
例如:
    
 
    
OUT
    
61H, AL
    
;把AL的内容输出到端口61H中
    
OUT
    
20H, AX
    
;把AX的内容输出到端口20H、21H中
    
MOV
    
DX, 3C0H
    
OUT
    
DX, AL
    
;把AL的内容输出到端口3C0H中
    
OUT
    
DX, AX
    
;把AX的内容输出到端口3C0H、3C1H中
    
有关字符串的输入输出指令,请见5.2.11节中的介绍。
    8.2 中断
    在计算机系统中,引入中断的最初目的是为了提高系统的输入输出性能。随着计算机应用的发展,中断技术也应用到计算机系统的许多领域,如:多道程序、分时系统、实时处理、程序监视和跟踪等领域。
    8.2.1 中断的基本概念
    下面只简单介绍与汇编语言程序设计有关的中断知识,使本章的知识具有一定完整性。有关中断的详细介绍可参阅《计算机组成原理》课程中的相关章节。
    1、中断和中断源
    所谓中断就是 CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完后能自动恢复执行原先程序的过程。在此,称引起紧急事务的事件为中断源,称处理 紧急事务的程序为中断服务程序或中断处理程序。 计算机系统还根据紧急事务的紧急程度,把中断分为不同的优先级,并规定:高优先级的中断能暂停低优先级的中断服务程序的执行。
    计算机系统有上百种可以发出中断请求的中断源,但最常见的中断源是:外设的输入输出请求,如:键盘输入引起的中断,通信端口接受信息引起的中断等;还有一些计算机内部的异常事件,如:0作除数、奇偶校验错等。
    CPU在执行程序时,是否响应中断要取决于以下三个条件能否同时满足:
    (1)、有中断请求;
    (2)、允许CPU接受中断请求;
    (3)、一条指令执行完,下一条指令还没有开始执行。
    
条件(1)是响应中断的主体。除用指令INT所引起的软件中断之外,其它中断请求信号是随机产生的,程序员是无法预见的。
    程序员可用程序部分地控制条件(2)是否满足,即可用指令STI和CLI来允许或不允许CPU响应可屏蔽的外部中断。而对于不可屏蔽中断和内部中断,CPU一定会响应它们的,程序员是无控制权的。CPU一定会执行这些中断的中断服务程序。
    2、断向量表和中断服务程序
    中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址(偏移量和段地址)。在微机系统中,该向量表有256个元素(0~0FFH),每个元素占4个字节,总共1K字节,其在内存中的存储形式及其存储内容如图8.2所示。
    图8.2中的“中断偏移量”和“中断段地址”是指该中断服务程序入口单元的“偏移量”和“段地址”。由此不难看出:假如中断号为n,那么,在中断向量表中存储该中断处理程序的入口地址的单元地址为:4n。
    表8.2说明了前16个中断向量表中列举了部分常用的中断号。
    
 
    
    
表8.2 部分常用的中断号及其含义
    
中断号
    
含义
    
中断号
    
含义
    
0
    
除法出错
    
8
    
定时器
    
1
    
单步
    
9
    
键盘
    
2
    
非屏蔽中断
    
A
    
未用
    
3
    
断点
    
B
    
COM2
    
4
    
溢出
    
C
    
COM1
    
5
    
打印屏幕
    
D
    
硬盘(并行口)
    
6
    
未用
    
E
    
软盘
    
7
    
未用
    
F
    
打印机
    
 
    8.2.2 引起中断的指令
    中断处理程序基本上是系统程序员编写好的,是为操作系统或用户程序服务的。为了在应用程序中使用中断服务程序,程序员必须能够在程序中有目的地安排中断的发生。为此,指令系统提供了各种引起中断的指令。
    1、中断指令INT
    中断指令INT的一般格式如下:
    INT Imm
    其中:立即数Imm是一个0~0FFH范围内的整数。
    
指令执行的步骤:
    
 
    
◆、把标志寄存器压栈,清除标志位IF和TF;
    
◆、把代码段寄存器CS的内容压栈,并把中断服务程序入口地址的高字部分送CS;
    
◆、32位段,压32位IP。
    
在该指令执行完后,CPU将转去执行中断服务程序。由于有了指令INT,程序员就能为满足某种特殊的需要,在程序中有目的地安排中断的发生,也就是说,该中断不是随机产生的,而是完全受程序控制的。
    一般情况下,一个中断可有很多不同的功能,每个功能都有一个唯一的功能号,所以,在安排中断之前, 程序员还要决定需要该中断的哪个功能,中断的功能号都是由AH来确定的。有些中断还需要其它参数,常用中断的功能和参数如附录3所列。
    2、溢出指令INTO
    当标志位OF为1时,引起中断。该指令的格式如下:
    INTO
    该指令影响标志位:IF和TF。
    
    8.2.3 中断返回指令
    当一个中断服务程序执行完毕时,CPU将恢复被中断的现场,返回到引起中断的程序中。为了实现此项功能,指令系统提供了一条专用的中断返回指令。该指令的格式如下:
    IRET/IRETD
    
该指令执行的过程基本上是INT指令的逆过程,具体如下:
    
 
    
◆、从栈顶弹出内容送入IP;
    
◆、再从新栈顶弹出内容送入CS;
    
◆、再从新栈顶弹出内容送入标志寄存器;
    
对80386及其以后的CPU,指令IRETD从栈顶弹出32位内容送入EIP。
    
8.2.4 中断和子程序的比较
    中断和子程序调用之间有其相似和不同之处。它们的工作过程非常相似,即:暂停当前程序的执行,转而执行另一程序段,当该程序段执行完时,CPU都自动恢复原程序的执行。
    如图8.3所示。
    
 
    
    
 
    
它们的主要差异有:
    
◆、
    
子程序调用一定是程序员在编写源程序时事先安排好的,是可知的,而中断是由中断源根据自身的需要产生的,是不可预见的(用指令INT引起的中断除外);
    
◆、
    
子程序调用是用CALL指令来实现的,但没有调用中断的指令,只有发出中断请求的事件(指令INT是发出内部中断信号,而不要理解为调用中断服务程序);
    
◆、
    
子程序的返回指令是RET,而中断服务程序的返回指令是IRET/IRETD。
    
◆、
    
在通常情况下,子程序是由应用系统的开发者编写的,而中断服务程序是由系统软件设计者编写的。
    
 
    8.3. 中断功能的分类
    计算机系统有上百种中断,若按中断的性质来划分,则系统中的中断可分为:可屏蔽中断和不可屏蔽中断。对不可屏蔽中断,程序员不能控制它,系统肯定会立即响应的,而对于可屏蔽中断,汇编语言程序员可以通过指令CLI和STI来控制对它们的响应。
    
若按中断源来划分,则系统中的中断又可分为:硬件中断和软件中断。对于硬件中断,程序员不能控制它,它们基本上是随机产生的,而对于软件中断,汇编语言程序员可通过指令INT和INTO来有目的安排它们的。
    下面主要介绍汇编语言程序员能控制的软件中断的功能及其使用方法,常用的这类中断有:DOS功能调用(INT 21H)、BIOS中断、硬件和外设的中断等。
    图8.4给出了程序员可使用的各类中断之间的层次关系。
    
 
    
    
在用户程序中,若直接通过端口来操作硬件或外设,那么,其处理过程没有额外的多余工作,处理速度显然是最快的,但这样做,无疑使用户程序具有了很大的局限性。硬件环境的改变将直接影响程序的正常运行。
    若用户程序通过调用DOS功能来实现其所需功能,那么,应用程序与低层硬件相距较远,操作最终的对象需要经过中间环节,处理速度肯定受到一定的损失,但这种应用程序适应性强,应用范围广,对硬件的依赖性最小。
    由于BIOS介于DOS和具体硬件之间,所以,调用BIOS的功能是一个很好的折中方案。程序员可在以下三种情况下考虑使用BIOS的功能:
    1)、BIOS提供的功能,而DOS没有提供该功能的情况;
    2)、不能利用DOS功能调用的情况(可能因为某些具体应用的限制);
    3)、基于处理速度的考虑,需要绕过DOS层的情况。
    综上所述,可以归纳出如下结论:使用中断的层次越高,它与硬件设备相关程度就越低,处理速度也就越低,但用户程序的适用范围较广。反之也然。
    有了上面的结论,程序员可根据应用程序的要求、对硬件环境的熟悉程度等因素来选用不同层次的中断。
    

 

相关新闻

高考化学识记部分4
高考化学识记部分3
高考化学识记部分2
高考化学识记部分1
发现分子
重要离子的检验
《有机化学部分》知识归纳
几种重要有机物的检验
几种重要阳、阴离子的检验
启发式教学的理解

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》