计算机人机交互需要暂时中断当前程序,处理交互信息再继续执行
一般直接用dos的int 21h功能或bios功能控制,不许io指令
外部设备通过IO接口部件与cpu相连,io接口部件应有三种寄存器,数据,状态和控制寄存器,把这些寄存器称为端口(port)
用端口地址识别端口,80x86微机中端口与存储器地址完全分开, 独立编址
端口号为00h~ffh时直接用in/out写入读出,端口号大于ffh时,即超出8位二进制时,需用dx寄存器间接寻址
i/o的数据传送控制方式
无条件传送:外设的数据传送可以随时进行不需要cpu查询外设的状态后再决定时,可以直接用in、out指令实现传输,外设必须处于准备就绪的状态,否则会传输失败
例
扬声器:61h端口d1位和定时器2的out引脚作为一个与门的2个输入端,与门的输出端经放大器连接扬声器。有两种方法使扬声器发声,即与门的2个输入端其中一个作为控制端,设置为1(高电平),让另一个输入端交替出现1和0,可以使扬声器发声。如让61h端口的d1位按合适的频率交替出现1和0,可以使扬声器发声
code segment
assume cs:code
sound proc far
f=9999h
time=9999h
start:
push ds
mov ax,0
push ax
mov cx,f //延时初值,控制脉冲宽度
mov dx,time //音长初值,控制脉冲个数
in al,61h //读入61h
and al,11111100b //保持高6位不变
trig:
xor al,2 //d1位取反
out 61h,al //d1位交替出现1和0,送61h端口
mov cx,f //延时初值
delay:
loop delay //延时控制,加大脉冲宽度
dec dx //脉冲计数
jne trig //控制音长
ret
sound endp
code ends
end start