版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计综合程序设计实验报告、项目简介在我们生活中无时不刻不用到计算,虽说计算并不是很麻烦,但有的时候 复杂的运算仍需要花费我们大量的时间去解决。 所以要有这样一个程序解决这个 问题。基于这个目的,而且在这个学期中,我们又接触到了汇编语言,运用汇编 语言编写了计算器, 来解决这个实际并且经常遇到的问题。 改程序主要针对加减 乘除运算, 可以进行相对复杂的问题, 包含括号的相关运算。 该问题主要注意四 则运算的优先级问题: 惩处运算比加减运算优先级高, 统计运算按从左到右的顺 序计算,含有括号是应该先计算括号里面的内容。二、小组成员具体分工徐其仲:调试汇编语言环境,设计汇编程序功能李 秦
2、:实现程序功能,撰写实验报告三、需求分析与设计问题:利用汇编语言编写计算器 内容:从键盘输入一个四则运算表达式,按 =号输出计算结果,并当结束时 询问:是否继续?如果按 q或 Q,则退出,按其余任意键则继续。计算器主要包括以下几个模块:(1)主程序模块主程序模块首先实现调用子程序 clear 清屏,初始化数据段,调用显示宏 show 显示界面,将寄存器 ax,bx,cx,dx 初始化赋初值为 0,调用回车换行宏,输 入字符或数字并判断调用子程序 dyfq 调用赋权宏 fq 为符号赋权,从而判断优先 级,调用加减乘除子程序 match 对判断出的相应运算符进行运算, 输出运算结果, 判断是否继续
3、,继续则返回输入,不则退出程序。(2)赋权宏模块通过定义宏 fq ,定义了变元 a,b 进行参数传递, 并使用替换运算符 & 使变元 a与标号 s 对应,接着给对应的符号赋予权值,将其权值存入 ch中。(3)加减乘除运算子程序模块运算模块实现了将 ax入栈保存,然后将 ax,bx赋值为 0,判断 cl中的符号 是否为乘号,若为乘号,则将 number 中的数字与其下一位的数字相乘,并把结果存入该位置。类似的若不为乘号则接着判断(4)调用赋权宏子程序模块 该模块实现了赋权宏 fq 为(,),*,、,+,-,=等符号分别赋权值为 5,1,4,4,3,3,0. 从而可以通过设定的权值来判断优
4、先级(5)清屏子程序模块 本模块先将即将用到的 ax,bx,cx,dx 寄存器入栈保存,通过 ah=06h 屏 幕上卷功能,用 bh=07h 将屏幕设置为黑底白字,给 dh,dl 赋值将其清屏位置设 定在 30 行 80 列范围,从而实现了清屏功能,然后再讲 ax,bx, cx,dx 寄存器 出栈(6)回车换行宏模块通过 2号功能的输出功能,将 0dh赋予 dl 输出,再调用 2号功能,将 0ah 赋予 dl 输出,从而实现回车换行功能。(7)9 号功能显示字符串宏模块通过定义宏 show,用 9 号显示功能,通过变元 str 将字符串显示出来程序设计流程图:符号开始清屏加载数据段附加段显示界
5、面Input 输入字符或数字输入的是 = ,数 字,符号?数字Sign=0?保存数字显示数字取 number ,operator 的偏移地址Di+2下移两位将设优先级,并判断sign1 赋 0ySign=0?y n是何符号根据符号决定运算,将值存入 numbOutput 通过 2 号功能显 示结果是否继续?结束四、代码及分析程序代码:datas segmentspace db 1000 dup(' ')partten1 db 5 dup(' '),23 dup( ),'$'str1 db 0ah,0dh,'',179,'*
6、',179,'$'str2 db 0ah,0dh,'',179,'*' ,179,'$'str3 db 0ah,0dh,'',179,'*Weclome!*' ,179,'$'str4 db 0ah,0dh,'',179,'*' ,179,'$'str5 db 0ah,0dh,'',179,'*',179,'$'str6 db 0ah,0dh,'Press any key
7、to continue or q to exit?$'1代表输入1代表不匹配sign1 dw 0;判断是否有数字输入存储区,值为 0代表输入的不是数字,的是数字sign2 dw 0;判断括号是否配对,值为 0代表输入的是符号是匹配的,为number dw 20 dup(0) operator db '$'db 10 dup(0) error db 'Wrong!$' datas ends show macro str lea dx,str mov ah,09h int 21h endm fq macro ascii,a,b cmp al,ascii jn
8、e s&a mov ch,b jmp s7 endm huiche macro mov ah,02h mov dl,0dh int 21h mov ah,02h mov dl,0ah;保存输入的数值;判断输入的运算符是否为空 ;保存该运算符对应的权值;宏定义,显示字符串;宏定义,给运算符赋权值;宏定义,回车换行int 21h endmcodes segment assume cs:codes,ds:datas start:call clear mov ax,0600h call scren ; mov ax,0001h ;int 10h mov ax,datas mov ds,ax l
9、ea di,number lea si,operator show partten1 show str1 show str2 show str3 show str4 show str5 huiche mov ax,0 mov bx,0 mov cx,0 mov dx,0 start1: huiche input:mov ah,01h int 21h cmp al,'='第一种情况,第一次输入的是 = ,则直接 =0. 第一次输入的数分为 2大种情况 :1.=2.数字或字符 :28h-39hje let0;是等号,进一步判断输入括号是否配对第 1大种情况排除后就剩下数字和字符了,
10、再判断是数字还是字符cmp al,28h;第二种情况,第一次输入的与 28h也就是 '('比较jb input;小于 28h时重新输入cmp al,39h;大于 39h是重新输入ja inputcmp al,2fh;判断是数字还是符号jbe let1;是符号转入响应操作inc word ptr sign1; 是数字将数字标志位加一sub al,30h;将 ascii码转为 16进制mov ah,0 xchg ax,di mul bxmov bx,10xchg ax,di add di,ax jmp input let0:cmp word ptr sign2,0 je let1j
11、mp let8let1:cmp word ptr sign1,0 je let2 add di,2mov word ptr sign1,0 let2:call dyfq cmp ch,5 jne let3 inc word ptr sign2 let3:cmp ch,1 jne let4 dec word ptr sign2 let4:cmp byte ptrsi, '$' je let6 cmp ch,si ja let6cmp byte ptrsi, '(' jne let5 dec si jmp input let5:dec simov cl,si cal
12、l match jmp let4 let6:cmp ch,0 je output cmp ch,1 je input inc si mov si,al inc si cmp ch,5;判断配对标志位 ;经过左括号和右括号抵消为 0则跳转;否则显示输入错误;判断数值指针是否已经下移一位;证明之前操作已输入了数字,则下移一字单元位置将其赋 ;将数字标志位复 0;设定优先级;判断输入的符号是否是左括号 ;不是则判断输入的是否是右括号 ;是左括号 ,括号标志位加 1;判断输入的符号是否是右括号;是右括号 ,括号标志位减 1;判断运算符存储区是否为空;【si】的内容为前一个符号或其权值;判断是什么运算符
13、并进行相应的运算;判断是否是等号; )'不保存,输入下一个数;保存符号;判断是否是左括号jne let7 mov ch,2;改变(的权值let7:mov si,ch ; 紧跟着保存符号的权值 jmp inputlet8: lea dx,error mov ah,9 int 21h jmp exit match proc near ;子程序 ,进行相应的运算 push ax mov ax,0 mov bx,0cmp cl,2ah ;乘法运算 jne chu sub di,2 xchg bx,di sub di,2 xchg ax,di imul bx mov di,ax add di,2
14、 jmp finishchu:;除法运算cmp cl,2fh jne jia sub di,2 xchg bx,di sub di,2 xchg ax,di cwd idiv bx mov di,ax add di,2 jmp finish jia:; 加法运算cmp cl,2bh jne jian sub di,2 xchg bx,di sub di,2 add di,bx add di,2jmp finishjian:;减法运算cmp cl,2dhjne finishsub di,2xchg bx,disub di,2sub di,bxadd di,2finish:pop axretmat
15、ch endpdyfq proc;子程序 dyfq 调用宏 fqfq 28h,1,5; 调用宏 fq为(赋权值s1:fq 29h,2,1;)s2:fq 2ah,3,4s3:fq 2fh,4,4;/s4:fq 2bh,5,3;+s5:fq 2dh,6,3s6:fq 3dh,7,0s7:retdyfq endpclear proc near;清屏push axpush bxpush cxpush dxmov ah,06hmov bh,07hmov cx,0mov dh,30mov dl,80int 10hpop axpop bxpop cx pop dx retclear endpoutput:;
16、输出结果sub di,2 cmp word ptrdi,0 jge k1neg word ptrdi ;求负数的绝对值 mov dl,'-' mov ah,2 int 21h k1:mov bx,10000 mov cx,5 mov si,0 k2:mov ax,di cwd div bx mov di,dx cmp al,0 jne k3 cmp si,0 jne k3 cmp cx,1 je k3 jmp k4 k3:mov dl,al add dl,30h mov ah,2 int 21h mov si,1 k4:;实现将 10000变为 1000,100,10mov a
17、x,bx mov dx,0 mov bx,10 div bx mov bx,ax loop k2 huiche show str6mov ah,1int 21hcmp al,'q' ;判断输入是否继续je exitcmp al,'Q'je exitmov word ptrdi+2,0huichelea di,numberlea si,operatorjmp start1exit:mov ah,4chint 21hscren proc nearmov bh,2ehmov cx,0mov dx,184fh ;dos窗口,设置全屏,一共 24行,每行 78,184f
18、就是十进制的 24和78int 10hretscren endpcodes endsend start五、总结本次课程设计的题目是计算器, 通过在课堂上学习的基本知识和基本方法以 及平时积累的知识和方法来实现对带符号数的加减乘除运算。在设计的过程中, 我们组的成员对课上讲解的内容进行了巩固, 同时也了解了一些汇编语言必备的 其他知识,让我们的实际动手能力得以增强。其次,通过本次课程设计,使我们 对模块化,结构化的程序设计方法掌握的更加透彻。在这,就是对宏的定义,调 用以及子程序的定义,调用的方法掌握的更加熟练。本次课程设计是要实现对有符号数的加减乘除运算, 程序开始定义了显示界 面的诸多字符串, 经过调用后的清屏宏指令后显示界面, 接下来, 定义了判断数 字和判断运算符的存储区, 通过这两个存储区来判断当前位置输入的是数字还是 运算符,然后,定义了保存数字和保存运算符的存储区,提示错误的字符串,显 示宏、赋权宏、回车换行符等,通过主程序对哥哥宏及其子程序的调用,判断出 输入时数字还是运算符, 若是运算符又是运算符中的哪类运算符, 然后进行加减 乘除运算,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024美金结算支付合同范本6篇
- 2025年度拆除工程合同纠纷调解协议范本4篇
- 二零二五年度生物科技产业园厂址租赁及研发合作框架协议2篇
- 与消防队合作协议 2篇
- 2024跨境商业交易商议与协议制作详解版
- 2025年度老旧厂房拆迁安置房购置合同4篇
- 2025年度矿产资源测绘劳务分包合同(新版)4篇
- 2024年独家品牌代理协议
- 2025年度产业园租赁与运营一体化合同4篇
- 2024年03月浙江杭银理财岗位招考笔试历年参考题库附带答案详解
- 岩土工程勘察课件0岩土工程勘察
- 《肾上腺肿瘤》课件
- 2024-2030年中国典当行业发展前景预测及融资策略分析报告
- 《乘用车越野性能主观评价方法》
- 幼师个人成长发展规划
- 2024-2025学年北师大版高二上学期期末英语试题及解答参考
- 动物医学类专业生涯发展展示
- 批发面包采购合同范本
- 乘风化麟 蛇我其谁 2025XX集团年终总结暨颁奖盛典
- 2024年大数据分析公司与中国政府合作协议
- 一年级数学(上)计算题专项练习汇编
评论
0/150
提交评论