Board logo

标题: x86汇编---in/out指令 [打印本页]

作者: look_w    时间: 2019-1-18 19:54     标题: x86汇编---in/out指令

8086为了区分访问内存和外设,硬件上有一个专门的引脚M/IO,指令集中则为访问外设单独提供了in/out指令。

《x86汇编---VGA显示》中为了关闭光标显示,有如下代码,这两行代码读取外设CRTC数据寄存器中的数据。

其中0x3D5为外设端口地址

为什么要按照上述书写呢?如下几种修改办法是否可以呢?

1、是否可以直接用in al,0x3D5读外设?

2、dx为通用寄存器,这里外设地址是否可以用其它通用寄存器,比如cx存储?

3、读入的数据必须存放到al中吗?cl可以吗?

结论是不行!为什么呢?

其实intel官方文档中已经描述的非常的清楚了,就如下6种情况(一定要多读官方文档)可以很清晰看到:

1、直接用外设端口地址的话,只支持1个字节,即imm8;---------- 修改1不行,0x3D5为2个字节

2、如果用通用寄存器存地址,只支持DX;--------- 修改2不行

3、读入的数据只能放到AL、AX、EAX;--------- 修改3不行



多说两句:

通用寄存器并不通用,我们常说AX,BX,CX,DX为通用寄存器。但实际上芯片设计时,很多指令能操作的寄存器是有限制范围的。

多读官方文档手册




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0