在8086中,in和out指令使用存储在AL或AX寄存器中的PIC端口地址,该地址进一步用于out指令。如果我们在in指令中不给予任何端口号,会发生什么情况?out指令是否仍然有效?如果是,那么如何选择PIC端口以及选择哪个端口?
in
out
chhqkbe11#
实际上,端口地址存储在dx中,而不是ax中。您要写入的数据将存储在ax或al中。in和out的工作方式与大多数其他操作不同,因为
dx
ax
al
out dx,al in al,dx
即使寄存器大小不匹配,也完全有效。这类似于mov al, byte ptr [bx],因为操作数使用寄存器作为访问内存的方式,而不是将其直接存储到寄存器本身。我从来没有使用过不指定端口的汇编程序,但是由于必须使用常量值或DX,如果只提供了一个操作数,那么想象一下有一个汇编程序使用DX并不会太夸张(有点像一些6502汇编器让你输入LSR A来在A寄存器上执行右移位,而其他汇编器只使用LSR就可以了。)选择哪个端口取决于你自己,你需要阅读相关外设的文档,以确定需要哪个端口号。记住,如果你的端口号大于255,你需要使用DX。否则,你可以将端口号作为常量。
mov al, byte ptr [bx]
DX
LSR A
A
LSR
1条答案
按热度按时间chhqkbe11#
实际上,端口地址存储在
dx
中,而不是ax
中。您要写入的数据将存储在ax
或al
中。in
和out
的工作方式与大多数其他操作不同,因为即使寄存器大小不匹配,也完全有效。这类似于
mov al, byte ptr [bx]
,因为操作数使用寄存器作为访问内存的方式,而不是将其直接存储到寄存器本身。我从来没有使用过不指定端口的汇编程序,但是由于必须使用常量值或
DX
,如果只提供了一个操作数,那么想象一下有一个汇编程序使用DX
并不会太夸张(有点像一些6502汇编器让你输入LSR A
来在A
寄存器上执行右移位,而其他汇编器只使用LSR
就可以了。)选择哪个端口取决于你自己,你需要阅读相关外设的文档,以确定需要哪个端口号。记住,如果你的端口号大于255,你需要使用
DX
。否则,你可以将端口号作为常量。