汇编语言 访问CMOS RAM


CMOS RAM

是什么?

存放计算机开机必备的一些数据的硬件,由BIOS(Basic input/output system)调用其数据。

怎么用?

首先要理解端口的概念,在计算机中,与CPU可以访问的数据的位置可以有一下三种:存储器、寄存器、端口。而端口的另一端是芯片,即CPU通过端口与其他芯片相连。在这些芯片中,都有一组可供CPU读写的寄存器。站在CPU的角度,CPU对这些寄存器统一编址。
那么怎么进行访问呢?首先要明白,CPU对于端口寄存器只有两种操作类型:in(从端口读取数据)、out(向端口输出数据)。
例如: in al,71h(从71h端口读取数据,放到寄存器al中)
out 70h,al(将寄存器al中的数据传送到70h端口中)
注:对端口的操作只能用al或者ax寄存器。

输出时间程序

时间在CMOS RAM中的表示形式:

秒:在0号单元
分:2
时:4
日:7
月:8
年:9

思路:

这里可以用实验13(3)的思路,将用到的数据放在code块中,并通过offset进行访问,简单粗暴

源程序:

assume cs:code

code segment
index: db 9,8,7,4,2,0
string: db 'yy/mm/dd hh:mm:ss' start: mov ax,code
mov ds,ax
mov si,offset index
mov bx,offset string
mov cx,6
s: push cx
mov al,ds:[si]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add al,30h
add ah,30h
mov [bx],ah
mov [bx+1],al
inc si;最后一次循环后,指向string
add bx,3
pop cx
loop s
;显示字符串
mov ax,0b800h
mov es,ax
mov di,160*12+40*4
mov cx,17
s0: mov al,ds:[si]
mov es:[di],al
add di,2
inc si
loop s0 ok: mov ax,4c00h
int 21h code ends
end start

自我总结

一开始的思路是,定义data段,将单元号放进去,然后再把‘\’和‘:’放进去(好蠢。。),然后在把从CMOS RAM中取出的al通过一个函数,直接变成:ah(高位)al(低位)。行得通,但是当我把“年”输出做好了之后,发现,还有五个要做,这样下去程序会非常长,所以必须要用循环。可是以当时的设计,做循环是不可能的,每个两位数中间都有'\'或者':'等字符。然后去瞄了一眼答案,瞬间恍然大悟。。世上那么多条路可以选,我偏偏选了最难走的那一条:(

汇编语言 实验14 访问CMOS RAM的更多相关文章

  1. 汇编程序49:实验14 访问CMOS RAM(显示系统时间)

    assume cs:code ;安装程序,使用指令out和in指令 code segment start: mov ax,cs mov ds,ax mov si,offset sub1 mov ax, ...

  2. 汇编实验14:访问CMOS RAM

    汇编实验14:访问CMOS RAM 任务 编程,以“年/月/日 时:分:秒”的格式,显示当前的日期,时间. 预备知识 CMOS存储当前时间的信息:年.月.日.时.分.秒.这六个信息的长度均为1个字节, ...

  3. 实验十四_访问CMOS RAM

    编程:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间. 注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元写入内容,否则将引起一些系 ...

  4. 汇编试验十四:访问CMOS RAM

    CMOS RAM 芯片的特征: 包含一个时钟和一个有128个存储单元的RAM存储器. 该芯片靠电池供电.所以,关机后其内部的时钟仍可正常工作,RAM中的信息不丢失. 128个字节的RAM中,内部时钟占 ...

  5. 王爽<<汇编语言>> 实验十四

    ;以"年/月/日 时:分:秒"的格式, 显示当前的日期, 时间 assume cs:code code segment main: out 70h,al ;告诉CMOS RAM将要 ...

  6. 王爽<汇编语言>实验十

    实验十 3.数值显示(以下程序附带测试程序) ;名称: dtoc ;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾 ;参数: (ax)=dword型数据低字 ; (dx)=dw ...

  7. 汇编语言实验1 & macOS下DOSBox的安装

    一.macOS下DOSBox的安装 1.在官网下载DOSBox-0.74.dmg 打开,此时默认z盘 一番折腾,终于搞定debug 然后为了不用每次都执行mount,遂更改配置文件自动挂在目录 再次打 ...

  8. 实验14:VLAN间的路由

    实验11-1: 单臂路由实现VLAN 间路由 Ø    实验目的通过本实验,读者可以掌握如下技能:(1) 路由器以太网接口上的子接口(2) 单臂路由实现VLAN 间路由的配置Ø    实验拓扑 实验步 ...

  9. 汇编语言实验1—Debug基础操作

    1.使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化. 记录1:最后一条指令执行完BX=(4026)H,AL=(66)H,检验结果. 两种写入:e命令 ...

随机推荐

  1. Nastya Is Buying Lunch

    At the big break Nastya came to the school dining room. There are nn pupils in the school, numbered ...

  2. 如何使用 tf object detection

    # 如何使用 tf object detection https://juejin.i m/entry/5a7976166fb9a06335319080 https://towardsdatascie ...

  3. Chapter 5 : Control Structures 2 : Repetition

    import java.util.*; import java.io.*; public class Loop { static Scanner console = new Scanner(Syste ...

  4. CSS水平垂直居中!

    总结一下,最经典的面试题 分两种情况,宽高确定和不定宽高 (一)宽高确定 初始条件如下: 1. 绝对定位 + 负margin 里面的盒子相对于父盒子绝对定位,距离上面和左边分别为50%,此处的50%是 ...

  5. 201771010126 王燕《面向对象程序设计(Java)》第十周学习总结

    实验十  泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1) 理解泛型概念: 泛型:也称参数化类型(parameterized type),就是在定义类.接口和方法时,通过类型 ...

  6. 20175324 《Java程序设计》第七周学习总结

    教材学习内容总结 常用实用类 String类 - 程序可以直接使用String类,但不能进行扩展,即String类不可以有子类 - 常用构造方法 - String(char a[])用一个字符数组a创 ...

  7. 方便快捷的求导求积分解方程在线工具sage介绍

      有时候我们需要进行一些复杂的数学计算,比如求导, 求积分,解方程,还是用abcd字母代表变量的方程等,这就需要进行复杂的数学运算还需要具备良好的数学基础.不过现在有一个非常方便的在线工具,只需要几 ...

  8. vue项目开发时怎么解决跨域

    vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is prese ...

  9. mysql 5.6.43免安装版安装教程

    1.第一步,下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.个人比较喜欢用免安装版,使用起来方便 ...

  10. ssh 报error: kex protocol error: type 30 seq 1

    由于近期服务器升级了openssl,在使用navicat连接数据库报 查看日志 sshd[1990]: error: kex protocol error: type 30 seq 1 [preaut ...