汇编语言程序设计————计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书题目: 表达式计算器
学号:
班级: 计算机创新实验班
姓名:廖福轩
目录
一.设计内容 (2)
二.设计方案............................. 错误!未定义书签。
1.主程序模块. ......................... 错误!未定义书签。
2.赋权值模块. ......................... 错误!未定义书签。
3.加减乘除运算子程序模块. ............. 错误!未定义书签。
4.调用赋权宏子程序模块. ............... 错误!未定义书签。
5.回车换行宏模块. ..................... 错误!未定义书签。
号功能显示字符串宏模块. (2)
三.设计框图 (3)
四.程序代码 (4)
五.运行结果............................. 错误!未定义书签。六.设计总结............................. 错误!未定义书签。
计算器汇编语言程序设计
一.设计内容
从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。并要求程序能反复执行直道对“还要继续吗(y/n)”之类的提示回答“n”或“N”为止。
四则运算主要包括以下几个模块:
(1)主程序模块.
(2)赋权宏模块.
(3)加减乘除运算子程序模块.
(4)调用赋权宏子程序模块.
(5)回车换行宏模块.
(6)9号功能显示字符串宏模块.
二.设计方案
1.主程序模块.
主程序初始化数据段,调用显示宏show显示界面,输入字符或数字并判断,调用子程序dyfq调用赋权宏fq为符号赋权,从而判断优先级,调用加减乘除运算子程序ys对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序.
2.赋权宏模块.
通过定义宏fq,定义了变元a,b进行参数传递,并使用替换运算符&使变元a与标号s对应.接着给对应的符号赋予权值,将其权值存入ch中.
3.加减乘除运算子程序模块.
运算模块实现了将ax入栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号*,若为乘号*则将number中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号*则接着判断是否为除号/,若为除号/则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置.
4.调用赋权宏子程序模块.
该模块实现了调用赋权宏fq为(,),*,/,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从而可以通过设定的权值来判断优先级.
5.回车换行宏模块.
通过2号功能的输出功能,将0dh赋予dl输出,再调用2号功能,将0ah赋予dl输出,从而
实现回车换行功能.
号功能显示字符串宏模块.
通过定义宏show,用9号显示功能,通过变元str将字符串显示出来。
三.设计框图
四.程序代码
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, '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 ENDS
SHOW MACRO STR ;宏定义,显示字符串
LEA DX,STR
MOV AH,9
INT 21H
ENDM
FQ MACRO ASCII,A,B ;宏定义,给运算符赋权值
CMP AL,ASCII
JNE S&A
MOV CH,B
JMP S7
ENDM
HCHH 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:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DI,NUMBER
LEA SI,OPERATOR
SHOW STR1
SHOW STR2
SHOW STR3
SHOW STR4