端口---汇编学习笔记

本文介绍了PC机系统中端口的相关知识,包括端口读写方式、地址范围及读写指令。阐述了CMOS RAM芯片特征、端口地址及读写步骤,还提及shl和shr逻辑移位指令。最后说明了CMOS RAM中存储的时间信息,并给出访问CMOS RAM显示当前日期时间的实验内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

端口

在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片。

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

在这些芯片中,都有一组可以由CPU读写的寄存器。这些寄存器,它们在物理上可能处于不同的芯片中,但是它们在以下两点上相同。

  1. 都和CPU的总线相连,当然这种连接是通过它们所在的芯片进行的
  2. CPU对它们进行读或写的时候都通过控制线向它们所在的芯片发出端口读写命令

CPU可以直接读写以下3个地方的数据

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

14.1 端口的读写

在访问端口的时候,CPU通过端口地址来定位端口。因为端口所在的芯片和CPU通过总线相连,所以,端口地址和内存地址一样,通过地址总线来传送。在PC系统中,CPU最多可以定位64KB个不同端口。则端口地址的范围为0~65535。

对端口的读写不能用mov、push、pop等内存读写指令。端口的读写指令只有两条: in和out ,分别用于端口读取数据和往端口写入数据。

访问端口:in al,60h ;从60h号端口读入一个字节

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

in al,20h   ;从20h端口读入一个字节
out 20h,al  ;往20h端口写入一个字节

对256~65535的端口进行读写时,端口号放在dx中

mov dx,3f8h ;将端口号3f8h送入dx
in al,dx    ;从3f8h端口读入一个字节
out dx,al   ;向3f8h端口写入一个字节

14.2 CMOS RAM芯片

CMOS芯片特征如下:

  1. 包含一个实时钟和一个有128个存储单元的RAM存储器(早期的计算机为64个字节)
  2. 该芯片靠电池供电。所以,关机后其内部的实时钟仍可正常工作,RAM中的信息不丢失
  3. 128个字节的RAM中,内部实时钟占用0~0dh单元来保存时间信息,其余大部分单元用来保存系统配置信息,供系统启动时BIOS程序读取。BIOS也提供了相关的程序,使我们可以在开机的时候配置CMOS RAM中的系统信息
  4. 该芯片内部有两个端口,端口地址为70h和71h。CPU通过这两个端口来读写CMOS RAM
  5. 70h为地址端口,存放要访问的CMOS RAM单元的地址;71h为数据端口,存放从选定的CMOS RAM单元中读取的数据,或要写入到其中的数据。可见,CPU对CMOS RAM的读写分两步进行,比如,读CMOS RAM的2号单元:
    1. 将2送入端口70h
    2. 从端口71h读出2号单元的内容

检测点 14.1
(1)编程,读取CMOS RAM的2号单元的内容。
答:2号单元的内容为0。
(2)编程,向CMOS RAM的2号单元写入0。
答:1.mov al,0,2.out 2,al


14.3 shl和shr指令

shl和shr是逻辑移位指令。

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

  1. 将一个寄存器或内存单元中的数据向左移位
  2. 将最后移出的一位写入CF中
  3. 最低位用0补充

shr是逻辑右移位指令,功能刚刚相反

以上两点都太简单,不做阐述

检测点 14.2
编程,用加法和移位指令计算 (ax)=(ax)10 ( a x ) = ( a x ) ∗ 10 。(提示, (ax)10=(ax)2+(ax)8 ( a x ) ∗ 10 = ( a x ) ∗ 2 + ( a x ) ∗ 8 )
步骤如下(左移位一个bit是乘2):

mov bx,ax
shl bx,1    ;乘2
shl ax,3    ;乘8
add ax,bx

14.4 CMOS RAM中存储的时间信息

在CMOS RAM中,存放着当前的时间:年、月、日、时、分、秒。这6个信息的长度都为1个字节,存放单元为:秒:0、分:2、时:4、日:7、月:8、年:9

这些数据以BCD码的方式存放。

十进制数码对应的BCD码
00000
10001
91001

这里有一个例子,自己阅读,略过咯。


实验14 访问CMOS RAM

编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
写的很粗糙,可以复用性的。将987420放入data段中,s子程序是将字符串处理后的结果放入data段中,lo是将字符串显示出来,改进版本可以用0作为结束。

assume cs:code

data segment
    db '00/00/00 00:00:00'
data ends

code segment
    start:
        mov di,160*12+30*2

        mov bx,data
        mov ds,bx
        mov bx,0


        mov al,9
        call s
        mov al,8
        call s
        mov al,7
        call s
        mov al,4
        call s
        mov al,2
        call s
        mov al,0
        call s

        mov bx,0
        mov cx,17
    lo:

        mov ax,0b800h
        mov es,ax
        mov al,ds:[bx]
        mov byte ptr es:[di],al
        add di,2
        inc bx

        loop lo

        mov ax,4c00h
        int 21h

    s:
        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 byte ptr ds:[bx],ah
        mov byte ptr ds:[bx+1],al
        add bx,3
        ret

code ends
end start

实验结果:
这里写图片描述

<think>好的,用户需要关于IBM-PC汇编语言的学习笔记或教程。首先,我要回顾提供的引用内容,看看是否有相关信息。引用1提到学习汇编语言要直接对硬件编程,引用2详细介绍了汇编语言的基础知识,如CPU与存储器的交互。引用3指出IBM PC使用8088芯片,开启了微机时代。引用4则涉及字符串表示和计算机发展史。 接下来,我需要将这些信息组织成结构清晰的回答。用户可能需要了解IBM-PC汇编的核心概念、硬件基础、指令集和参考资料。根据引用2,汇编指令是核心,涉及CPU的地址、控制、数据信息。引用3提到的8088芯片是关键,应强调其重要性。 然后,生成相关问题。要考虑用户可能想深入学习的方面,比如开发环境搭建、指令系统、实际应用案例等。确保问题覆盖学习路径的不同阶段,从基础到应用。 最后,检查是否符合用户要求:使用中文,LaTeX格式正确,添加引用标识。确保回答真实可靠,引用来源准确。</think>根据您对IBM-PC汇编语言学习资料的需求,结合站内参考资料整理如下结构化学习路径: ### 一、IBM-PC汇编语言核心要素 1. **硬件基础** - 8088/8086处理器架构是IBM-PC的核心,采用16位寄存器组(AX,BX,CX,DX等)和分段内存管理机制[^3] - CPU与存储器交互的三类信息: $$ 地址总线(20位) \rightarrow 1MB寻址空间 $$ $$ 控制总线 \rightarrow 读/写信号 $$ $$ 数据总线(16位) \rightarrow 字传输 $$ 2. **指令系统特性** - 采用机器指令助记符格式,如: ```assembly MOV AX, 0FFFFH ; 立即数传送 ADD BX, CX ; 寄存器相加 ``` - 支持直接硬件操作:端口I/O、中断处理、DMA控制等[^1] ### 二、推荐学习框架 1. **开发环境搭建** - 建议使用MASM 5.0+DOSBox模拟器 - 基础程序结构示例: ```assembly .MODEL SMALL .STACK 100H .DATA MSG DB 'Hello, IBM-PC!$' .CODE START: MOV AX, @DATA MOV DS, AX LEA DX, MSG MOV AH, 09H INT 21H MOV AH, 4CH INT 21H END START ``` 2. **重点学习模块** - 内存分段机制:代码段(CS)、数据段(DS)、堆栈段(SS) - BIOS/DOS中断调用(INT 21H系统功能) - 混合编程:与C语言的接口技术 ### 三、经典参考资料 1. **《IBM-PC汇编语言程序设计(第2版)》**(沈美明著) - 涵盖DEBUG工具使用、接口编程等实践内容 2. **Intel 8086程序员手册** - 指令集详细说明:包括寻址方式、标志位操作等[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值