如果处理器没有输入输出的特殊指令怎么办
What if the processor does not have special instructions for input and output
我是装配新手。这让我很困扰:如果处理器没有输入输出的特殊指令怎么办?
x86 的 in
和 out
指令或多或少是 mov
指令的特例:
你可能说8088CPU运行的M//IO
引脚在“最小”模式下实际上是引脚/A20
。在这种情况下,指令 mov al, [si]
用于从地址范围 0-0FFFFFh 中读取一个字节,而 in al, dx
用于从地址范围 100000h-10FFFFh 中读取一个字节。
mov [si], al
和out dx, al
也是如此。
因此8088可以访问地址范围0-10FFFFh。而一个 80386 可以访问和寻址范围 0-10000FFFFh.
然而,实际上,您不会谈论“地址范围 100000h-10FFFFh”,而是谈论“I/O 地址范围”。但是原理是一样的。
CPU没有in
或out
指令(ARM、PowerPC、MIPS、TriCore、V850、m68k、680x、6502 ...)只有一个地址范围。
连接到这样一个 CPU 的所有设备(键盘、UART、鼠标...)在这个地址范围内都有一个地址。
对于这种情况,使用等于 x86 指令 mov al, [si]
的指令而不是 in al, dx
指令(此类 CPU 上不存在)来访问这些设备。
我是装配新手。这让我很困扰:如果处理器没有输入输出的特殊指令怎么办?
x86 的 in
和 out
指令或多或少是 mov
指令的特例:
你可能说8088CPU运行的M//IO
引脚在“最小”模式下实际上是引脚/A20
。在这种情况下,指令 mov al, [si]
用于从地址范围 0-0FFFFFh 中读取一个字节,而 in al, dx
用于从地址范围 100000h-10FFFFh 中读取一个字节。
mov [si], al
和out dx, al
也是如此。
因此8088可以访问地址范围0-10FFFFh。而一个 80386 可以访问和寻址范围 0-10000FFFFh.
然而,实际上,您不会谈论“地址范围 100000h-10FFFFh”,而是谈论“I/O 地址范围”。但是原理是一样的。
CPU没有in
或out
指令(ARM、PowerPC、MIPS、TriCore、V850、m68k、680x、6502 ...)只有一个地址范围。
连接到这样一个 CPU 的所有设备(键盘、UART、鼠标...)在这个地址范围内都有一个地址。
对于这种情况,使用等于 x86 指令 mov al, [si]
的指令而不是 in al, dx
指令(此类 CPU 上不存在)来访问这些设备。