Chinaunix首页 | 论坛 | 博客
  • 博客访问: 227268
  • 博文数量: 45
  • 博客积分: 1850
  • 博客等级: 上尉
  • 技术积分: 473
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-11 10:21
文章分类
文章存档

2006年(17)

2005年(28)

我的朋友

分类:

2005-08-16 09:25:34

入输出指令。外部设备通过I/O端口与处理器交换信息。输入指令IN将外设数据传送至CPU,而输出指令则将CPU数据传送至外设。8086中,只有这组指令能够实现与外设的信息交换,并且只能利用AL/AX寄存器与I/O端口通信。

1、输入指令IN
IN   AL,i8          ;字节输入:AL←I/O端口 i8
IN   Ax,i8          ;字输出: AL←I/O端口 i8,AH←I/O端口 i8+1
IN   AL,DX          ;字节输入:AL←I/O端口[DX]
IN   AX,DX          ;字输入:AL←I/O端口[DX],AH←I/O端口[DX+1]
2、输出指令OUT
OUT  i8,AL          ;字节输出:I/O端口 i8←AL
OUT  i8,AX          ;字输出:I/O端口 i8←AL,I/O端口 i8+1←AH
OUT  DX,AL          ;字节输出:I/O端口[DX]←AL
OUT  DX,AX          ;字输出:I/O端口[DX]←AL,I/O端口[DX+1]←AH
8086用于寻址外设端口的地址线为16位,可以分配的端口最多为2的16次方,共65536个(64k),端口号为0000H~FFFFH。每个端口用于传送外设的一个字节数据。寻址前256个端口时,输入输出指令可以用直接寻址,操作数i8即为端口号,其范围为00H~FFH;当寻址大于256的外设端口,只能使用DX寄存器间接寻址,其范围为0000H~FFFFH。输入输出指令还分成用AL进行的字节传送和用AX进行的字传送。实现字传送时,AL与i8或[DX]端口交换,AH与i8+1或[DX+1]端口交换。字传送实际上可以用两条字节传送实现。
对于计算机的中央处理单元cpu,只有输入IN/输出OUT指令可以从外设读取数据和向外设提供数据,由于外设种类繁多,其工作原理、数据格式、操作时序等各异,所以在处理器与外设之间还有一个协调两者数据传送的逻辑电路,称为输入输出(I/O)接口电路。处理器并不直接操纵外设,而是通过I/O接口控制外设。
I/O接口电路示意图如下:
i/o接口电路
I/O接口电路呈现给程序员的,是各种可编程寄存器。这些寄存器分为三类:
数据寄存器——它保存处理器与外设间交换的数据;
控制寄存器——处理器通过它对外设进行控制,也称为命令寄存器;
状态寄存器——外设的当前工作状态通过它向处理器提供;
在涉及外设操作的输入输出程序中,各种寄存器以I/O地址(端口)体现;对应的三类寄存器分别称为数据端口、控制端口和状态端口。所谓端口,因为程序员所见的I/O接口是一组寄存器,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称为I/O端口(PORT)。程序员需要理解外设占用哪些端口,各个端口交换什么信息;更进一步需要掌握I/O接口电路的工作原理。
输入输出指令是比BIOS更接近硬件的编程技术,它是程序员对外设的最直接控制,需要了解最内层的I/O控制和编成,这与具体的硬件接口相关。
对I/O接口芯片的编程应该属于汇编一个高级技术和重要的应用领域。因该专门学习。

阅读(1613) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~