一、应用和硬件
1、在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。Windows提供了通过应用来间接控制硬件的方法。利用操作系统提供的系统调用功能就可以实现对硬件的控制。
示例:应用通过操作系统间接控制硬件
Windows直接控制了作为硬件的显示器。但Windows本身也是软件,由此可见,Windows应该向CPU传递了某些指令,从而通过软件控制了硬件。
2、支撑硬件输入输出的 IN指令和 OUT 指令:IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中。OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。
示例:IN指令和 OUT指令的语法
3、端口号和端口:
计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器。而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。
I/O是 Input/Output 的缩写。显示器、键盘等外围设备都有各自专用的 I/O控制器。I/O控制器中有用于临时保存输入输出数据的内存。这个内存就是端口。端口(port)的字面意思是“港口”。由于端口就像是在计算机主机和外围设备之间进行货物(数据)装卸的港口,所以因此得名。I/O控制器内部的内存,也称为寄存器。虽然都是寄存器,但它和 CPU 内部的寄存器在功能上是不同的。CPU 内部的寄存器是用来进行数据运算处理的,而I/O寄存器则主要是用来临时存储数据的。
在实现I/O控制器功能的IC中,会有多个端口。由于计算机中连接着很多外围设备,所以就会有多个I/O控制器,当然也会有多个端口。一个I/O控制器既可以控制一个外围设备,也可以控制多个外围
设备。各端口之间通过端口号进行区分。端口号也称为I/O地址。IN 指令和 OUT指令在端口号指定的端口和 CPU之间进行数据的输入输出。
示例:
(1)以端口为桥梁来实现CPU和外围设备之间的数据传递
I/O装置,有的直接附带在计算机主机的主板(用来放置CPU的基板)上,有的则是各自独立的扩张板卡。键盘、鼠标、打印机等常用的I/O,一般都在主板上,而显示高速图形的显示器及网卡等特殊的I/O,通常是独立的扩张板卡。
(2)通过控制面板查看软盘驱动器的端口号
二、编写测试用的输入输出程序
利用IN/OUT指令来控制蜂鸣器的程序示例
(1)部分是控制蜂鸣器发音的部分。
(2)部分是一个重复100万次的空循环,主要是为了在蜂鸣器开始发音和停止发音之间稍微加上一些时间间隔。
(3)部分是用来控制蜂鸣器发音停止的部分。
三、中断处理
1、在“I/O范围”下面有一个“IRQ”项目,对应的值是0x00000006(06)。IRQ(Interrupt Request)是中断请求的意思。IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。
2、中断控制器:假如同时有多个外围设备进行中断请求的话,CPU也会为难。为此,我们可以在I/O控制器和 CPU 中间加入名为中断控制器的 IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给CPU。
示例:中断控制器的功能
3、中断请求的顺序
在主程序运行的过程中,大部分的外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据。虽然不利用中断也可以从外围设备输入数据。