文章目录
- 前言
- 一、 端口
- 1.1 端口的 读写
- 1.2 CMOS ARM 芯片
- 1.3 逻辑移位指令
- 1.4 外中断信息
- 结语
前言
点赞再看,养成习惯!
一、 端口
我们之前曾经讲过,计算机中的各种存储器都是和CPU的地址线,数据线 ,控制线相连,CPU在操作存储器时,通过硬件结构的差异来区分所读到的内容是指令亦或是数据等。而一个完整的计算机系统中,CPU要做的事情不单单的是通过总线控制存储器这么简单,它还提供了其他的三种芯片来完成工作:
- 各种接口卡(如网卡,显卡,声卡等)上面的接口芯片,用来控制接口卡进行工作。
- 主板上的接口芯片,CPU通过它们对部分外设进行访问。
- 其他芯片,用来存储相关的系统信息或进行相关的输入输出处理。
而我们上述所提到的芯片中都有一组可以由CPU代为读写的寄存器,这些寄存器虽然在物理空间上处于不同的芯片中,但是他们却具有两点相同特性:
- 都和CPU的总线相连,当然这种连接是通过他们所在的芯片进行的。
- CPU对他们进行读写操作时都是通过总线向其所在芯片发出命令。
而为了方便CPU对这些芯片进行管理,我们可以将它们进行统一编址,从而建立起一个统一的寻址模式,将每一个芯片都在CPU 寻址表中映射一个地址。而这个地址我们就可以叫做端口地址 ,对应的这些芯片上的寄存器就是端口 。
1.1 端口的 读写
在访问端口的时候,CPU通过端口地址来定位端口,而我们刚刚讲到过,CPU通过总线与端口相连,所以端口地址和内存地址一样,都是通过地址总线进行传送。正常情况下,一个PC系统中CPU可以定位64KB个不同的端口,因此端口地址通常 范围就是0 - 65535
。
这里还要提一下,针对于外部芯片的端口读写,并不能使用mov,push等指令,针对其对写的指令只有特定的两条:in
,out
。
比如我们想要向20h位置的端口读入一条数据只需要写in al,20h
即可。
1.2 CMOS ARM 芯片
为了下面内容的举例,我们先讲一个比较常见的CMOS RAM
外设芯片,通过对其进行读写来体验下端口的访问细节。什么是CMOS RAM
芯片?他其实就是位于计算机系统中的一个存储芯片,其具有:
- 一个实时时钟和一个具有128个存储单元构成的RAM存储器
- 靠电池供电,因此PC机断电后不会丢失数据
- 128个字节的RAM中,内部实时时钟占用 0 - 0dh单元来保存时间信息,其余大部分用来保存系统配置信息以供系统启动时被BIOS程序读取,BIOS也提供了相关的程序使我们可以在开机的时候配置
CMOS RAM
中的系统信息 - 该芯片由两个端口,其端口地址分别是
70h
和71h
,可以通过这两个端口读写芯片 -
70h
为地址端口,存放要访问CMOS RAM
芯片的单元地址 -
71h
为数据端口,存放从CMOS RAM
中读取的数据或写入其中的数据
根据上述特性我们可以推断如果我们要读取CMOS RAM
的2号单元需要进行两步:
- 将2送入
70h
端口 - 从端口
71h
读出2号单元的内容
我们写代码实现下:
assume cs:code
code segment
main :
mov al,70h
mov dx,2
out dx,al
mov al,71h
mov dx,0
in al,dx
code ends
end main
1.3 逻辑移位指令
为了后面的学习,我们需要简单的了解下两个逻辑移位指令:shl
和shr
。
先来讲shl
,它的功能很简单,就是将寄存器中的数据向左位移n位,并将最后移出的一位写入CF中。比如指令:mov al,00010001b
, shl al,1
它的执行流程就是将al中的数据串向左移位一位,即00010001
变为00100010
,此时移出的0
赋予CF。与之相对的shr
是相反的右移,其处理原理相同,最后移出位也被CF保存接收。
1.4 外中断信息
在计算机系统中,外中断源一共分为两种:可屏蔽中断 和不可屏蔽中断 。 可屏蔽中断是指CPU可以不响应的外中断。当然这里要提下,CPU是否需要相应当前中断是通过FLAG寄存器中的IF位进行判断,若IF = 1 则需要CPU在执行完当前指令后立刻相应中断,若IF = 0 则CPU可不响应中断。还有就是基本所有由外设引起的中断都是可屏蔽中断。
结语
今天的内容就到此结束了,有疑问的小伙伴欢迎评论区留言或者私信博主,博主会在第一时间为你解答。