总汇编语言课程设计四则运算计算器Word下载.docx
《总汇编语言课程设计四则运算计算器Word下载.docx》由会员分享,可在线阅读,更多相关《总汇编语言课程设计四则运算计算器Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
3.2程序流程图及说明
此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。
程序流程图说明:
通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个功能模块,首先要判断输入的字符是否为Q或q,若是,则退出程序,不是则继续输入。
还要判断输入的是否为0--9,‘+’,‘-’,‘*’,‘/’这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。
最后将运算的结果显示在屏幕上,并返回主题程序,使用户可以重新输入。
源程序清单
B_P
EQU
BYTE
PTR
W_P
WORD
D_P
DWORD
CODE
SEGMENT
ASSUME
CS:
CODE,DS:
CODE
ORG
100H
;
主程序开始
NEWSTAR:
JMP
STAR
EVEN
NUM1
DW
0,0
NUM2
NUM3
JGV4
YSF
LABEL
WORD
YSF1
DB
YSF2
JUV
UV
使DS:
SI指向第一有效字符
OVERS
NEAR
CLD
PUSH
AX
OVERS1:
LODSB
CMP
AL,'
'
JZ
OVERS1
AL,9
DEC
SI
AL,13
POP
RET
输出一个制表符
TAB
MOV
SHORT
DISP
输出一个回车换行符
CRLF
CALL
AL,10
显示一个字符
DISP
DX
AH,2
DL,AL
INT
21H
检查是否为运算符
ISYSF
ISJJ
ISYSF1
ISII
ISYSF1:
检查是否是加减运算
ISJJ
+'
-'
检查是否为乘除运算
ISII
*'
/'
\'
数据输出
CX=10
十进制
CX=16
十六进制
DOUT
BX
BP
XOR
BP,BP
DOUT1:
INC
AX,DX
DX,DX
DIV
CX
BX,AX
DX,BX
OR
JNZ
DOUT1
DOUT2:
ADD
0'
9'
JBE
DOUT3
A'
-1
DOUT3:
DOUT2
输入数据在DX:
AX中返回
CX=0
数据为10进制
CX#0
数据为16进制
DATE
DI
AX,AX
DATE1:
DI,AX
JB
DATE7
JA
DATE6
DATE2:
AND
AX,0FH
SHL
DI,1
RCL
DX,1
BX,DI
BP,DX
JCXZ
DATE3
Jmp
short
DATE4
DATE3:
DI,BX
ADC
DX,BP
DATE4:
AX,DI
DX,0
DATE1
DATE5:
DATE2
DATE6:
F'
DATE5
a'
f'
DATE7:
DI,DX
数据1与数据2根据YSF1进行加减运算
JSJJ
AX,NUM2
DX,NUM2+2
YSF1,'
JSJJ1
SUB
NUM1,AX
SBB
NUM1+2,DX
JSJJ2
JSJJ1:
JSJJ2:
数据1与数据2根据YSF1进行乘除运算
JSII1
BX,OFFSET
NUM1
JSII2_1
数据2与数据3根据YSF2进行乘除运算
JSII2
NUM2
JSII2_1:
66H
AX,[BX]
CX,[BX+4]
YSF2,'
JSII2_2
IMUL
JSII2_3
JSII2_2:
CWD
IDIV
XCHG
DX,AX
JSII2_3:
[BX],AX
显示结果
XUJG
AX,JGV4
DX,JGV4+2
CX,10
UV,10
XUJG0
CX,16
XUJG0:
TEST
DX,8000H
XUJG1
XUJG2
DOUT
XUJG2:
NOT
AX,1
XUJG3
('
XUJG3:
)'
XUJG1:
计算结果放入DX:
AX中
JSJG
JSJJ
AX,NUM1
DX,NUM1+2
从DS:
SI处取一个数据
LOADATE
LOADATE1
CX,CX
LOADATE0
CX
取16进制数
LOADATE0:
取数据放入DX:
LOADATE1:
保存数据1数据2及运算符
NUM1+2
NUM2+2
YSF
JUV
JGV4,0
结果值清零
JGV4+2,0
进行四则运算
SZYS
首字符是运算符?
SZYS2
不是,取数并保存
SZYS1:
AX,AX
数据2清零
NUM2,AX
NUM2+2,AX
下个是运算符?
SZYS3
SZYS6
SZYS2:
AX,JGV4
将结果作为数据1
AX,JGV4+2
NUM1+2,AX
SZYS3:
YSF1,AL
YSF2,AL
是加减运算转
SZYS4
取数据2
NUM2+2,DX
SZYS1
结果保存在数据1中
SZYS4:
取数据2并保存
SZYS4_1:
ISYSF
运算符2是加减运算?
SZYS5
不是转
AX
YSF1,AL
保存新的运算符
SZYS5:
YSF2,AL
保存运算符2
取数据3
NUM3,AX
NUM3+2,DX
SZYS4_1
结果保存在数据2中
SZYS6:
CL,AL
SZYS9
SZYS7:
JSJG
JUV,0
SZYS8
SZYS8:
CL,'
SZYS10
JGV4,AX
JGV4+2,DX
SZYS12
SZYS9:
SZYS11
SZYS7
SZYS10:
SZYS1
SZYS11:
STC
SZYS12:
CLC
数制处理
UVIL
UVIL1:
UVIL2
UVIL4
UVIL1
UVIL2:
BX,SI
OVERS
UVIL3
LODSW
AX,'
01'
UVIL3:
[BX-1],AL
UVIL4:
预置结果
YVJG
AH,52H
AX,ES:
[BX-2]
DS,AX
AX,DS:
[0CH]
[0EH]
JGV4+2,AX
CS
DS
ES
保存结果
BCJG
AX,CS:
JGV4
DS:
[0CH],AX
JGV4+2
[0EH],AX
STAR:
SI,81H
STAR1
STAR0:
DX,OFFSET
MESS1
STAR4
STAR1:
YVJG
UVIL
STAR0
SAVESP,SP
SZYS
SP,SAVESP
MESS2
CRLF
XUJG
BCJG
MESS3
STAR4:
AH,9
20H
SAVESP