I/O接口包括接口电路和I/O端口,计算机通过读写I/O端口读写外设。I/O芯片可以理解为另一类内存芯片,内存通过内存地址访问,I/O芯片通过I/O端口号访问。
对PC机而言,I/O端口号范围是0~216~1,内存地址范围是0~220~1。在64K以内的地址,如果用相同的读写指令,无法区分读写的是内存还是端口,因此用不同的读写指令。
读写内存都是mov指令,如
读 mov ax,[100H] 写 mov [100H],al
读端口号用in 指令, 写用out指令,如
in al, 10H (从端口10H读一个字节到al寄存器)
in ax, 10H (从端口10H读一个字到ax寄存器,实际上等价于in al, 10H ; in ah, 11H)
写端口用out指令,如
out 10H, al
out 10H, ax (ah写入11H,al写如10H)
对单片机而言,I/O端口号和内存共存于地址空间中(端口号0~N,内存地址从N+1开始),因此可以都用mov指令
端口的直接寻址:端口号直接用数字表示,比如上面的例子都是直接寻址,只有端口号处于0和255之间才能直接寻址,256及以上只能用间接寻址。
端口的间接寻址:先把端口号存入DX寄存器, 再进行读写。
Mov dx, 256; in al, dx
所有端口都可以用间接寻址。
注意:1、读写内存和端口时不能两个操作数都是立即数,比如
mov [200], 300;
mov [200],[300];
out 20, 10 都是错误的
必须其中一个操作数要用寄存器代替。
2、对端口进行读写的数据只能存到al或ax中;间接寻址时端口号只能存到DX中
8086的输入输出结构 来自淘豆网m.daumloan.com转载请标明出处.