




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计论文 张志刚华南师范大学增城学院课 程 论 文 题目:汇编语言实现命令菜单设计课 程 名 称 汇编语言程序设计 考 查 学 期 2011/2012 学年 第 一 学期 考 查 方 式 课程论文 姓 名 学 号 专 业 10级计算机系软件工程 成 绩 指 导 教 师 汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。由于我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的关系方式,所以汇编语言的基础是必不可缺的。 通过汇编语言程序设计来学习关键指令,从而深入理解机器工作的基本原理,培养底层编程意识和思想。 本次程序设计的要求为:使用彩色字符显示模式设计命令菜单,菜单选项至少3个,实现程序运行时,选择不同的菜单可以运行不同的子程序,实现不同的功能,命令菜单位置屏幕居中显示。 根据要求分析,可将程序设计分为3个步骤进行。第一步就是对显示命令菜单进行编写,第二步就是对3个子程序分别的进行编写,第三步就是把显示命令菜单与3个子程序进行连接并进行调试。 显示命令菜单的程序如下所示:assume cs:codecode segmentstart: ;-主菜单-menu db main menu ,0menu1 db 1) sentence ,0menu2 db 2) amend letter ,0menu3 db 3) clock ,0menu4 db ,0menu5 db please press 1 3 ,0menu6 db ,0menu_address dw menu,menu1,menu2,menu3,menu4,menu5,menu6 ;菜单地址colour db 0 ;显示颜色; -显示主菜单- m: call cls push cs pop ds mov bx,0 mov dh,8 mov dl,25 mov cx,7 mov colour,2 m1: mov si,menu_addressbx call show inc dh add bx,2 loop m1 mov ah,2 mov bh,0 mov dh,14 mov dl,54 int 10h ;置光标mov ax,4c00h int 21h; -功能: 清屏-cls: push bx push cx push es mov bx,0b800h mov es,bx mov bx,0 mov cx,2000cls1:mov byte ptr es:bx, add bx,2 loop cls1 pop es pop cx pop bx ret;-功能: 显示字符串-;参数: ds:si 指向字符串首地址,字符串以0结尾, (dh)=行号, (dl)=列号,colour存放字符颜色show : push ax push bx push cx push dx push di push si push es mov bx,0b800h mov es,bx mov al,160 mul dh mov di,ax add dl,dl mov dh,0 add di,dx mov ah,colourshow1: mov ch,0 mov cl,si jcxz show_end mov al,cl mov es:di,ax inc si add di,2 jmp show1show_end: pop es pop si pop di pop dx pop cx pop bx pop ax retcode endsend start子程序1指定字符串的输出显示在屏幕上程序如下所示:assume cs:codedata segmentdb welcome to masm!,0data endscode segmentstart: mov ax, 0 mov es, ax mov di, 200h mov ax, cs mov ds, ax mov si, offset r_beg mov cx, offset r_end - offset r_beg cld rep movsb mov ax, 0 mov ds, ax mov word ptr ds:7ch*4, 200h mov word ptr ds:7ch*4 + 2, 0 mov dh,10 mov dl,10 mov cl,2 mov ax,data mov ds,ax mov si,0 int 7ch mov ax, 4c00h int 21h r_beg: push cx push si mov ax, 0b800h mov es, ax mov al, 160 mul dh mov dh, 0 add ax, dx ;设置di=160*dh+dl*2 add ax, dx mov di, ax lp: cmp byte ptr ds:si, 0 je ok mov ch, ds:si inc si mov es:di, ch mov es:di+1, cl add di, 2jmp short lpok: pop si pop cx iretr_end: nopcode endsend start 子程序2输入一单词,并将单词所有字母改为大写显示程序如下所示:assume cs:codedata segment db conversation,0data endsstack segment dw 80 dup (0)stack endscode segmentstart: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,0a0h mov si,0 call letter mov dh,21 ;行号 mov dl,1 ;列号 call show mov ax,4c00h int 21hletter: mov ch,0 mov cl,ds:si jcxz ok mov al,ds:si cmp al,61h jnb p1 inc si jmp short letter p1: cmp al,7ah jna t0 inc si jmp short letter t0:sub al,20h mov ds:si,al inc si jmp short letter ok: ret show: mov ax,0a0h ;算出行 mul dh mov bx,ax mov ax,2h ;算出列 mul dl mov di,ax mov si,0 mov ax,0b800h mov es,ax change:mov cl,ds:si mov ch,0 jcxz ok1 ;判断0结束字符 push ds:si ;把字符串放入栈中 pop es:bx.di ;从栈中取出字符放入显示区的偶地址中 mov ax,2 ;绿色属性 mov es:bx.di.1,ax ;颜色字符放入奇地址中 add di,2 inc si jmp short change ok1: ret code endsend start 子程序3显示系统日期程序如下所示:assume cs:code,ds:datadata segment db yy/mm/dd hh:mm:ss db 9,8,7,4,2,0 ;cmos中时间信息的单元号data endsstack segment dw 8 dup(0)stack endscode segmentstart: mov bx,data mov ds,bxmov bx,stackmov ss,bxmov sp,16d mov si,0 ;si指向yy/mm/dd hh:mm:ss的首地址mov di,17d ;di指向9,8,7,4,2,0的首地址mov cx,6 ;循环次数 s:push cxmov al,ds:di ;从cmos中读出年份的bcd码out 70h,al in al,71hmov ah,al ;al中位读出的数据mov cl,4 shr ah,cl ;ah中为年份的十位数and al,00001111b ;al中为年份的个位数add ah,30h ;把数值转换为对应的ascii码add al,30h ;同上mov byte ptr ds:si,ah ;把读出的时间写入ds段mov byte ptr ds:si+1,al add si,3inc di pop cx loop s ;把读出的内容按yy/mm/dd hh:mm:ss的格式写显存mov bx,0b800hmov es,bxmov ch,ds:0mov byte ptr es:160*16+26*2,chmov cl,ds:1mov byte ptr es:160*16+26*2+2,clmov cl,ds:2mov byte ptr es:160*16+26*2+4,clmov ch,ds:3mov byte ptr es:160*16+26*2+6,chmov cl,ds:4mov byte ptr es:160*16+26*2+8,clmov cl,ds:5mov byte ptr es:160*16+26*2+10,clmov ch,ds:6ov byte ptr es:160*16+26*2+12,chmov cl,ds:7mov byte ptr es:160*16+26*2+14,clmov cl,ds:8mov byte ptr es:160*16+26*2+16,clmov ch,ds:9mov byte ptr es:160*16+26*2+18,chmov cl,ds:10mov byte ptr es:160*16+26*2+20,clmov cl,ds:11mov byte ptr es:160*16+26*2+22,clmov ch,ds:12mov byte ptr es:160*16+26*2+24,chmov cl,ds:13mov byte ptr es:160*16+26*2+26,clmov cl,ds:14mov byte ptr es:160*16+26*2+28,clmov ch,ds:15mov byte ptr es:160*16+26*2+30,chmov cl,ds:16mov byte ptr es:160*16+26*2+32,cl ;调用int 16h的1号功能,从键盘缓冲区读字符mov ah,1int 16hcmp al,q ;若按q键则退出程序je exit jmp start ;使程序反复读cmos,从而实现动态显示时间 exit:mov ax,4c00hint 21hcode endsend start 显示命令菜单与3个子程序合并的程序如下所示:assume cs:codedata1 segmentdb welcome to masm!,0data1 endsdata2 segment db conversation,0data2 endsstack segment dw 80 dup (0)stack endscode segmentstart: org 7e00h ;因为后面引导系统要从7c00h开始要存放512字节的引导程序,所以程序从7e00h开始存放 jmp m;-主菜单-menu db main menu ,0menu1 db 1) sentence ,0menu2 db 2) amend letter ,0menu3 db 3) clock ,0menu4 db ,0menu5 db please press 1 3 ,0menu6 db ,0menu_address dw menu,menu1,menu2,menu3,menu4,menu5,menu6 ;菜单地址t1 db 20*/*/* *:*:*,0 ;显示时间的格式t2 db 9,8,7,4,2,0 ;cmos单元地址t3 dw t1 ;位置 colour db 0 ;显示颜色gb db 33 ;光标位置,在后面设置时间要用到;-显示主菜单- m: call cls push cs pop ds mov bx,0 mov dh,8 mov dl,25 mov cx,7 mov colour,2 m1: mov si,menu_addressbx call show inc dh add bx,2 loop m1 mov ah,2 mov bh,0 mov dh,14 mov dl,54 int 10h ;置光标;-选择功能- mov ah,0 int 16h cmp al,1 je sentence cmp al,2 je amend_letter cmp al,3 je clock jmp m ;返回菜单,等待用户选择;- 指定字符串的输出显示在屏幕上-sentence: call s1ret;- 输入一单词,并将单词所有字母改为大写显示-amend_letter:call s2ret;-动态显示时间- clock:call cls c_1: mov si,0 mov di,2 mov cx,6 mov ah,2 mov bh,0 mov dh,11 mov dl,50 int 10h ;置光标 c_2: mov al,t2si out 70h,al in al,71h mov ah,al shr ah,1 shr ah,1 shr ah,1 shr ah,1 and al,00001111b add ah,30h add al,30h mov t1di,ah mov t1di+1,al inc si add di,3 loop c_2 mov dh,11 mov dl,31 mov si,t3 call show in al,60h cmp al,01h je gom ; 因为位移超过了128,所以用gom来间接返回主菜单 cmp al,3bh je c_4c_3: jmp c_1 c_4: inc byte ptr colour and colour,00001111b jmp c_3gom: jmp m ;间接跳转回主菜单;-初始化显示格式- csh: push si push di push cx push cs pop es mov si,t34 mov di,t32 mov cx,18 cld rep movsb mov gb,33 pop cx pop di pop si ret ;=子程序区=s1: mov ax, 0 mov es, ax mov di, 200h mov ax, cs mov ds, ax mov si, offset r_beg mov cx, offset r_end - offset r_beg cld rep movsb mov ax, 0 mov ds, ax mov word ptr ds:7ch*4, 200h mov word ptr ds:7ch*4 + 2, 0 mov dh,10 mov dl,10 mov cl,2 mov ax,data1 mov ds,ax mov si,0 int 7ch retr_beg: push cx push si mov ax, 0b800h mov es, ax mov al, 160 mul dh mov dh, 0 add ax, dx ;设置di=160*dh+dl*2 add ax, dx mov di, ax lp: cmp byte ptr ds:si, 0 je okay mov ch, ds:si inc si mov es:di, ch mov es:di+1, cl add di, 2jmp short lpokay: pop si pop cx iretr_end: nopret s2: mov ax,data2 mov ds,ax mov ax,stack mov ss,ax mov sp,0a0h mov si,0 call letter mov dh,21 ;行号 mov dl,1 ;列号 call show2 retletter: mov ch,0 mov cl,ds:si jcxz ok mov al,ds:si cmp al,61h jnb p1 inc si jmp short letter p1: cmp al,7ah jna t0 inc si jmp short letter t0:sub al,20h mov ds:si,al inc si jmp short letter ok: retshow2: mov ax,0a0h ;算出行 mul dh mov bx,ax mov ax,2h ;算出列 mul dl mov di,ax mov si,0 mov ax,0b800h mov es,ax change:mov cl,ds:si mov ch,0 jcxz ok1 ;判断0结束字符 push ds:si ;把字符串放入栈中 pop es:bx.di ;从栈中取出字符放入显示区的偶地址中 mov ax,2 ;绿色属性 mov es:bx.di.1,ax ;颜色字符放入奇地址中 add di,2 inc si jmp short change ok1: ret;-功能: 清屏-cls: push bx push cx push es mov bx,0b800h mov es
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年 东莞市望牛墩镇招聘机关事业单位考试试题附答案
- “丝绸之路”丝路文化戏剧商业计划书
- 天然气化工项目可行性研究报告
- 中国苗圃行业市场运营现状及投资战略咨询报告
- 2025-2030年中国席卡夹项目投资可行性研究分析报告
- 中国单反行业市场全景监测及投资前景展望报告
- 中国蜂制品行业市场深度研究及投资规划建议报告
- 信息与计算机工程学院080400仪器科学与技术报录数据分析报告
- 中国清洁能源行业市场调查报告
- 2025年中国鸡精市场全面调研及行业投资潜力预测报告
- 医疗器械法规对医疗器械经销商资质的规定
- 阿森斯失眠评定量表2
- 安全防水知识培训内容
- 梨生产技术规范
- 红旗H7汽车说明书
- 劳保鞋管理制度
- GB/T 15622-2023液压缸试验方法
- 1.2音乐情感及情绪《祝酒歌》课件-高中音乐人音版必修音乐鉴赏
- 制造业转型升级的产业协同创新研究
- 父母多爱我-完整版课件
- 运维服务质量保障措施方案
评论
0/150
提交评论