ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:19.43KB ,
资源ID:11305562      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11305562.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实例masm专用.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实例masm专用.docx

1、汇编实例masm专用这是我们湖南农业大学09级计算机汇编语言的课程设计我们所用的书籍是钱晓捷的微机原理与接口技术第四版编译环境:MASM可以在网址: 下载。陈梦林刷屏显示时钟;display the current time of system every second include io16.inc ;.data .codestart: mov ax,data mov ds,ax xor al,al xor dl,dl ;为按秒输出做准备 again: mov al,0 out 70h,al in al,71h cmp dl,al mov dl,al jne msg;以上为判断是否过了一秒

2、,有则输出时间,没有则继续执行again je msg1 msg:call clear mov al,4 out 70h,al in al,71h call disphb mov al,: call dispc;通过cmos ram获得小时 mov al,2 out 70h,al in al,71h call disphb mov al,: call dispc;通过cmos ram获得分钟 mov al,0 out 70h,al in al,71h call disphb call dispcrlf;通过cmos ram获得秒 call kbtest ;判断是否输入空格子程序 cmp al,

3、20h jz jieshu ;输入空格则退出 msg1: jmp again jieshu: exit 0kbtest proc mov ah,1 int 16h jnz kbtest_1 mov ax,0ffh stc ret ;没有内容自动返回kbtest_1: mov ah,7 int 21h mov ah,0 cmp al,0 jnz kbtest_2 ;输入的是ASCII码(AL) mov ah,7 int 21h ;取扩展ASCII码(非字符码的功能键) mov ah,1 clckbtest_2: retkbtest endpclear proc push ax ;入栈保护现场 p

4、ush bx push cx push dx mov ax,00h ;ah=06(滚动)al=00(全屏空白) mov bh,3eh ;设置背景颜色(2)和前景颜色(e) sub cx,cx mov dx,5f5fh int 10h pop dx ;出栈恢复现场 pop cx pop bx pop ax retclear endp end start张运泉时钟代码;操作说明书:;输入1 表示时间以12进制显示,输入其它以24进制显示;在运行时可以输入字符进行时钟显示格式自由切换,输入空格程序运行结束include io16.inc.dataampm word 1010hpdate byte p

5、resent date,13,10,0;显示ptime byte present time,13,10,0;显示banquan byte Studeng:zhangyunquan Teacher:lidonghui,0design_time bytedate:2011-6-9,0ha byte 09hlie byte 35year byte 00hmouth byte 00hday byte 00hhour byte 00hmint byte 00hsecnd byte 00hchoice byte 00hhell byte input 1 select 12hour-system,intpu

6、t any other keys select 24-system,13,10,0mday byte 00h.codestart: mov ax,data mov ds,ax call clear mov ha,08h;保存光标移动到某行数的位置 mov lie,5;光标移动到某列的位置 call cursor;移动光标并隐藏 mov eax,offset hell call dispmsg mov ha,09h;保存光标移动到某行数的位置 mov lie,39;光标移动到某列的位置 call cursor;移动光标并隐藏 call readc;获取输入参数,来判断时钟的格式 mov choi

7、ce,al;保存选择参数 call time exit 0;*主程序结束*;*光标移动子程序*cursor proc; 确定光标所在位置 push eax push ecx push edx mov dh,ha ;行数 mov dl,lie ;列数 mov ah,02h ;int 21的02h是设置光标 int 10h ;确定光标的位置,使其居在中间 mov cx,2000h ;隐藏光标 mov ah,01h ;int 21 中的01h为设置光标形状 int 10h ; pop edx pop ecx pop eax retcursor endp;*光标移动子程序结束*;*清屏子程序*clea

8、r proc ;清屏子程序 push eax push ebx push ecx push edx mov ax,0600h;设置相关参数,清屏 mov cx,0000h ; mov dx,184fh mov dx,184fh mov bh,07h int 10h pop edx pop ecx pop ebx pop eax retclear endp;*清屏子程序结束*;*获取日期子程序*date proc push eax mov al,9 ;cmos ram 9,8,7依次存放着年 月 日 70h输出71h输入 out 70h,al in al,71h mov ah,al ;将al由B

9、CD码转换为10进数 and ah,11110000b and al,00001111b shr ah,1 add al,2 add al,ah mov year ,al mov al,8;得到月份 out 70h,al in al,71h mov mouth,al mov al,7;得到日 out 70h,al in al,71h mov day,al pop eax retdate endp;*获取日期子程序结束*;*获取时间子程序,且所有调用子程序操作基一上在这个子程序中实现*time proc push eax push ebx push ecx push edx go: mov ha

10、,08h;保存光标移动到某行数的位置 mov lie,5;光标移动到某列的位置 call cursor;移动光标并隐藏 mov eax,offset hell call dispmsg;显示 mov ha,0ah;保存光标移动到某行数的位置 mov lie,35;光标移动到某列的位置 call cursor;移动光标并隐藏 mov eax,offset pdate call dispmsg mov ha,0ch mov lie,35 call cursor mov eax,offset ptime call dispmsg mov ha,15h mov lie,20 call cursor;调

11、用子程序,将光标移到指定位置并隐藏 mov eax,offset banquan call dispmsg mov ha,16h mov lie,35 call cursor mov eax,offset design_time call dispmsg call date ;调用子程序得到日期 mov ah,02 ;获取系统时间 int 1ah ;系统时间调用 mov hour,ch ;mov hour,00h;调试小时用,给hour赋各种值(从00h到23h),发现了许多错误,并改过来了 mov mint,cl mov secnd,dh call print a1: mov ah,0bh

12、;调用DOS 功能0BH 检测键盘是否有输入 int 21h cmp al,00h ;检测是否有输入 00h表无字符输入,ffh表有输入 jne a2 ;有则跳到a2 jmp go ;没有则回到goa2: mov ah, 08h ;有输入,将输入保存到al中 int 21h mov choice,al;将输入的参数赋值到选择参数中,用以进行时钟格式判断 cmp al,32 ;是空格,退出 je ex call clear ; 如里有输入,不是空格,很有可能改变了时钟显示的格式,所以要清屏 jmp go ;循环ex: pop edx pop ecx pop ebx pop eax rettime

13、 endp;*获取时间子程序结束*;*打印子程序*print proc push eax mov ha,0bh mov lie,35 call cursor ;移光标 mov al,20 cmp year,00h;如果年份后两位是00,则前两位要增一,如从2099年-2100年 jne cont inc alcont: call dispuib mov al,year;显示年 call dispuib mov al,- call dispc mov al,mouth;显示月 call disphb mov al,- call dispc mov al,day;显示日 call disphb m

14、ov ha,0dh mov lie,35 call cursor;移光标 cmp choice,49;由choice参数来判断时钟显示的方式 je twe mov al,hour;24进制 call disphb;显示时 mov al,: call dispc mov al,mint;显示分 call disphb mov al,: call dispc mov al,secnd;显示秒 call disphb jmp exttwe: mov al,hour;12进制显示 cmp al,12h;时间大于12小时吗,大于的话跳到下午时间操作 ja pm cmp al,00h;时间为早上凌晨(0时

15、)吗,时凌晨的话,12进制显示为早上12点 je zeroam jmp amzeroam: mov al,12h;如里是24进制凌晨,刚改为12进制早上12点,不得跳到am,因为此时al为12H,如不从,则会当作时间为12h处理,则am会误赋值为pm jmp am1am: mov al,houram1: call disphb cmp hour,12h;因为12点是个特殊值,因为从24是进制换12进制不需减值,但要改成下午(pm) je twepm mov ampm,ma;am显示 jmp gopm: mov al,hour;时在19h时到22h时之间化12进制时减24(20h),其它减18(

16、12h),注意以bcd码格式的 cmp al,19h;大于19h吗 ja ok1;大于,跳转 jmp ok2ok1: cmp al,21h;大于21h吗 ja ok2;不大于,跳转 sub al,24;满足在19H到22H之间,减24 jmp ok3ok2: sub al,18;不满足,减去18ok3: call disphbtwepm:mov ampm,mp;pm显示 jmp gogo: mov al,: call dispc mov al,mint call disphb mov al,: call dispc mov al,secnd call disphb mov ax,ampm ca

17、ll dispc mov al,ah call dispc ext: pop eax retprint endp;*打印子程序结束*;*end start彭慧剑的九九乘法表 include io32.inc .dataequal byte ?,*,?,=,0 ;用来显示类似于1*2=3格式的字符串, ;其中的?用来替代乘数和被乘数ent byte 0dh,0ah,0;用来显示回车ji byte ?,0;用来存储乘积space byte ,0;用来显示空格 .codestart:mov cl,0;外循环变量again: ;显示一个回车 push eax mov eax,offset ent ca

18、ll dispmsg pop eax ;外循环变量增加,内循环变量a1初始化为1 inc cl cmp cl,10 mov al,1 jz over;程序跳到over段,结束again1: ;计算乘积 push eax mul cl mov ji,al pop eax ;显示单个乘数*被乘数=积形式的字符段 ;其中寄存器ecx,eax要压入栈中保护起来 push ecx push eax add al,30h add cl,30h mov equal,al mov equal+2,cl mov eax,offset equal call dispmsg WriteUDecByte ji;利用宏

19、指令WriteUDecByte以十进制显示十六进制的数 mov eax,offset space call dispmsg pop eax pop ecx ;内循环变量加一,比较与外循环变量的大小 ;大于则跳回外循环again中,小于则继续循环 inc al cmp al,cl jg again jmp again1 over : exit 0;结束字段 end start彭慧剑的进制转换hh macro push eax mov eax,offset ent call dispmsg pop eaxendm include io32.inc .dataent byte 0dh,0ah,0st

20、ring byte 1:小写转大写,0ah,0dh,2:大写转小写,0ah,0dh, 3:二进制转十六进制,0ah,0dh,4:十六进制转二进制, 0ah,0dh,5:十六进制转十进制,0ah,0dh,6:按q退出,0tmp word 6 dup(?),0 .codestart:cycle: mov eax,offset string call dispmsg hh call readc cmp al,71h jz over cmp al,31h jz z1 cmp al,32h jz z2 cmp al,33h jz z3 cmp al,34h jz z4 cmp al,35h jz z5z1: hh call readc sub al,20h hh call dispc hh jmp cyclez2: hh call readc add al,20h hh call dispc hh jmp cyclez3: hh call readbb hh call disphb hh jmp cyclez4: hh call readhb hh call dispbb hh jmp cyclez5: hh call readhb hh call dispuib hh jmp cycleover: exit 0 end start

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1