汇编语言 访问CMOS RAM并打印时间(未完)

news2024/9/29 1:19:16

题目:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间

提示:在此代码的基础上加以改造

assume cs:code
code segment
start:
	mov al,9	;年
	out 70h,al	;传入9号单元的地址
	in al,71h	;取9号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2],ah 
	mov byte ptr es:[160*12+40*2+1],2h
	mov es:[160*12+40*2+2],al
	mov byte ptr es:[160*12+40*2+3],2h
	mov ax,4c00h
	int 21h
code ends
end start

方案1

assume cs:code
code segment
start:
  s: 
	mov al,9	;年
	out 70h,al	;传入9号单元的地址
	in al,71h	;取9号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2],ah 
	mov byte ptr es:[160*12+40*2+1],7h ;为黑底白字
	mov es:[160*12+40*2+2],al
	mov byte ptr es:[160*12+40*2+3],7h ;为黑底白字
	
    mov byte ptr es:[160*12+40*2+4],2fh ;ASCII码对应/
	mov byte ptr es:[160*12+40*2+5],7h ;为黑底白字
	
	;这行不需要写xor ax,ax,原因是下方指令执行时会覆盖掉旧值
    mov al,8	;月
	out 70h,al	;传入8号单元的地址
	in al,71h	;取8号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+6],ah 
	mov byte ptr es:[160*12+40*2+7],7h ;为黑底白字
	mov es:[160*12+40*2+8],al
	mov byte ptr es:[160*12+40*2+9],7h ;为黑底白字
	
	mov byte ptr es:[160*12+40*2+10],2fh ;ASCII码对应/
	mov byte ptr es:[160*12+40*2+11],7h ;为黑底白字
	
	mov al,7	;日
	out 70h,al	;传入7号单元的地址
	in al,71h	;取7号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+12],ah 
	mov byte ptr es:[160*12+40*2+13],7h ;为黑底白字
	mov es:[160*12+40*2+14],al
	mov byte ptr es:[160*12+40*2+15],7h ;为黑底白字
	
	mov byte ptr es:[160*12+40*2+16],20h ;ASCII码对应空格
	mov byte ptr es:[160*12+40*2+17],7h ;为黑底白字
	
	mov al,4	;时
	out 70h,al	;传入4号单元的地址
	in al,71h	;取4号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+18],ah 
	mov byte ptr es:[160*12+40*2+19],7h ;为黑底白字
	mov es:[160*12+40*2+20],al
	mov byte ptr es:[160*12+40*2+21],7h ;为黑底白字
	
	mov byte ptr es:[160*12+40*2+22],3Ah ;ASCII码对应:
	mov byte ptr es:[160*12+40*2+23],7h ;为黑底白字
	
	mov al,2	;分
	out 70h,al	;传入2号单元的地址
	in al,71h	;取2号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+24],ah 
	mov byte ptr es:[160*12+40*2+25],7h ;为黑底白字
	mov es:[160*12+40*2+26],al
	mov byte ptr es:[160*12+40*2+27],7h ;为黑底白字
	
	mov byte ptr es:[160*12+40*2+28],3Ah ;ASCII码对应:
	mov byte ptr es:[160*12+40*2+29],7h ;为黑底白字
	
	mov al,0	;秒
	out 70h,al	;传入0号单元的地址
	in al,71h	;取0号单元的内容,高4位为十位、低4位为各位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+30],ah 
	mov byte ptr es:[160*12+40*2+31],7h ;为黑底白字
	mov es:[160*12+40*2+32],al
	mov byte ptr es:[160*12+40*2+33],7h ;为黑底白字
	jmp s ;无限条件1循环,一直刷新时间
	mov ax,4c00h
	int 21h
code ends
end start

最容易想到,虽然能成功显示,但是不够简洁,执行效率较低 

方案2

可以在方案1的基础上内嵌两个循环

CMOS RAM的存放单元为:

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

0,2,4单元间隔2   7,8,9单元是连续的

注意:调用loop循环时必定会用到cx,但是在显示时间时用到了cx(mov cl,4),因此要入栈保存

assume cs:code
code segment
start:
s:
    xor si,si
	mov dl,9    ;从9号单元开始
	mov cx,3    ;循环3次  
    s1: 
	push cx     ;保存cx的值
	mov al,dl	;年
	out 70h,al	;传入al号单元的地址
	in al,71h	;取9号单元的内容,高4位为十位、低4位为个位
	mov ah,al
	mov cl,4             
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h  ;转换为十进制的ASCII码值
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+0+si],ah 
	mov byte ptr es:[160*12+40*2+1+si],7h ;为黑底白字
	mov es:[160*12+40*2+2+si],al
	mov byte ptr es:[160*12+40*2+3+si],7h ;为黑底白字
	
    mov byte ptr es:[160*12+40*2+4+si],2fh ;ASCII码对应/
	mov byte ptr es:[160*12+40*2+5+si],7h ;为黑底白字
	dec dl
	add si,6
	pop cx   ;恢复cx的值
	loop s1  ;年/月/日/打印的循环
	
	sub si,2
	;把日后面的/改成空格
	mov byte ptr es:[160*12+40*2+si],20h ;ASCII码对应空格
	add si,2 ;恢复si的值
	

    mov dl,4 ;从4号单元开始
	mov cx,3
    s2:
	push cx
	mov al,dl	
	out 70h,al	;传入al号单元的地址
	in al,71h	;取al号单元的内容,高4位为十位、低4位为个位
	mov ah,al
	mov cl,4
	shr ah,cl			;高4位 
	and al,00001111b	;低4位
	add ah,30h  ;转换为十进制的ASCII码值
	add al,30h	;转换为十进制的ASCII码值
	mov bx,0b800h
	mov es,bx 
	mov es:[160*12+40*2+18+0+si],ah 
	mov byte ptr es:[160*12+40*2+1+si],7h ;为黑底白字
	mov es:[160*12+40*2+2+si],al
	mov byte ptr es:[160*12+40*2+3+si],7h ;为黑底白字
	mov byte ptr es:[160*12+40*2+4+si],3Ah ;ASCII码对应:
	mov byte ptr es:[160*12+40*2+5+si],7h ;为黑底白字
	sub dl,2
	add si,6
	pop cx
	loop s2
	jmp s ;一直刷新时间
	
	mov ax,4c00h
	int 21h
code ends
end start

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1-仙灵之谜(区块链游戏详情介绍)

1-仙灵之谜(区块链游戏详情介绍) 前言(该游戏仅供娱乐)正文 前言(该游戏仅供娱乐) 依稀记得本科那会儿参加了一个区块链实验室,那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…

< 初等物理 >

SI国际单位制 常见的公制单位 为什么需要单位,是统一衡量的标准 通过国际单位,以及单位的拓展,以及单位的组合,形成一系列新的测量单位 面积 m^2 速率 m/s 米每二次方秒,m / s, delta表示增量, 每秒移动多少米 加…

pdf怎么转变成jpg图片?值得推荐的几种PDF转jpg方法

pdf怎么转变成jpg图片?jpg格式的图像在电子邮件、社交媒体等在线平台上分享非常方便,用户无需担心软件兼容性问题。将PDF内容转换为jpg后,能够有效保留原始文档的视觉布局,使信息更加生动易懂,适合用于演示和展示。同时…

【小沐学GIS】基于ubuntu+three.js的OSM建筑模型显示(node.js、Python)

文章目录 1、简介1.1 ubuntu1.2 node1.3 python1.4 osm1.5 three.js 2、安装ubuntu3、安装node4、安装python结语 1、简介 1.1 ubuntu https://cn.ubuntu.com/download https://ubuntu.com/download Ubuntu是一个以桌面应用为主的Linux发行版操作系统,其名称来自非…

萝卜大杂烩 | 快速掌控seaborn(画图必备)

本文来源公众号“萝卜大杂烩”,仅用于学术分享,侵权删,干货满满。 原文链接:快速掌控seaborn Matplotlib绘制一张美图需要很多参数调整,于是就出现了high-level版的Seaborn,几行代码即可输出美美的图形&am…

超详细的 GitHub 个人主页美化教程

Guthub 个人主页 (官方称呼是 profile)可以展示很多有用的信息,例如添加一个首页被访问次数的计数器,一个被 Star 与 Commit 的概览信息,以及各种技能标签,设备标签等,还可以利用 wakatime 显示…

一文上手SpringSecurity【七】

之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…

一文理解mysql 联合索引和各种SQL语句分析

文章目录 索引图示主键索引二级索引表SQL总结索引图示 主键索引 二级索引 这里如果是联合索引的话,那里面的key就是多个colume的值 表 -- demo.`order` definitionCREATE TABLE `order` (

请求转发和响应重定位

一、请求转发 二、响应重定位 302&#xff1a;服务器的收到请求&#xff0c;但所需要的行为和资源要重定位到其他地方&#xff08;可以是外部和服务器的其他位置&#xff09;时就会像请求者发送302状态码 location响应头&#xff1a;告诉请求者重定位的URL路径

【前端】35道JavaScript进阶问题(1)

来源&#xff1a; javascript-questions/zh-CN/README-zh_CN.md at master lydiahallie/javascript-questions GitHub 记录一些有趣的题。 1 输出是&#xff1f; const shape {radius: 10,diameter() {return this.radius * 2},perimeter: () > 2 * Math.PI * this.rad…

如何通过python+sqlalchemy获得MSsql视图的结构

话不多说 目的:为了对接第三方表视图,需要知道表视图的字段结构,如名称,对应的表字段类型 实现结果如图: 直接上代码: from sqlalchemy import create_engine, MetaData, select, text from web import urlquoteDRIVER "ODBC Driver 18 for SQL Server" INSTANCE…

晓羽知识答题系统V1.8.0

一款适用于企业或组织进行知识答题系统&#xff0c;根据排名进行奖品派发&#xff0c;支持微信小程序和H5方式使用 V1.8.0答题活动支持按题型分配问题数量 答题活动支持按题型分配问题数量&#xff0c;满足指定一定数量的单选题、多选题、判断题&#xff1b; 答题活动支持注…

【数据结构】环形队列(循环队列)学习笔记总结

文章目录 什么是环形队列?基于 C 语言实现环形队列环形队列的应用场合 在计算机科学中&#xff0c;数据结构是组织和存储数据的方式&#xff0c;它对于高效的算法设计至关重要。队列是一种常见的数据结构&#xff0c;遵循 FIFO&#xff08;先进先出&#xff0c;First-In-Firs…

【AIGC】ChatGPT提示词助力自媒体内容创作升级

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效仿写专家级文章提示词使用方法 &#x1f4af;CSDN博主账号分析提示词使用方法 &#x1f4af;自媒体爆款文案优化助手提示词使用方法 &#x1f4af;小结 &#x1f4af…

外贸网站怎么搭建对谷歌seo比较好?

外贸网站怎么搭建对谷歌seo比较好&#xff1f;搭建一个网站自然不复杂&#xff0c;但要想搭建一个符合谷歌seo规范的网站&#xff0c;那就要多注意了&#xff0c;你的网站做的再酷炫&#xff0c;再花里胡哨&#xff0c;但如果页面都是js代码&#xff0c;或者页面没有源代码内容…

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多,请稍后片刻再重试,或与系统管理员或技术支持联系“问题

根本原因就是当前主机被通过远程桌面输入了过多的错误密码&#xff0c;被系统锁定。这种情况多数是你的服务器远程桌面被人试图攻击了&#xff0c;不建议取消系统锁定策略。如果阿里云或者腾讯云主机&#xff0c;只需要在管理后台通过管理终端或者VNC登陆一次&#xff0c;锁定即…

友元运算符重载函数

目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 &#xff08;1&#xff09;在类的内部&#xff0c;定义友元运算符重载函数的格式如下&#xff1a; friend 函数类型 operator 运算符&#xff08;形参表&a…

韩媒专访CertiK首席商务官:持续关注韩国市场,致力于解决Web3安全及合规问题

作为Web3.0头部安全公司&#xff0c;CertiK在KBW期间联合CertiK Ventures举办的活动引起了业界的广泛关注。CertiK一直以来与韩国地方政府保持着紧密合作关系&#xff0c;在合规领域提供强有力的支持。而近期重磅升级的CertiK Ventures可以更好地支持韩国本地的区块链项目。上述…

算法复杂度-空间

一 . 空间复杂度 空间复杂度也是一个数学表达式 &#xff0c; 是对一个算法在运行过程中因为算法的需要额外临时开辟的空间。 空间复杂度不是程序占用了多少个 bytes 的空间 &#xff0c; 因为常规情况每个对象大小差异不会很大 &#xff0c; 所以空间复杂度算的是变量的个数…

计算机毕业设计 智能旅游推荐平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…