(2011.11.04)汇编_王爽_第14章_学习小结
来源:互联网 发布:chrome js调用本地exe 编辑:程序博客网 时间:2024/06/06 03:39
(2011.11.04)汇编_王爽_第14章_学习小结
本章内容:
1. 端口的读写
2.CMOS RAM芯片的访问读写
3. shl,shr位移指令
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; 程序名称:1404_CMOS_RAM中存储的时间信息.asm; 程序功能:在屏幕中间显示当前的月份; 程序开始;-----------------------------------------------------------------------------------------------------------------------------------------------assume cs:codecode segmentstart:; 第一步:从CMOS中提取(月份)数据;-----------------------------------------------------------------------------------------------------------------------------------------------; CMOS RAM 芯片内部有两个端口地址用于读写CMOS RAM; 70h —— 地址端口,存放要访问的 CMOS RAM 单元的地址。; 71h —— 数据端口,存放从选定的 CMOS RAM 单元中读取的数据,或,写入到其中的数据。; 端口的读写指令只有两条:in 从端口读取数据 out从端口写入数据(in out 对象只能是ax或者是al); CMOS RAM中存放单元:秒(0),分(2),时(4), 日(7),月(8),年(9)mov al, 8out 70h, al; al的数值为8,使用out指令,将要访问的CMOS单元地址写入到70h中; 以上,指明,CPU通过地址线跟CMOS RAM端口说,CPU将从8号单元中读出数据in al, 71h; 将71h 中读入一个字节到al 中mov ah, al; al中为从CMOS RAM的8号单元中读出的数据mov cl, 4shr ah, cl; ah中为月份的十位数码值; shl指令,将目标操作数的二进制数值左移N位,; shr指令,将目标操作数的二进制数值右移N位.; 空位补零,最后移出位是0还是1写入到标志寄存器中的CFand al, 00001111b; al 中为月份的个位数码值; 第二步:将数据转换为ASCII码;-----------------------------------------------------------------------------------------------------------------------------------------------; 将BCD码转化成十进制相对应的ASCII码; BCD码值 = 十进制数码值; BCD码值 + 30h = 十进制数对应的ASCII码add ah, 30hadd al, 30h; 第三步:将提取出的月份在显示缓冲区中显示;-----------------------------------------------------------------------------------------------------------------------------------------------mov bx, 0b800hmov es, bxmov byte ptr es:[160*12 +40*2], ah; 显示月份的十位数码mov byte ptr es:[160*12+40*2+2], al; 接着月份的个位数码;-----------------------------------------------------------------------------------------------------------------------------------------------; 程序返回mov ax, 4c00hint 21h; 程序结束:;-----------------------------------------------------------------------------------------------------------------------------------------------code endsend start;-----------------------------------------------------------------------------------------------------------------------------------------------
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; 程序名称:实验14_访问CMOS_RAM.asm; 程序功能:以“年/月/日 时:分:秒"的格式,显示当前的日期,时间。; ------------------------------------------------------------------------------------------------ the whole programma start---assume cs:code, ds:timeds, ss:tempa; -------------------------------------------------------------------------------------------statment start ---; 段名:ds:timed; 功能: 用于存放时间的数据; 大小:共占用了12个节字; 数据:存放的数据依次是年月日时分秒; ---------statment end------------------------timeds segmentdb 12 dup('0')timeds ends;-------------------------------------------------------------------------------------------- programma end---; -------------------------------------------------------------------------------------------statment start ---; 段名:ss:tempa; 功能: 用于存放调用程序地址的数据; 大小:共占用了六个字; ---------statment end------------------------tempa segmentdw 6 dup('0')tempa ends;-------------------------------------------------------------------------------------------- programma end---code segmentstart:mov ax, tempa ; 设置堆栈地址为程序设定的堆栈内存地址mov ss, axmov ax, 12mov sp, axmov bx, 0; 依次访问并放入数据进数据段mov al,9; 年call raptdmov al, 8; 月call raptdmov al, 7; 日call raptdmov al, 4; 时call raptdmov al, 2; 分call raptdmov al, 0; 秒call raptdmov ax, 0B800hmov bx, 0mov es, axmov ax, timedsmov ds, axmov ax, 0mov di, axmov cx, 12; 循环显示于显示缓冲区中 lst:mov ax, ds:[di]; 装入数据mov es:[bx], axinc bxmov ax, 01110001B ; 显示的属性:白底蓝字mov es:[bx], axinc bxinc diloop lstmov ax, 4c00hint 21h; -------------------------------------------------------------------------------------------statment start ---; 子程序名称:raptd -- read and push data; 子程序功能:将CMOS RAM中的数据提取出来并且放入timesds内存单元中; 子程序需要的参数: al:需要从外部调入(提取RAM的地址); ---------statment end------------------------raptd:; read and push datapush axmov ax, timeds; 设置存放数据的地址mov es, axpop axmov ah, 0out 70h, alin al, 71h; 先提取出需要的数据mov es:[bx], al; 将数据存入指定地址中call exchangeret;-------------------------------------------------------------------------------------------- programma end---; -------------------------------------------------------------------------------------------statment start ---; 子程序名称:exchange; 子程序功能:将timesds内存单元中的数据从BCD码转换为ASCII码存放; 子程序需要的参数:bx:每存放一次增加数位2; al:需要从外部调入(提取RAM的地址); ---------statment end------------------------exchange:mov al, es:[bx]mov ah, almov cl, 4shr ah, cl; 十位and al, 00001111b; 个位add ah, 30hadd al, 30hmov es:[bx], ahinc bxmov es:[bx], alinc bxinc bxret;-------------------------------------------------------------------------------------------- programma end---code endsend start; ------------------------------------------------------------------------------------------------ the whole programma end---
- (2011.11.04)汇编_王爽_第14章_学习小结
- (2011.11.04) 汇编_王爽_第13章_学习小结
- (2011.11.01)汇编_王爽_第09章_学习小结
- (2011.11.02)汇编_王爽_第10章_学习小结
- (2011.11.02)汇编_王爽_第11章_学习小结
- (2011.11.03)汇编_王爽_第12章_学习小结
- (2011.11.07) 汇编_王爽_第15章_学习小结
- (2011.11.09)汇编_王爽_第16章_学习小结
- (2011.11.10) 汇编_王爽_第17章_学习小结
- (2011.10.29)汇编_王爽_第08章_学习小结
- (2011.10.26)汇编_王爽_第五章_学习小结
- (2011.10.28)汇编_王爽_第六章_学习小结
- (2011.10.29)汇编_王爽_第七章_学习小结
- (2011.11.12)汇编_王爽_全书_学习小记
- 程序员面试宝典_第13章_数据结构基础_排序算法小结(1)
- 程序员面试宝典_第13章_数据结构基础_排序算法小结(2)
- 程序员面试宝典_第13章_数据结构基础_排序算法小结(3)
- 程序员面试宝典_第13章_数据结构基础_排序算法小结(4)
- 一个悖论,求大神指教!!!
- 嵌入式Linux文件系统详细介绍
- SQLServer和VS的安装顺序
- 重写Ext.form.HtmlEditor
- SQL创建一个表值函数的事例
- (2011.11.04)汇编_王爽_第14章_学习小结
- CryEngine中的发布准备
- 模式2——用户注册
- Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
- 塞瓦定理,逆定理,及其引伸的证明
- poj3667经典线段树合并操作
- ActionScript 3中自定义命名空间——封装的实现
- win7上安装vs2010报错:microsoft 应用程序错误报告[解决方法]
- 编写TaskMgr.exe的时候学习的知识点