第14章 端口

在pc系统中,和cpu通过总线来直接连接的除了寄存器之外,还有一下三种芯片。

  1. 各种接口卡
  2. 主板上的接口芯片
  3. 其他芯片,用来存放相关的系统信息,或者进行相关的输入和输出处理

它们都有相同的特点

  1. 都是和cpu的总线相连
  2. cpu对他们进行读和写都是通过控制总线来进行的

cpu可以直接写下面的三个地方

  1. cpu内部的寄存器
  2. 内存单元
  3. 端口

14.1端口的读和写

端口地址和内存地址一样,都是通过地址总线来传送。

对端口的读和写不能使用mov,push,pop等内存读写指令。只有简单的in给我out。分别用于从端口读取数据和往端口写入数据。

在执行内存访问指令和端口访问指令的时候,地址总线的变化:

(1)访问内存

mov ax,ds:[8]

  1. cpu通过地址线将地址信息8发出
  2. cpu通过控制线发出内存读命令,选中存储器芯片,并通过它,将要从中读取数据
  3. 存储器将8号单元中的数据通过数据线送入到cpu中

(2)访问端口

in al,60h

  1. cpu通过地址线将地址信息60h发出
  2. cpu通过控制线发出端口读命令,选中端口所在的芯片,并 通知它,将要从中读取数据
  3. 端口所在的芯片将60h端口中的数据通过数据线传入到cpu

in和out指令中,只能使用ax或者al来存放从端口中读入的数据或要发生到端口中的数据。

al访问8位端口时使用,ax访问16位端口时使用。

对于0~255以内的端口进行读写时:

in al,20h

out 20h,al

对255~65535端口进行读写时:

mov dx,3f8h

in al,dx

out dx,al

14.2CMOS RAM芯片

pc机中,有一个CMOS RAM芯片,一般简称为CMOS,其特征如下:

  1. 包含一个实时钟和一个有128个存储单元的RAM存储器
  2. 该芯片靠电池供电,所以关机之后内部的实时钟还是可以正常工作,ram中的信息不丢失
  3. 128个字节的RAM中,内部实施中占用了0-0d单元来保存时间信息,其余的单元用于保存系统配置信息,用于系统启动的时候BLOS程序读取。blos也提供了相关的程序,使我们可以在开机的时候配置CMOS RAM中的系统信息。
  4. 该芯片内部有两个端口,端口的地址为70h和71h。cpu通过这两个端口来读写CMOS RAM
  5. 70h为地址端口,存放要访问的CMOS RAM单元的地址;71为数据端口,存放从选定的CMOS RAM单元中读取数据,或者写入到其中的数据

14.3shl和shr指令

shl和shr指令是逻辑位指令,shl是左移指令,shr是右移指令

shl是逻辑左移指令,它的功能是:

  1. 将一个寄存器或者是内存单元的数据往左移动位
  2. 将最后一位移出的写入到CF中
  3. 最低位用0补充
mov al,01001000b
shl al,1

执行之后:

(al)=1001000b CF=0

如果移动的位数是大于1的,可以将移动的位数放在cl中

mov al,01010001b
mov cl,3
sh al,cl

可以知道,执行了左移一位,相当于执行X=X*2

右移的功能和左移相似,只是方向不一样,补充的是最高位,最终的结果相当于/2

14.4CMOS RAM中存储的时间信息

在CMOS RAM中,存放中当前的时间:年,月,日,时,分,秒 这6个信息的长度为一个字节,存放单元为:

秒:0 分:2 时:4 日:7 月:8 年:9

这些数据以BCD码的形式存放

BCD码是以4位二进制来表示十进制的编码方法

可见,一个字节是可以表示两个BCD码,则存储单元使用了两个BCD码来表示是十进制单元,高4位表示十位,底4位表示BDC码表的个位。

编程:在屏幕中间显示当前的月份

assume cs:code
code segment
start:mov al,8
      out 70h,al
      in al,71h
      
      mov ah,al
      mov cl,4
      shr ah,cl
      and al,00001111b
      
      add ah,30h
      add al,30h
      
      mov bx,0b800h
      mob es,bx
      mov byte ptr es:[160*12+40*2],ah
      mov byte ptr es:[160*12+40*2+2],al
      
      mov ax,4c00h
      int 21h
   code ends
end start

共有 0 条评论

Top