汇编语言计算器课程设计Word文件下载.docx
《汇编语言计算器课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言计算器课程设计Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
完成对数据的进一步加工处理,转换格式并得出结果。
首先根据输入调用对应的“+”、“-”、“*”、“/”四个函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几个模块服务的,大致的流程图如下图2:
图2子模块流程图
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
DATASEGMENT
OPSDB?
OPDDB?
OPERDB?
TITDB'
***********************************'
0DH,0AH
DB'
*MadeBy*'
0DH,0AH;
0DH代表回车
*TongXinJiSuanQiXiaoZu*'
0AH代表换行
*ChangqianZuoxinWangxin*'
*WangdayongTangkuanlong*'
*+-*/*'
*Y,y:
continueN,n:
quit*'
*************Calculate*************$'
0DH,0AH
Tip1DB'
Inputthefirstoperator(0---9):
$'
Tip2DB'
Pleaseinputtheoper(+,-,*,/):
ErrorDB'
Error!
Pleseinputtheoperagain:
Tip3DB'
Inputthesecondoperator(0---9):
ResultDB'
--------------->
theresultis:
0DH,0AH
QuitDB'
Chooserepeatorquit?
(Y/y/N/n):
TsaveDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA;
初始化DS:
DX
MOVDS,AX
Remain:
MOVBL,0;
Oper(恢复)初始状态
MOVOPS,BL
MOVOPER,BL
MOVOPD,BL
LEASI,OPS;
OPS的偏移地址送给SI
LEADI,OPD;
OPD的偏移地址送给DI
CALLEnter
LEADX,TIT
MOVAH,9
INT21H
CALLInput1;
调用输入第一个操作数
CALLOperat;
调用输入操作符
CALLInput2;
调用输入第二个操作数
CALLCalculate;
调用计算方法
CALLStrQuit;
调用判断程序再次执行
MOVAH,1
INT21H
CMPAL,'
Y'
JERemain
y'
;
选择Y返回Remain继续执行
N'
JEEXIT
n'
EXIT:
MOVAH,4CH;
若不是Y则结束
;
输入操作数子程序---------------------------------------------------------
Input1PROCNEAR
LEADX,Tip1;
输入第一个操作数提示----------
INT21H;
十进制输入提示
BCDin1:
CMPAL,0DH
JEEndBCDin1;
等于回车则返回继续输入运算符
CMPAL,30H
JBBCDin1;
<
0时转exitinD退出
CMPAL,39H
JABCDin1;
>
9时转exitinD退出
ANDAL,0FH;
清除高位
MOV[SI],AL
INCSI
LOOPBCDin1
EndBCDin1:
CALLEnter;
回车换行
RET
Input1ENDP
Input2PROCNEAR
LEADX,Tip3;
输入第二个操作数提示----------
BCDin2:
JEEndBCDin2;
LOOPBCDin2
EndBCDin2:
Input2ENDP
输入操作符子程序-------------------------------------------------------
OperatPROCNEAR
ReOperat:
LEADX,Tip2;
输入操作符提示
+'
JEOperSave;
若为"
+"
则存在oper
-'
JEOperSave
*'
/'
JMPOperError
OperError:
LEADX,Error;
输入操作符的错误提示
JMPReOperat
OperSave:
MOVOPER,AL
RET
OperatENDP
计算方法子程序-----------------------------------------------------
CalculatePROCNEAR
MOVBL,OPER
CMPBL,'
JZADCProc;
若为加法,则转到adcProc
JZSUBProc
JZMULProc
JZDIVProc
ADCProc:
CALLStrResult;
加法
MOVAL,OPS
ADCAL,OPD
CALLDispl
JMPendCalculate
SUBProc:
减法
CALLStrResult
SUBAL,OPD
JMPendCalculate
MULProc:
乘法
MOVAL,OPD
MULOPS
DIVProc:
除法
MOVAH,0
DIVOPD
endCalculate:
CalculateENDP
DisplPROCNEAR
MOVTsave,AL
MOVAL,Tsave
MOVBL,100
DIVBL;
除以100
CALLOutput;
显示百位数
MOVAL,AH
MOVBL,10
除以10
显示十位数
显示个位数
DisplENDP
StrResultPROCNEAR
LEADX,Result
StrResultENDP
OutputPROCNEAR;
十进制输出
PUSHAX
ADDAL,30H;
将AL中的十进制数变成ASCII码
MOVDL,AL
MOVAH,2
POPAX
OutputENDP
回车换行子程序--------------------------------------------------
EnterPROCNEAR
MOVDL,0AH
MOVDL,0DH
EnterENDP
判断程序再次执行子程序-----------------------------------------------
StrQuitPROCNEAR
回车换行
LEADX,Quit
StrQuitENDP
CODEENDS
ENDSTART
3.系统调试
(1)在屏幕上显示一个由‘*’组成边框的矩形窗口;
(2)自动闪烁光标,并提示输入信息;
(3)能够完成单项表达式的输入、显示和运算;
(4)编制并调试出程序。
单击开始,启动运行,输入cmd,启动命令提示符,进入DOS系统。
如下图:
图3启动命令提示符
源程序名存为qian.asm,在dos