# 第8章 输入 输出
这一章中从以下几点讲述了80386的I/O特性:
+ I/O端口寻址方法(Methods of addressing I/O ports)
+ 引起I/O操作的指令(Instructions that cause I/O operations)
+ 当使用I/O指令和访问I/O端口时使用的保护规则(Protections as it applies to the use of I/O Instructions and I/O port addresses)
### 8.1.1 I/O 地址空间(I/O Address Space)
80386提供了独立的I/O地址空间,不同于物理内存空间,这些空间可以为16位设备端口来寻址。I/O地址空间由此2^16(64K)独立的可寻址8-位端口组成。任何两个连续的8-位端口可以当作一个16-位端口,4个连续的8-位端口可以当作一个32-位的端口。所以I/O地址空间总计64K个8-位端口,或者说32K个16-位端口,或者说16K个32-位端口。
程序可以以两种方式指定端口地址。通过使用立即数,程序可以指定:
+ 256个8-位端口,从0~255。
+ 128个16-位端口,从0,2,4,……,252,254。
+ 64个32-位端口,从0,4,8,……,248,252。
通过使用DX来指定:
+ 8-位端口,编号从0到65535
+ 16-位端口,编号从0,2,4,……,65532,65534
+ 32-位端口,编号从0,4,8,……,65528,65532
80386可以一次传送给指定地址的外设32、16、或8位数据。和在内存中的双字一样,32-位的端口地址应该可以被4整除,似便32-位数据可以在一次总线周期内传送完。16位的应该被2整除,8位的可以指定任何的地址。
IN和OUT指令在寄存器与端口间传送数据。INS和OUTS在内存和I/O地址空间之间传送整串的数据。
### 8.1.2 内存映射 I/O
I/O设备也可以放在主内存空间中。只要设备象内存一样的作出合适的反应,处理器并区别不出他们。
内存映射I/O指供了外加的编程伸缩性。任何访问内存的指令都可以用来访问位于内存空间的I/O设备。例如,MOV指令可以在寄存器和端口间传送数据。还有AND,OR,和TEST指令可以用来控制在外设内部的寄存器的位(见图8-1)。内存映射I/O可以使用任何寻址模式的指令(真接,间接,其址,索引,标量等)。
内存映射I/O和其它任何内存访问相同,在保护模式下有相同的保护的控制。参看第6章,关于内存保护。
- 第一章 80386介绍
- 1.1 该手册的组织结构
- 1.2 其他文献
- 第二章 编程基本模型
- 2.1 存储器组织和段
- 2.2 数据类型
- 2.3 寄存器
- 2.4 指令格式
- 2.5 操作数选择
- 2.6 中断和异常
- 第4章 系统寄存器
- 4.1 系统寄存器 (System Registers)
- 4.2 系统指令 (System Instructions)
- 第五章 内存管理
- 5.1 分段地址转换(Segment Translation)
- 5.2 分页地址转换(Page Translation)
- 5.3 混合分段和分页地址转换(Combining Segment and Page Translation)
- 第六章 内存管理
- 6.1 为什么要保护(Why Protection?)
- 6.2 80386保护机制概述(Overview of 80386 Protection Mechnaisms)
- 6.3 段级保护(Segment-Level Protection)
- 6.4 页级保护(Page-Level Protection)
- 6.5 混合分页和分段保护(Combining Page and Segment Protection)
- 第7章 多任务(Multitasking)
- 8.1 I/O 寻址(I/O Addressing)
- 7.1 任务状态段(Task State Segment)
- 7.3 任务寄存器(Task Register)
- 7.4 任务门描述符(Task Gate Descriptor)
- 7.5 任务切换(Task Switching)
- 7.6 任务链(Task Linking)
- 7.7 任务寻址空间(Task Address Space)
- 第8章 输入 输出
- 8.2 I/O 指令(I/O Instructions)
- 8.3 保护和I/O(Protection and I/O)
- 第9章 异常和中断(Exceptions and Interrupts)
- 9.1 识别中断(Identifying Interrupts)
- 9.2 允许和禁止中断(Enabling and Disabling Interrupts)
- 9.3 同时发生的中断和异常的优先级(Priority Among Simultaneous Interrupts and Exceptions)
- 9.4 中断描述符表(Interrupt Descriptor Table)
- 9.5 IDT 描述符(IDT Descriptors)
- 9.6 中断任务和中断子程序(Interrupt Tasks and Interrupt Procedures)
- 9.7 出错码(Error Code)
- 9.8 异常条件(Exception Conditions)
- 9.9 异常总结(Exception Summary)
- 9.10 出错码总结(Error Code Summary)
- 第10章 初始化(Initialization)
- 10.1 复位后处理器状态(Processor State After Reset)
- 10.2 实模式初始化(Software Initialization for Real-Address Mode)
- 10.3 切换到保护模式(Switching to Protected Mode)
- 10.4 保护模式初始化(Software Initialization for Protected Mode)
- 10.5 初始化示例
- 10.6 TLB测试
- 第十四章 80386实地址模式
- 14.1 物理地址构成
- 14.2 寄存器和指令
- 14.3 中断和异常处理
- 14.4 进入和离开实地址模式
- 14.6 实地址模式异常
- 14.7 与8086的不同
- 14.8 与80286实地址模式的不同