关于通过端口读写数据的问题
也是王爽书中的一个小题
1.读取CMOS中2号单元的内容
2.向2号单元写入0
第一个是这样写
mov al,2
out 70h,al
in al,71h
问题:是不是确定要访问的单元后,该单元中的内容就直接送至71h端口了呢?也就是
in al,71h执行之前,端口71h的内容就已经是2号单元中的内容了呢??
第二个是这样写
mov al,2
out 70h,al
mov al,0
out 71h,al
in al,71h
问题:2个小题中都有 "in al,71h "这一句,但一个是CMOS--> CPU,一个是CPU--> CMOS(没理解错吧?@@)这个方向是怎么控制的呢??是不是说前面如果有了给端口赋值的语句,后面紧接的in语句就表示 "端口--> 其内部传送呢 "??
[解决办法]
in AL, 71h 只是读 71h 端口的数据到 AL 寄存器, 是 cmos -> cpu.
第二组代码, 那两个指令的主要目的可能是延时, 以备 cmos 准备好数据到 71h 端口. 在这个延时的要求上, 不是很明确的, 一般是通过一两个无用的指令来实现.
[解决办法]
也是王爽书中的一个小题
1.读取CMOS中2号单元的内容
2.向2号单元写入0
第一个是这样写
mov al,2
out 70h,al
in al,71h
问题:是不是确定要访问的单元后,该单元中的内容就直接送至71h端口了呢?也就是
in al,71h执行之前,端口71h的内容就已经是2号单元中的内容了呢??
答:可能有两种情况。out 70h,al执行后选通了02存储单元,但是in al,71h读数据时是直接读取的02 rom内存单元的内容,还是选通rom单元时自动将该字节内容送至端口,尚且不清楚,应该说都有可能。这是硬件内部的事情,我们可以不去管他,怎样理解都可以。
第二个是这样写
mov al,2
out 70h,al
mov al,0
out 71h,al
in al,71h
问题:2个小题中都有 "in al,71h "这一句,但一个是CMOS--> CPU,一个是CPU--> CMOS(没理解错吧?@@)这个方向是怎么控制的呢??是不是说前面如果有了给端口赋值的语句,后面紧接的in语句就表示 "端口--> 其内部传送呢 "??
答:理解错了。 "in al,71h "就是CMOS--> CPU。“out 71h,al”是CPU--> CMOS。将0存入rom的02单元。接下来in al,71h读取02单元的内容。
程序1和程序2的区别在于:程序1是直接读。程序2是先写再读,目的是验证读出的数据是否正确。