如何使用 IN/OUT 指令将数据加载/存储到地址大于 2 16的外围设备。
当我使用 IN/OUT 指令时,比如说OUT DX, AL
,我知道 DX 的段寄存器没有被使用,所以我只能访问前 2个 16地址(因为 DX 是 16 位宽)。
我的一台设备在地址上18000h
。我怎样才能达到它?内存/IO 空间重叠(未使用 M/IO 引脚),所以可以这样说
MOV BX, 18000h
MOV [BX], AL
你不能用IN or OUT
指令!
x86 处理器支持包含多达 65,536 个 8 位 I/O 端口的 I/O 地址空间。
来自英特尔数据表:
处理器允许应用程序以两种方式之一访问 I/O 端口:
- 通过单独的 I/O 地址空间
- 通过内存映射 I/O
通过 I/O 地址空间访问 I/O 端口是通过一组 I/O 指令和一种特殊的 I/O 保护机制来处理的。通过内存映射 I/O 访问 I/O 端口由处理器通用移动和字符串指令处理,并通过分段或分页提供保护。可以映射 I/O 端口,以便它们出现在 I/O 地址空间或物理内存地址空间(内存映射 I/O)或两者中。