IA32 architecture 学习笔记 (四)

IO端口 (Input / Output)

除了和外存(磁盘,光盘等)传输数据,IA32处理器还可以和 IO 端口 (I/O ports)传输数据。IO端口是构建在系统硬件上的电子电路,该电路能够对处理器的控制、数据和编址进行译码。IO端口和外围设备进行通信,可能是输入端口、输出端口或者双向端口。有的 IO端口用来传输数据(如:给设备寄存器发送数据),有的是用来控制外围设备(如:控制磁盘控制器的寄存器)。

IO端口编址(IO port addressing)

处理器允许程序(这里的程序是相对CPU的程序,例如 OS 等)通过以下两种方式来访问IO端口:

  • 通过 独立IO地址空间访问 (separate IO addressing space);
  • 通过 内存映射 IO 访问 (memory-mapped IO);
通过 IO地址空间 来访问 IO端口, 是利用了一组 IO指令 和 特殊的IO保护机制;通过 内存映射IO 来访问 IO端口,是使用了处理器提供的 MOV 和 string 指令 和 段 or 页 提供的保护机制。IO端口可以被映射,所以IO端口起来就像是 IO地址空间 或 物理内存地址空间(memory mapped IO)或两者兼而有之。

使用 IO地址空间 的一个好处就是,写IO端口操作的指令,一定在下一条开始执行之前完成。因此,对IO端口的写操作,会导致硬件在其他指令执行之前就处于一个新的状态。总之,通过 IO地址空间 来写IO端口,会在下一条指令之前,执行完并其执行结果作用到相关硬件上。


IO地址空间(IO Address space)

处理器的 IO地址空间 是和物理内存地址地址空间不同的单独的地址空间。IO地址空间 由 2^16(64K)个单独编址的 80bit IO端口组成,范围是 0~FFFFH。IO地址空间 中 0F8H~0FFH 被保留,而任何访问超出 FFFFH 的地址的操作结果,取决于具体的实现。
任意两个连续的 8-bit 端口可以当做一个 16-bit 端口,任意连续的四个 8-bit 端口可以当做一个 32-bit端口。通过这种方式,处理器可以和IO地址空间内的设备传输 8、16、32bit的的数据。跟内存中的 word 操作一样,16-bit端口可以对齐到偶数地址(0、2、4....)所以所有的16-bit端口使用一个单独的总线周期(bus circle)来传输数据。同理,32-bit端口对齐到4的倍数(0、4、8....)。处理器支持和不对齐的端口进行数据传输,但是这会带来严重的效率问题,因为需要
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值