汇编之输入输出指令


输入输出指令

在8086中,所有的I/O端口和CPU之间的通信都由IN和OUT完成。
CPU只能用累加器(AL或AX)接收或发送信息。
也就是说,8086中,CPU对外设的操作只能通过IN和OUT这两条专门的端口读写指令来实现。在IN和OUT指令中出现的“数”只能是地址。
IN和OUT实际上是纯传数指令,可以传字节也可以传字。
IN和OUT都是对CPU而言的
IN是外设给CPU传数,OUT是CPU给外设传数。

IN和OUT都不影响标识位。

in输入指令

汇编之输入输出指令
外设地址有16位的也有8位的,要根据地址长短选择使用不同的指令。
port为8位地址,DX可指定16位地址。这里的地址说的就是外设的地址。
IN指令的接收传过来的数的位置是固定的,就是AX或AL。
长指令短指令的长短指的是指令在内存中的长度。

注意传送的是字还是字节是由指令前半部分的AX或AL决定的!
而地址的长度反映在指令的后半部分,看是直接用8位端口地址还是用DX中存储的地址

应用实例

IN AL,21H;表示从21H端口读取一字节数据到AL
IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AH

MOV DX,379H
IN AL,DX ;从端口379H读取1字节到AL

out输出指令

汇编之输入输出指令

应用实例

OUT 21H,AL;将AL的值写入21H端口
OUT 21H,AX;将AX的值写入端口地址21H开始的连续两个字节(port[21H]=AL,port[22h]=AH)
OUT 5,AL;从AL输出一个字节到端口5

MOV DX,378H
OUT DX,AX ;将AH和AL分别写入端口379H和378H

综合应用

汇编之输入输出指令

把端口28H和29H读到的数据经过AX送到内存
DATA_WORD是一个标号,指向数据段中偏移地址为DATA_WORD的区域。
(没有特别说明则默认在数据段)