1. 那些不能被CPU统一编址的芯片:
1) 可以被CPU统一编制的芯片都有一个共同的特点,那就是基本都是存储器(ROM、RAM、显存等)、其上的数据有且仅有CPU有权限读写、速度跟得上CPU,比如硬盘虽然也是存储器、也只能被CPU读写,但是速度太慢容量太大而无法被CPU统一编址到一个逻辑内存空间中;
2) 很多外设(一些I/O设备)的芯片,其上的数据不仅可以被CPU修改,同时速度跟不上CPU,比如像网卡、键盘接口、鼠标接口等芯片,因此CPU不能将其统一编址;
3) 但这些芯片都有一组可以由CPU读写的寄存器用来和CPU进行通信,并且这些寄存器和CPU通过总线相连,而这些寄存器就是所谓的端口了,而CPU可以对这些芯片的端口进行统一编址从而形成一个统一的端口地址空间;
4) 端口地址空间概念上和内存地址空间相似,只不过内存地址空间可以看做一个较大的可供CPU读写的存储器,而端口地址空间可以看做一个较小(容量没内存那么大)可以和外设进行数据交换的缓冲区;
5) 在PC系统中最多可以定位64KB个不同的端口,因此端口的地址范围为0~65535,因此端口号是一个16位值;
2. 使用in和out指令对端口进行读写:
1) 和端口通信的数据只能用al和ax,8位数据用al,16位数据用ax,如果用其它寄存器会报错;
2) in用于从端口读数据,使用格式是:in al/ax, 端口号
3) out用于向端口写数据,使用格式时:out 端口号, al/ax<