第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)、一条指令执行完,下一条指令还没有开始执行。
(2)、允许CPU接受中断请求;
(3)、一条指令执行完,下一条指令还没有开始执行。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论