8086系统IN / OUT快速提问

时间:2011-02-10 14:47:43

标签: assembly x86 x86-16

如何使用IN / OUT指令将数据加载/存储到地址大于2 ^ 16的外围。 当我使用IN / OUT指令时,让我们说OUT DX, AL,我知道没有使用DX的段寄存器,因此我只能访问前2 ^ 16个地址(因为DX长16位)。

我的一个设备位于地址18000h。我该怎么办?内存/ IO空间重叠(不使用M / IO引脚),所以可以说

MOV BX, 18000h
MOV [BX], AL

我对这类事情都很陌生,所以如果有人在这里,我真的很感谢来自旧的,核心的,asm程序员的任何帮助:) 感谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果您的系统是386或更高版本,您可以使用操作数大小覆盖前缀,这将导致“out edx,al”。您需要使用相同的前缀,也许还需要使用运算符大小覆盖前缀来加载edx。铝装有标准的8086 mnemomic -