汇编学习记录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

实验结果演示:


1234.GIF

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 80X86微处理器 一、80x86系列微处理器概况: 8086、8088、80286、80386、80486之后型...
    Zhou_qn阅读 10,204评论 0 4
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 7,351评论 0 1
  • 汇编总结 汇编的发展史 机械语言 由0和1组成的机器指令(如:0101 0001 1101 0110) 汇编语言(...
    iChuck阅读 5,136评论 1 8
  • 本人简单总结了一点计算机组成原理方面的知识,对于编程来讲,了解这些基础知识,可以更加轻易的掌握内存管理,线程技术等...
    IOS学渣阅读 11,447评论 1 36
  • 文章结构 男人在家庭中的地位 女人在家庭中如何扮演角色 女人的重要性 妻子该如何看待自己的丈夫 背叛 总结 最近这...
    LotusLee阅读 3,853评论 0 0

友情链接更多精彩内容