首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

x86汇编---in/out指令

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为通用寄存器。但实际上芯片设计时,很多指令能操作的寄存器是有限制范围的。

多读官方文档手册
返回列表