Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当我们将数据从ax移动到端口地址时会发生什么_C++_Assembly_Io_X86_Port - Fatal编程技术网

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

C++ 当我们将数据从ax移动到端口地址时会发生什么,c++,assembly,io,x86,port,C++,Assembly,Io,X86,Port,为了将频率加载到8254芯片的计数器寄存器中,我们将频率加载到ax中,然后将al和ah逐个移动到端口#42h: 好的,为什么它会工作?我认为有一个覆盖,端口42h的最后一个值将是AH=>1f,因此永远不会在端口地址中保留b4(它们的低位!)! 所以我们将释放频率 为什么我们不能使用这个: out 42h,AX 如果端口地址空间小于AX,那么为什么第一行代码工作以及如何工作?输出端口,AX将尝试写入16位端口。8254不提供16位端口,只提供8位端口 我还没有验证,但我相信如果对端口42进行16

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

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

为什么我们不能使用这个:

out 42h,AX

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

输出端口,AX将尝试写入16位端口。8254不提供16位端口,只提供8位端口

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


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

输出端口,ax将尝试写入16位端口。8254不提供16位端口,只提供8位端口

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


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

为什么您的手指会跳到关闭按钮上?它累了吗?看一下,问问自己为什么它不接受16位数据。不难理解!为什么你的手指会跳到关闭按钮上?它累了吗?看一下,问问自己为什么它不接受16位数据。不难理解!你是说如果我们使用“输出端口,ax”,端口42有al,端口43有ah?通过使用4行代码,我们不会设置PIT?是的,如果你尝试一次16位写入,我相信al会被写入到42h,ah会被写入到43h。我不太确定你在问什么。所以通过4行代码,我们会设置PIT?不是42小时?我的意思是,我们将这样做:复制端口42,al,然后立即复制端口42,啊。。。。那么接下来会发生什么呢?我认为频率会崩溃,丢失它的低位。端口42h(在PC上)映射到PIT的一个寄存器。您不能将AH直接写入端口:根本没有相关的指令。可用的选项是AL和AX(要写入AX,您必须以DX指定端口号,而不是立即数)。您的意思是,如果我们使用“out port,AX”,端口42具有AL,端口43具有ah?通过使用4行代码,我们不会设置PIT?是的,如果你尝试一次16位写入,我相信al会被写入到42h,ah会被写入到43h。我不太确定你在问什么。所以通过4行代码,我们会设置PIT?不是42小时?我的意思是,我们将这样做:复制端口42,al,然后立即复制端口42,啊。。。。那么接下来会发生什么呢?我认为频率会崩溃,丢失它的低位。端口42h(在PC上)映射到PIT的一个寄存器。您不能将AH直接写入端口:根本没有相关的指令。可用的选项是AL和AX(要写入AX,必须以DX指定端口号,而不是立即数)。
out 42h,AX