0

如何使用 IN/OUT 指令将数据加载/存储到地址大于 2 16的外围设备。

当我使用 IN/OUT 指令时,比如说OUT DX, AL,我知道 DX 的段寄存器没有被使用,所以我只能访问前 2个 16地址(因为 DX 是 16 位宽)。

我的一台设备在地址上18000h。我怎样才能达到它?内存/IO 空间重叠(未使用 M/IO 引脚),所以可以这样说

MOV BX, 18000h
MOV [BX], AL
4

1 回答 1

4

你不能用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)或两者中。

于 2011-02-10T16:42:40.103 回答