《汇编语言》王爽(第四版) 第十四章 检测点及实验14
文章目录
目录
前言
一、检测点
1.检测点14.1
(1)检测点14.1.(1)
(2)检测点14.1.(2)
2.检测点14.2
(1)实验任务
(2)实现代码
二、实验14 访问CMOS RAM
1.实验任务
2.思路分析
(1)读取并显示月份数据
(2)读取多项数据
3.实现代码
总结
前言
本文是王爽老师《汇编语言》(第四版) 第十四章 检测点及实验14 访问CMOS RAM 的分析及代码。
一、检测点
1.检测点14.1
(1)检测点14.1.(1)
实验任务:编程,读取CMOS RAM的2号单元的内容。
思路分析:
第一步,将要访问的地址(2H)送入地址端口,即70H端口;
第二步,从数据端口(即71H)读取相应地址(2H)的内容。
test14_1_1: ;第14章 检测点14.1(1);实验任务:读取CMOS RAM的2号单元的内容mov al,2 ;2是要发送到70H地址端口的数据,表示要访问的是地址2Hout 70H,al ;将al中的数据输出到端口70Hin al,71H ;从71H号数据端口读出2号单元的内容,送入al;读取结果: al=当前时钟分针读数ret
(2)检测点14.1.(2)
实验任务:编程,向CMOS RAM的2号单元写入0。
思路分析:
第一步,将要访问的地址(2H)送入地址端口,即70H;
第二步,向数据端口(71H)输出数据0。
test14_1_2: ;第14章 检测点14.1(2);实验任务:向CMOS RAM的2号单元写入0mov al,2 ;2是要发送给70H地址端口的数据,表示要访问的是地址2Hout 70H,al ;将al中的数据输出到地址端口70H;mov al,0 ;0是要发送给71H数据端口的数据,表示要传送的数据是0out 71H,al ;将al中的数据输出到数据端口71Hret
2.检测点14.2
(1)实验任务
编程,用加法和移位指令计算ax = ax*10。
思路分析:10=2+8,因此这个计算等价于 ax *2 + ax*8 。shl是逻辑左移指令,相当于将数据*2,shr是逻辑右移指令,相当于将数据/2。
(2)实现代码
test14_2: ;第14章 检测点14.2;编程,用加法和移位指令计算ax = ax*10;思路: ax*10 = ax*2 + ax*8;给定参数:ax为待计算的值;返回:ax返回结果mov ax,3 ;给定ax的值;计算 ax*2mov bx,ax ;用bx暂存待计算的数据shl ax,1 ;ax = ax*2mov dx,ax ;用dx暂存结果;计算ax*8mov cl,3 ;8是2的三次方shl bx,cl ;ax = ax*8;两项求和add bx,dxret
二、实验14 访问CMOS RAM
1.实验任务
编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
2.思路分析
(1)读取并显示月份数据
整体思路是,从单一功能入手,将功能封装为一个子程序。因此先读取一项数据,比如月份,并将它显示在屏幕上。
(程序中将显示字符属性设置为黑底绿色,是为了方便查看,也可以设置成其它属性。)
代码如下。
assume cs:code
code segment
start: mov al,8 ;访问8号地址的数据,即月份mov si,160*4+5*2 ;指定显示的偏移地址call show_one ;读取数据并显示mov ax,4c00Hint 21Hshow_one: ;功能:取CMOS RAM的指定地址的一个byte型数据,并显示在屏幕指定位置;参数:al要访问的地址;si显存的偏移地址;返回:无push espush axpush cxpush si;从CMOS RAM的端口读取指定地址的数据out 70H,al ;向70H地址端口输出要访问的地址号in al,71H ;从71H数据端口读取指定地址的数据;将数据拆分为十位与个位数字mov ah,almov cl,4shr ah,cl ;获得十位数字and al,00001111B ;获得个位数字;将BCD码数字转为十进制字符形式add ah,30Hadd al,30H;在屏幕指定位置显示mov cx,0B800Hmov es,cxmov cl,02H ;字符显示属性mov es:[si],ah ;显示十位数字inc simov es:[si],cl ;字符显示属性inc simov es:[si],al ;显示个位数字inc simov es:[si],cl ;字符显示属性pop sipop cxpop axpop esret
code ends
end start
(2)读取多项数据
接下来,就可以在主程序中多次调用子程序,进行数据的读取与显示,只需要向子程序提供要访问的地址号与显存段偏移地址即可。
实验任务中要使用“/”与“:”,通过查询ASCII码表得知,“/”对应2FH,“:”对应3AH。
日期时间数据对应的地址: 年9;月8;日7;时4;分2;秒0 。
代码如下。
start: mov si,160*10+32*2 ;指定显示的偏移地址;显示日期mov cx,3mov al,9show_date:call show_one ;读取并显示一项日期数据add si,4 cmp al,7 ;显示“/”je show_blankpush axmov al,2fH call show_charadd si,2pop ax ;下一项日期数据dec al loop show_dateshow_blank:mov al,0H ;显示“ ”call show_char add si,2;显示时间mov cx,3mov al,4s_show_time: ;显示一项时间数据call show_oneadd si,4cmp al,0 ;显示“:”je show_time_okpush ax mov al,3AHcall show_charadd si,2pop ax sub al,2loop s_show_timeshow_time_ok:mov ax,4c00Hint 21H
3.实现代码
完整代码及效果图如下。
assume cs:code
code segment
start: mov si,160*10+32*2 ;指定显示的偏移地址;显示日期mov cx,3mov al,9show_date:call show_one ;读取并显示一项日期数据add si,4 cmp al,7 ;显示“/”je show_blankpush axmov al,2fH call show_charadd si,2pop ax ;下一项日期数据dec al loop show_dateshow_blank:mov al,0H ;显示“ ”call show_char add si,2;显示时间mov cx,3mov al,4s_show_time: ;显示一项时间数据call show_oneadd si,4cmp al,0 ;显示“:”je show_time_okpush ax mov al,3AHcall show_charadd si,2pop ax sub al,2loop s_show_timeshow_time_ok:mov ax,4c00Hint 21H
show_char: ;功能:在指定位置显示一个指定的字符;参数:al指定字符; si显存段偏移地址;返回:无push espush bxpush simov bx,0B800Hmov es,bxmov es:[si],al ;显示指定字符inc simov es:[si],0AH ;显示字符属性pop sipop bxpop esretshow_one: ;功能:取CMOS RAM的指定地址的一个byte型数据,并显示在屏幕指定位置;参数:al要访问的地址;si显存的偏移地址;返回:无push espush axpush cxpush si;从CMOS RAM的端口读取指定地址的数据out 70H,al ;向70H地址端口输出要访问的地址号in al,71H ;从71H数据端口读取指定地址的数据;将数据拆分为十位与个位数字mov ah,almov cl,4shr ah,cl ;获得十位数字and al,00001111B ;获得个位数字;将BCD码数字转为十进制字符形式add ah,30Hadd al,30H;在屏幕指定位置显示mov cx,0B800Hmov es,cxmov cl,0AH ;字符显示属性mov es:[si],ah ;显示十位数字inc simov es:[si],cl ;字符显示属性inc simov es:[si],al ;显示个位数字inc simov es:[si],cl ;字符显示属性pop sipop cxpop axpop esret
code ends
end start
总结
本文是王爽老师《汇编语言》(第四版) 第十四章 检测点及实验14 访问CMOS RAM并显示日期和时间 的分析及代码。通过这个实验,我初步了解了如何访问端口,以及如果通过CMOS RAM端口获取当前的日期和时间。
《汇编语言》王爽(第四版) 第十四章 检测点及实验14相关推荐
- 汇编语言(王爽 第三版) ret retf总结 以及检测点10.1
关键导读: ret对应的代码以及结果: assume cs:codesgstack segmentdb 16 dup(0) stack endscodesg segmentmov ax,4c00hin ...
- 《汇编语言》王爽(第四版) 第十二章 实验12
文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...
- 《汇编语言》王爽(第四版) 第十六章 实验16
文章目录 前言 一.实验任务 二.思路分析 1.程序框架 2.设置前景色 3.设置背景色 三.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十六章 ...
- 汇编语言(王爽 第三版)检测点
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开<微机原理与汇编语言>这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东 ...
- 汇编语言王爽第三版答案
汇编语言答案(王爽) 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位. (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 . (3) ...
- java编程思想第四版第十四章 类型信息习题
fda dfa 第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays ...
- 汇编语言(王爽 第三版)检测点9.1 解决-a无法输入jmp dword ptr es:[1000h]
第一个: assume cs:code,ds:data data segmentdb 0h data ends code segment start:mov ax,datamov ds,axmov b ...
- 汇编语言(王爽第三版)实验一
实验一 题目预览 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后的CPU中相关寄存器中内容的变化. 将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方 ...
- 汇编语言(王爽第三版)实验大全
实验大全 实验1 查看CPU和内存,用机器指令和汇编指令编程 实验2 用机器指令和汇编指令编程 实验3 编程.编译.连接.跟踪 实验4 [bx]和loop的使用 实验5 编写.调试具有多个段的程序 实 ...
最新文章
- 基于STC8H1K28的BH60的角度读写模块
- (转载)oracle 10g 安装完成后,无法登陆EM的解决办法
- 教你认识动态链接库DLL文件
- 分页控件-ASP.NET(AspNetPager)
- mysql初始化实例报错_初始化 mysql时报错
- centos开机自动挂载磁盘_3分钟教你看懂linux磁盘划分
- 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
- 审车按月还是日期_大额存单,应该选择按月付息还是到期一次性还本付息?
- 4月28日上午学习日志
- jquery.hotkeys监听键盘按下事件keydown
- 包无法安装_BiocManager无法安装R包
- 【Kernel Method】Kernel Method核方法介绍
- HTML网页设计原理是什么,HTML+CSS网页设计详解
- java字符数组比大小排序_Java字符串数组进行大小排序
- cubemx6.0配置touchgfx 正点原子触摸屏,touchgfx添加触摸驱动
- Python爬取拉钩招聘网,用数据告诉你这类程序员最赚钱
- python练习题(3)--字符串及正则表达式的应用
- ER图向关系模型的转换
- 关于在dll中申请内存,外部释放的问题
- 开源NLP(自然语言处理)库的功能对比