文章目录

  • 前言
  • 一、 端口
  • 1.1 端口的 读写
  • 1.2 CMOS ARM 芯片
  • 1.3 逻辑移位指令
  • 1.4 外中断信息
  • 结语



前言

点赞再看,养成习惯!


一、 端口

我们之前曾经讲过,计算机中的各种存储器都是和CPU的地址线数据线控制线相连,CPU在操作存储器时,通过硬件结构的差异来区分所读到的内容是指令亦或是数据等。而一个完整的计算机系统中,CPU要做的事情不单单的是通过总线控制存储器这么简单,它还提供了其他的三种芯片来完成工作:

  1. 各种接口卡(如网卡,显卡,声卡等)上面的接口芯片,用来控制接口卡进行工作。
  2. 主板上的接口芯片,CPU通过它们对部分外设进行访问。
  3. 其他芯片,用来存储相关的系统信息或进行相关的输入输出处理。

而我们上述所提到的芯片中都有一组可以由CPU代为读写的寄存器,这些寄存器虽然在物理空间上处于不同的芯片中,但是他们却具有两点相同特性:

  1. 都和CPU的总线相连,当然这种连接是通过他们所在的芯片进行的。
  2. 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芯片?他其实就是位于计算机系统中的一个存储芯片,其具有:

  1. 一个实时时钟和一个具有128个存储单元构成的RAM存储器
  2. 靠电池供电,因此PC机断电后不会丢失数据
  3. 128个字节的RAM中,内部实时时钟占用 0 - 0dh单元来保存时间信息,其余大部分用来保存系统配置信息以供系统启动时被BIOS程序读取,BIOS也提供了相关的程序使我们可以在开机的时候配置CMOS RAM 中的系统信息
  4. 该芯片由两个端口,其端口地址分别是70h71h ,可以通过这两个端口读写芯片
  5. 70h为地址端口,存放要访问CMOS RAM芯片的单元地址
  6. 71h为数据端口,存放从CMOS RAM中读取的数据或写入其中的数据

根据上述特性我们可以推断如果我们要读取CMOS RAM的2号单元需要进行两步:

  1. 将2送入70h端口
  2. 从端口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 逻辑移位指令

为了后面的学习,我们需要简单的了解下两个逻辑移位指令:shlshr
先来讲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可不响应中断。还有就是基本所有由外设引起的中断都是可屏蔽中断。

结语

今天的内容就到此结束了,有疑问的小伙伴欢迎评论区留言或者私信博主,博主会在第一时间为你解答。