汇编语言实现四则混合运算DOCWord格式文档下载.docx
《汇编语言实现四则混合运算DOCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编语言实现四则混合运算DOCWord格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
MOVAH,1
INT21H
CMPAL,2BH;
判断输入是否为'
+'
JENEXT2
CMPAL,2DH;
-'
JENEXT2
CMPAL,3DH;
判断‘=’
SUBAL,30H
JLNEXT1
CMPAL,9
JGNEXT1
MOVAH,0;
将输入的数转换成10进制数
XCHGAX,BX
MOVCX,10
MULCX
ADDAX,BX
JCNEXT1
JMPNEXT0
NEXT1:
MOVBX,0
MOVDI,OFFSETSTR;
提示出错
DISPLDI
MOVDI,OFFSETSTR2
NEXT2:
CMPDX,0
JNZNEXT1
CMPCOUNT,1;
第一次输入存到buf0以后输入全部存放到buf1
JEL0
MOVBUF0,BX
JMPL1
L0:
MOVBUF1,BX
JMPNEXT3
L1:
MOVOPER,AL;
将操作符保存至oper
MOVCOUNT,1
NEXT3:
CMPOPER,'
;
判读那是何种操作
JEN0
JEN1
N0:
MOVBX,BUF0;
加法相应操作
ADDBX,BUF1
CMPAL,'
='
JENEXT4
N1:
MOVDX,BUF0;
加法操作
CMPFLAG,1;
如果原来buf0里的数是负数用buf1-buf0的绝对值
JNEN2
XCHGDX,BUF1
MOVFLAG,0
N2:
SBBDX,BUF1
JNCN3
MOVFLAG,1
NEGDX;
如果相减为负数则存放绝对值
N3:
MOVBUF0,DX
JENEXT4
NEXT4:
CMPFLAG,1
JNENEXT5
DISP'
若果结果为负数输出负号
NEXT5:
CALLPRINT
POPDX
POPCX
POPBX
POPAX
ENDM
DATASSEGMENT
STRDB0AH,0DH,'
$'
STR0DB'
pleaseinputarithmeticexpressions:
'
0AH,0DH,'
STR2DB'
thenumisunexpected,inputagain:
BUF0DW?
BUF1DW?
FLAGDB0
OPERDB?
COUNTDB0
DATASENDS
STACKSSEGMENT
DW256DUP(?
);
此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,OFFSETSTR0
INPUT
MOVAH,4CH
-----------显示函数--------
PRINTPROCNEAR
MOVCX,0;
记录有效数字位数
MOVBX,10;
除10取余
MOVAX,BUF0
LAST:
MOVDX,0
DIVBX
INCCX
CMPAX,0
JNZLAST
AGE:
POPDX;
出栈输出
ORDX,30H
MOVAH,2
LOOPAGE
RET
PRINTENDP
CODESENDS
ENDSTART
DATA0DB'
PLEASEINPUTANUMBER(0-999):
'
DATA1DB'
overflowinputagain:
DATA2DB'
PLEASEINPUTANOTHERNUMBER(EXP:
123)'
DATA3DB'
PLEASEINPUTANOPREATOR:
DATA4DB'
THEOPERATORISWRONG,INPUTAGAIN:
FLAG1DB0
DATADW3DUP(?
)
MOVDI,OFFSETDATA0;
提示信息
CALLDISPL
MOVSI,0;
SI作为数组下标
CALLINPUT
CALLNEWLINE
MOVDI,OFFSETDATA3;
AGAIN:
MOVAH,1;
1号功能输入四则运算符
判断输入的是不是+,-,*,/
JENEXT0
*'
/'
CALLNEWLINE;
输入的运算符不合法,重新输入
MOVDI,OFFSETDATA4
JMPAGAIN
保存运算符
MOVDI,OFFSETDATA2;
输入第二个操作数
MOVSI,2
MOVAX,DATA[0]
MOVBX,DATA[2]
判断是那种操作,进行运算
JENEXT1
JENEXT3
加法运算
CLC
ADCAX,BX
JNCN1
MOVFLAG,1;
判断是否进位
MOVDATA[4],AX;
运算结果放入内存
JMPOUTPUT
减法运算
SBBAX,BX
JNCN2
判断是否借位
NEGAX
JMPOUTPUT
乘法运算
MULBX
除法运算
CMPBX,0
JNZN4;
判断除数是否为0
CALLERROR
MOVDI,OFFSETDATA2
JMPNEXT4
N4:
OUTPUT:
MOVDI,0;
输出第一个操作数
CALLPRINT
DISPOPER;
输出运算符
MOVDI,2
CALLPRINT;
输出第二个操作数
JNZNEXT5
MOVDI,4
输出结果
INT21H
-----------输入函数------------
INPUTPROCNEAR
----------输入数字----------
判断数字是否合法
CMPAL,0DH
JEL2
JLL1
JGL1
---------转换成十进制数-------
转换成10进制数放入内存
JCL1
JMPL0
L2:
JNZL1
MOVDATA[SI],BX
INPUTENDP
--------------提示信息------------
DISPLPROCNEAR
RET
DISPLENDP
-------回车换行--------
NEWLINEPROCNEAR
MOVDL,0AH
MOVDL,0DH
NEWLINEENDP
----------错误提