汇编语言程序设计-计算器_第1页
汇编语言程序设计-计算器_第2页
汇编语言程序设计-计算器_第3页
汇编语言程序设计-计算器_第4页
汇编语言程序设计-计算器_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-PAGE . z.课程设计说明书题目: 表达式计算器*:41212241班级: 计算机创新实验班:廖福轩 目录TOC o 1-2 h z uHYPERLINK l _Toc357333775一设计容2HYPERLINK l _Toc357333776二设计方案 PAGEREF _Toc357333776 h 2HYPERLINK l _Toc3573337771.主程序模块. PAGEREF _Toc357333777 h 2HYPERLINK l _Toc3573337782.赋权值模块. PAGEREF _Toc357333778 h 2HYPERLINK l _Toc357333779

2、3.加减乘除运算子程序模块. PAGEREF _Toc357333779 h 2HYPERLINK l _Toc3573337804.调用赋权宏子程序模块. PAGEREF _Toc357333780 h 2HYPERLINK l _Toc3573337815.回车换行宏模块. PAGEREF _Toc357333781 h 2HYPERLINK l _Toc3573337826.9号功能显示字符串宏模块.2HYPERLINK l _Toc357333783三设计框图3HYPERLINK l _Toc357333783四程序代码4HYPERLINK l _Toc357333784五运行结果 P

3、AGEREF _Toc357333784 h 9HYPERLINK l _Toc357333784六设计总结 PAGEREF _Toc357333784 h 9计算器汇编语言程序设计一设计容从键盘输入一个十进制两位数的四则运算表达式,如23*568*19/6678,编程计算表达式的值,输出十进制结果有可能是三位或四位十进制,*/位置任意。并要求程序能反复执行直道对还要继续吗?y/n之类的提示答复n或N为止。四则运算主要包括以下几个模块:主程序模块.赋权宏模块.加减乘除运算子程序模块.调用赋权宏子程序模块.回车换行宏模块.9号功能显示字符串宏模块.二设计方案1.主程序模块.主程序初始化数据段,调

4、用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进展运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.2.赋权宏模块.通过定义宏fq,定义了变元a,b进展参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.3.加减乘除运算子程序模块.运算模块实现了将a*入栈保存,然后将a*,b*赋值为0,判断cl中的符号是否为乘号*,假设为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的假设不为乘号*则接着判断是否

5、为除号/,假设为除号/则进展除法运算,然后判断是否为加法,为加法则进展加法运算,接着判断是否为减法,为减法则进展减法运算并将结果存入当前的计算的第二个数的位置.4.调用赋权宏子程序模块.该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.5.回车换行宏模块.通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而实现回车换行功能.6.9号功能显示字符串宏模块.通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。三设计框图开场加载数据段附加段显示界面input输入数

6、字或字符输入的是=,数字,符号?SIGN1=0?保存数字显示错误=数字符号SIGN2=0?ny下移2位将SIGN1赋0设优先级,并判断是何符号ny根据符号决定运算,将值存入numbOutput通过2号功能显示结果是否继续?完毕ynDi+2取number,operator的偏移地址四程序代码DATAS SEGMENT STR1 DB 0AH,0DH,*$ STR2 DB 13,10, * 1 2 3 4 5 *$ STR3 DB 13,10, * 6 7 8 9 0 *$ STR4 DB 13,10, * + - * / = *$STR5 DB 0AH,0DH,*$ STR6 DB 13,10,

7、 PLEASE INPUT A FORMULA: $ STR7 DB CONTINUE(Y/N)$ SIGN1 DW 0 ;值为0代表输入的不是数字,为1代表输入的是数字 SIGN2 DW 0 ;值为0代表输入的符号是匹配的,为1输入的符号不匹配 NUMBER DW 20 DUP(0) ;保存输入的数值 OPERATOR DB $ ;判断输入的运算符是否为空 DB 10 DUP(0) ;保存该运算符对应的权值 ERROR DB WRONG!$ DATAS ENDSSHOW MACRO STR ;宏定义,显示字符串 LEA D*,STR MOV AH,9 INT 21H ENDMFQ MACRO

8、 ASCII,A,B ;宏定义,给运算符赋权值 CMP AL,ASCII JNE S&A MOV CH,B JMP S7 ENDMHCHH MACRO ;宏定义,回车换行 MOV AH,2 MOV DL,0DH INT 21H MOV AH,2 MOV DL,0AH INT 21H ENDM CODES SEGMENT MAIN PROC FAR ASSUME CS:CODES,DS:DATASSTART: MOV A*,DATAS MOV DS,A* LEA DI,NUMBER LEA SI,OPERATOR SHOW STR1 SHOW STR2 SHOW STR3SHOW STR4 SH

9、OW STR5SHOW STR6 MOV A*,0 MOV B*,0 MOV C*,0 MOV D*,0 START1: HCHHINPUT: MOV AH,1 INT 21H CMP AL,= JE LET0 CMP AL,28H ;第二种情况,第一次输入的与28H也就是(比拟 INPUT ;小于28H=(则重新输入 CMP AL,39H JA INPUT ;大于39H=9则重新输入 CMP AL,2FH ;判断是数字还是符号 E LET1 ;是符号转入响应操作 INC WORD PTR SIGN1 ;是数字的话将数字标志位加1 SUB AL,30H MOV AH,0 *CHG A*,DI

10、MUL B* MOV B*,10 *CHG A*,DI ADD DI,A* JMP INPUTCALL FUNRETMAIN ENDP FUN PROC NEAR;*LET0: CMP WORD PTR SIGN2,0;判断配对标志位 JE LET1 ;经过左括号和右括号抵消为0则跳转JMP LET8 ;否则跳转到BC显示输入错误LET1:CMP WORD PTR SIGN1,0 JE LET2 ADD DI,2 ; MOV WORD PTR SIGN1,0 ;将数字标志位复0LET2:CALL DYFQ ;设定优先级 CMP CH,5 ;判断输入的符号是否是左括号 JNE LET3 ;不是则

11、判断输入的是否是右括号 INC WORD PTR SIGN2 ;是左括号,括号标志位加1LET3: CMP CH,1 ;判断输入的是否是右括号 JNE LET4 DEC WORD PTR SIGN2 ;是右括号,括号标志位减1 LET4: CMP BYTE PTRSI,$ ;判断运算符存储区是否为空 JE LET6 CMP CH,SI ;SI的容为前一个符号或其权值 JA LET6 CMP BYTE PTRSI,( JNE LET5 DEC SI JMP INPUTLET5: DEC SI MOV CL,SI CALL YS ;判断是什么运算符并进展相应的计算 JMP LET4 LET6: C

12、MP CH,0 ;判断是否是等号 JE OUTPUT CMP CH,1 JE INPUT ;)不保存,输入下一个数 INC SI MOV SI,AL ;保存符号 INC SI CMP CH,5 ;判断是否是左括号 JNE LET7 MOV CH,2 ;改变(的权值LET7: MOV SI,CH ;紧跟着保存符号的权值 JMP INPUT LET8: LEA D*,ERROR MOV AH,9 INT 21H JMP E*IT RETFUNENDP;*DYFQ PROC ;子程序DYFQ调用宏FQ,判断优先级 FQ 28H,1,5 ;调用宏FQ为(赋权值S1:FQ 29H,2,1 ;调用宏FQ为

13、)赋权值S2:FQ 2AH,3,4 ;调用宏FQ为*赋权值S3:FQ 2FH,4,4 ;调用宏FQ为/赋权值S4:FQ 2BH,5,3 ;调用宏FQ为+赋权值S5:FQ 2DH,6,3 ;调用宏FQ为-赋权值S6:FQ 3DH,7,0 ;调用宏FQ为=赋权值S7:RETDYFQENDP;* OUTPUT: ;输出运算结果 SUB DI,2 CMP WORD PTRDI,0 JGE K1 NEG WORD PTRDI ;求负数的绝对值MOV DL,- MOV AH,2 INT 21HK1: MOV B*,10000 MOV C*,5 MOV SI,0K2: MOV A*,DI CWD DIV B

14、* MOV DI,D* CMP AL,0 JNE K3 CMP SI,0 JNE K3 CMP C*,1 JE K3 JMP K4K3: MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV SI,1K4: MOV A*,B* ;实现将10000变为1000,100,10 MOV D*,0 MOV B*,10 DIV B* MOV B*,A* LOOP K2 HCHH SHOW STR7 MOV AH,1 INT 21H CMP AL,n ;判断是否继续输入,输入n则完毕操作 JE E*IT CMP AL,N JE E*IT MOV WORD PTRDI+2,0

15、LEA DI,NUMBER LEA SI,OPERATOR JMP START1E*IT: MOV AH,4CH INT 21HYS PROC NEAR ;子程序,进展相应的运算 PUSH A* MOV A*,0 MOV B*,0 CMP CL,2AH ;乘法运算 JNE CHU SUB DI,2 *CHG B*,DI SUB DI,2 *CHG A*,DI IMUL B* MOV DI,A* ADD DI,2JMP FINISHCHU: CMP CL,2FH ;除法运算 JNE JIA SUB DI,2 *CHG B*,DI SUB DI,2 *CHG A*,DI CWD IDIV B* M

16、OV DI,A* ADD DI,2 JMP FINISHJIA: CMP CL,2BH ;加法运算 JNE JIAN SUB DI,2 *CHG B*,DI SUB DI,2 ADD DI,B* ADD DI,2 JMP FINISHJIAN: CMP CL,2DH ;减法运算 JNE FINISH SUB DI,2 *CHG B*,DI SUB DI,2 SUB DI,B* ADD DI,2FINISH: POP A* RETYS ENDP;*CODES ENDS END START五运行结果六设计总结本次设计让我学到了很多关于汇编的知识,首先,本次设计是以四则运算为主题,通过在课堂上学习的

17、根本知识和根本方法以及平时积累的知识和方法来实现对带符号数的加减乘除运算,在设计过程中,对我已有的知识进展了稳固,对我之前不太了解的知识有了一定的了解,通过亲身去编写程序,使得自己的实际动手能力得以增强。其次,通过本次设计,使我对模块化,构造化的程序设计方法掌握的更加透彻,再者,就是对于宏的定义,调用以及子程序的定义,调用的方法掌握的更加熟练。本次设计是要实现对有符号数的加减乘除等四则运算,程序开场先定义了显示界面的诸多字符串,经过显示界面,接下来,定义了判断数字和判断运算符的存储区,通过这两个存储区来判断当前位置输入的是数字还是运算符,然后,定义了保存数字和保存运算符的存储区,提示错误的字符串,显示宏,赋权宏,回车换行宏等,通过主程序对各个宏及子程序的调用,判断出输入的是数字还是运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论