文章目录

目录

前言

一、检测点

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相关推荐

  1. 汇编语言(王爽 第三版) ret retf总结 以及检测点10.1

    关键导读: ret对应的代码以及结果: assume cs:codesgstack segmentdb 16 dup(0) stack endscodesg segmentmov ax,4c00hin ...

  2. 《汇编语言》王爽(第四版) 第十二章 实验12

    文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...

  3. 《汇编语言》王爽(第四版) 第十六章 实验16

    文章目录 前言 一.实验任务 二.思路分析 1.程序框架 2.设置前景色 3.设置背景色 三.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十六章 ...

  4. 汇编语言(王爽 第三版)检测点

    这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开<微机原理与汇编语言>这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东 ...

  5. 汇编语言王爽第三版答案

    汇编语言答案(王爽) 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位. (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 . (3) ...

  6. java编程思想第四版第十四章 类型信息习题

    fda dfa 第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays ...

  7. 汇编语言(王爽 第三版)检测点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 ...

  8. 汇编语言(王爽第三版)实验一

    实验一 题目预览 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后的CPU中相关寄存器中内容的变化. 将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方 ...

  9. 汇编语言(王爽第三版)实验大全

    实验大全 实验1 查看CPU和内存,用机器指令和汇编指令编程 实验2 用机器指令和汇编指令编程 实验3 编程.编译.连接.跟踪 实验4 [bx]和loop的使用 实验5 编写.调试具有多个段的程序 实 ...

最新文章

  1. 基于STC8H1K28的BH60的角度读写模块
  2. (转载)oracle 10g 安装完成后,无法登陆EM的解决办法
  3. 教你认识动态链接库DLL文件
  4. 分页控件-ASP.NET(AspNetPager)
  5. mysql初始化实例报错_初始化 mysql时报错
  6. centos开机自动挂载磁盘_3分钟教你看懂linux磁盘划分
  7. 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
  8. 审车按月还是日期_大额存单,应该选择按月付息还是到期一次性还本付息?
  9. 4月28日上午学习日志
  10. jquery.hotkeys监听键盘按下事件keydown
  11. 包无法安装_BiocManager无法安装R包
  12. 【Kernel Method】Kernel Method核方法介绍
  13. HTML网页设计原理是什么,HTML+CSS网页设计详解
  14. java字符数组比大小排序_Java字符串数组进行大小排序
  15. cubemx6.0配置touchgfx 正点原子触摸屏,touchgfx添加触摸驱动
  16. Python爬取拉钩招聘网,用数据告诉你这类程序员最赚钱
  17. python练习题(3)--字符串及正则表达式的应用
  18. ER图向关系模型的转换
  19. 关于在dll中申请内存,外部释放的问题
  20. 开源NLP(自然语言处理)库的功能对比

热门文章

  1. 输入框输入手机号,中间插入空格格式化,且限制11位
  2. 两步验证Authy时间同步问题
  3. 多网卡的 bonding 模式
  4. Webpack打包UMD的export问题
  5. c++使用setw() setfill()输出 保留格式
  6. [杂谈]国产半导体公司及其主要产品一览
  7. python小游戏——飞机大战小游戏(附源码)
  8. 笔记本电脑的电源显示没有了
  9. 三级信息安全技术真题知识点总结-第三套
  10. semaphore java用法_Java Semaphore用法