汇编学习记录14 端口

1.背景介绍:

(1)在计算机中,各种存储器都和CPU的地址线、数据线和控制线相连(合称总线Bus)。CPU会把它们总的当成一个由若干存储单元组成的逻辑存储器来看待,我们把它称为内存地址空间
(2)实际上在PC机中,和CPU通过总线相连的芯片除了各种存储器以外,还有以下三种芯片:

  • 各种接口卡(网卡、显卡等);
  • 主板上的接口芯片(CPU通过这些芯片对部分外设进行访问);
  • 其他芯片(用于存储相关系统信息,或进行相关的输入输出处理

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

总结:CPU可以从以下三个地方读取数据
(1)CPU内部寄存器
(2)内存单元
(3)端口

2.端口读写

端口读写的命令只有两条:
(1)IN指令: in al, 60H(从端口地址60H读取数据送到al寄存器中)
(2)OUT指令:out 20H, al(从寄存器al中读出数据,送到端口20H处)
这类指令执行同内存数据操作指令相似,一般来说CPU执行分为三步:
1.CPU通过地址线,将地址信息发出
2.CPU通过控制线选中相应端口所在芯片,告诉它是读数据还是写数据。
3.CPU通过数据线发送数据或者接收数据
注意!端口的读写指令IN和OUT都必须用寄存器al或者ax来传送数据,不能够出现立即数

3、应用举例:COMS RAM芯片端口编程

  • COMS RAM芯片特征:
    (1)包含一个实时钟和有128个存储单元的RAM存储器;
    (2)该芯片靠电池供电。所以,一般来说关机以后实时钟仍然可以正常工作,RAM信息也不会丢失
    (3)128字节的RAM中,0~0dh单元保存时间信息,其余大部分单元用于保存系统配置信息,供给BIOS程序在开机的时候读取,BIOS也提供了相应程序可以供给用户在开机时配置COMS芯片。
    (4)COMS RAM芯片操作:芯片提供两个端口地址为70h和71h,CPU通过这两个端口来读写COMS RAM;70h为地址端口,存储想要访问的芯片单元地址,71h为数据端口,存放向芯片传送的数据或者芯片读取出来的数据;

  • COMS RAM存储的时间信息
    在此芯片中,一次存放着当前的时间信息:
    0:秒 2:分 4:时 6:日 8:月 9:年 (每个字节地址单元对应的时间信息)
    这些数据全部以BCD码的形式存放

实验说明:从COMS RAM中读出当前月份,显示在频幕上
实验参考代码:

assume cs:code,ds:data
data segment
    db 'Month:'
data ends

code segment
start:
    mov ax,0b800H
    mov es,ax
    mov si,160*12+35*2 ; 显存段地址
    mov ax,data
    mov ds,ax
    mov di,0

    mov al,8 ; 注意out和in指令中只能用al寄存器来读入数据或者存储要发送到端口的数据
    out 70H,al
    in al,71H
    mov ah,al ; al中存有从8号单元读出的数值,放入ah中
    mov cl,4 ; 准备进行四位移动
    shr ah,cl ; 高位BCD存在ax高位
    and al,00001111b ; 低位存在ax低位、

    add ah,30H
    add al,30H ; 转换为ASCii表示的数字

    mov cx,6
S:  mov dl,ds:[di]
    mov es:[si],dl
    mov byte ptr es:[si+1],02H
    inc di
    add si,2
    loop S  ; 将month传入显存
        
    mov byte ptr es:[si],ah
    add si,2
    mov byte ptr es:[si],al ; 将月份传入显存

    mov ax,4c00H
    int 21H

code ends
end start

实验结果演示:


汇编学习记录14 端口_第1张图片
1234.GIF

4、补充:shl和shr指令同CF标志的使用

  • shl逻辑左移指令功能:
    (1)将一个寄存器或内存单元的数据向左移动
    (2)将最后移除的一位写入CF标志位
    (3)最低位补充0
  • shr逻辑右移功能:
    (1)同上,向右移动
    (2)同上,将最后一位移出去的写入CF
    (3)最高位补充0

注意!如果移动的位数大于1,则必须写入cl寄存器中

你可能感兴趣的:(汇编学习记录14 端口)