8086汇编 端口 以及外部中断

家住魔仙堡 提交于 2019-11-30 22:19:05

在PC机系统中,和CPU通过总线连接的芯片除了各种存储器外,还有以下3种芯片:

1,各种接口卡(网卡,显卡)上的接口芯片

2,主板上的接口芯片,CPU通过访问他们对部分外设进行访问

3,其他芯片,用来储存相关的系统信息

这些芯片中,都是一组可以由CPU读写的寄存器。这些芯片上的寄存器就是端口。

从CPU角度来看,将这些寄存器(三组芯片中的)都当做端口,对它们进行统一编址,从而建立了一个统一的端口地址空间,每个端口在空间中都有一个地址。

在PC中,端口地址范围为0~65535,可以最多定义64K个不同的端口。

CPU可以直接读写三个地方上的数据:

CPU内部的寄存器、内存单元、端口

 

 

由于端口是一个独立的存在,他们有他们的端口地址空间,所以对端口的访问,我们不能还是通过mov这样的指令了,我们通过 in , out 指令。比如:

in al, 60h; 就是我们从60h这个端口读取一个字节到al寄存器中去。

注意:只能使用al,或者ax从储存从端口获取的内容。

 

 

shl , shr 指令:

移位,进位的那位储存在CF中,补位为0

 

 

现在考虑一个问题,比如我们通过键盘输入一个字符进入PC,那么CPU是如何知道我们输入了的呢?

这里就是中断起作用了,CPU在每执行完一个指令后,会检查IF标志位,如果是1,则表明了有一个外部中断来了,然后cpu开始处理外部中断了,这和前面讲的处理内部中断一样,这也为什么前面讲的要将IF清0了。

我们总结下,当一个外设接收到一个数据了,它将这个数据存放在一个寄存器里,也就是端口中,然后外设发送中断请求,CPU判断中断源,并进行相应的中断处理。最后我们再中断处理程序中,去端口获取这个数据,然后处理,最后返回。

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!