我正在反汇编 16 位 DOS 可执行文件,并查看以下三个指令:
mov dx,0x3ce
mov ax,0xff08
out dx,ax
我知道它将值写入0xff08I/O port 0x3ce。我还知道该端口0x3ce是 IBM EGA 卡上的“图形 1 和 2 地址”寄存器。问题是,根据手册,这个端口应该取一个字节值,而不是一个字。
我猜正在发生的是,这个词0xff08被视为两个不同的字节,其中一个字节在指定的寄存器中结束,另一个字节进入相邻的寄存器。或者可能有问题的字节被丢弃了?无论哪种方式,这都是一种猜测,因为我似乎无法找到有关此特定行为的太多信息。
对于 I/O 地址空间流向哪个方向,或者字的小端存储如何发挥作用,我没有很好的直观感觉。执行此代码段后,哪些端口获得了哪些字节?