当我们将数据从 ax 移动到端口地址时会发生什么

What will we happened when we move data from ax into a port address

本文关键字:地址 什么 数据 我们将 ax 移动      更新时间:2023-10-16

为了将频率加载到8254芯片的计数器寄存器中,我们将频率加载到ax中,然后将Al和ah逐个移动到端口#42h中:

    mov ax,1fb4h
    out 42h,al
    mov al,Ah
    out 42h,AL

好的,为什么它有效?我认为有一个覆盖,端口 42h 的最后一个值将是 AH =>1f ,所以永远不会 b4(它们较低的位)将保留在端口地址中!所以我们将失去频率...

为什么我们不能使用它:

out 42h,AX

如果端口地址空间小于AX,那么为什么第一行代码有效以及如何工作?

out port,ax将尝试写入 16 位端口。8254 不提供 16 位端口 - 仅提供 8 位端口。

我还没有验证,但我相信如果你对端口 42 进行 16 位写入,低字节将转到端口 42,高字节将转到端口 43。不过,您真的不希望这样,因为端口 43 是 PIT 命令/模式寄存器。

至于它为什么/如何工作:PIT内部有一个16位寄存器,但只提供一个8位端口来访问它。执行第一次写入时,PIT 会暂时锁定它。当您进行第二次写入时,PIT 也会锁存该锁存器,然后将 16 位从锁存器写入寄存器。