分类:
2005-08-16 09:25:34
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端口(PORT)。程序员需要理解外设占用哪些端口,各个端口交换什么信息;更进一步需要掌握I/O接口电路的工作原理。
输入输出指令是比BIOS更接近硬件的编程技术,它是程序员对外设的最直接控制,需要了解最内层的I/O控制和编成,这与具体的硬件接口相关。
对I/O接口芯片的编程应该属于汇编一个高级技术和重要的应用领域。因该专门学习。