汇编语言实现四则混合运算.docx
- 文档编号:7325966
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:14
- 大小:17.18KB
汇编语言实现四则混合运算.docx
《汇编语言实现四则混合运算.docx》由会员分享,可在线阅读,更多相关《汇编语言实现四则混合运算.docx(14页珍藏版)》请在冰豆网上搜索。
汇编语言实现四则混合运算
;本程序实现加减混合运算输入格式必须为1+2-3=
;程序思路:
遇到一个操作符执行前一次运算,等号执行最后一次运算,然后保存本次操作符
;---------提示信息------
DISPLMACRODI
MOVAH,9
MOVDX,DI
INT21H
ENDM
;-----------
DISPMACROVAR
MOVAH,2
MOVDL,VAR
INT21H
ENDM
;--------输入函数-------
INPUTMACRO
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVBX,0;BX存放十进制数
CLC
MOVDX,0
NEXT0:
MOVAH,1
INT21H
CMPAL,2BH;判断输入是否为'+'
JENEXT2
CMPAL,2DH;判断输入是否为'-'
JENEXT2
CMPAL,3DH;判断‘=’
JENEXT2
SUBAL,30H
JLNEXT1
CMPAL,9
JGNEXT1
MOVAH,0;将输入的数转换成10进制数
XCHGAX,BX
MOVCX,10
MULCX
ADDAX,BX
JCNEXT1
XCHGAX,BX
JMPNEXT0
NEXT1:
MOVDX,0
MOVBX,0
MOVDI,OFFSETSTR;提示出错
DISPLDI
MOVDI,OFFSETSTR2
DISPLDI
JMPNEXT0
NEXT2:
CMPDX,0
JNZNEXT1
CMPCOUNT,1;第一次输入存到buf0以后输入全部存放到buf1
JEL0
MOVBUF0,BX
JMPL1
L0:
MOVBUF1,BX
JMPNEXT3
L1:
MOVOPER,AL;将操作符保存至oper
MOVCOUNT,1
MOVBX,0
JMPNEXT0
NEXT3:
CMPOPER,'+';判读那是何种操作
JEN0
CMPOPER,'-'
JEN1
N0:
MOVBX,BUF0;加法相应操作
ADDBX,BUF1
MOVBUF0,BX
CMPAL,'='
JENEXT4
JMPL1
N1:
MOVDX,BUF0;加法操作
CMPFLAG,1;如果原来buf0里的数是负数用buf1-buf0的绝对值
JNEN2
XCHGDX,BUF1
MOVFLAG,0
N2:
CLC
SBBDX,BUF1
JNCN3
MOVFLAG,1
NEGDX;如果相减为负数则存放绝对值
N3:
MOVBUF0,DX
CMPAL,'='
JENEXT4
JMPL1
NEXT4:
CMPFLAG,1
JNENEXT5
DISP'-';若果结果为负数输出负号
NEXT5:
CALLPRINT
POPDX
POPCX
POPBX
POPAX
ENDM
DATASSEGMENT
STRDB0AH,0DH,'$'
STR0DB'pleaseinputarithmeticexpressions:
',0AH,0DH,'$'
STR2DB'thenumisunexpected,inputagain:
',0AH,0DH,'$'
BUF0DW?
BUF1DW?
FLAGDB0
OPERDB?
COUNTDB0
DATASENDS
STACKSSEGMENT
DW256DUP(?
);此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,OFFSETSTR0
DISPLDI
INPUT
MOVAH,4CH
INT21H
;-----------显示函数--------
PRINTPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVCX,0;记录有效数字位数
MOVBX,10;除10取余
MOVAX,BUF0
LAST:
MOVDX,0
DIVBX
PUSHDX
INCCX
CMPAX,0
JNZLAST
AGE:
POPDX;出栈输出
ORDX,30H
MOVAH,2
INT21H
LOOPAGE
POPDX
POPCX
POPBX
POPAX
RET
PRINTENDP
CODESENDS
ENDSTART
DISPMACROVAR
MOVAH,2
MOVDL,VAR
INT21H
ENDM
DATASSEGMENT
DATA0DB'PLEASEINPUTANUMBER(0-999):
','$'
DATA1DB'overflowinputagain:
','$'
DATA2DB'PLEASEINPUTANOTHERNUMBER(EXP:
123)','$'
DATA3DB'PLEASEINPUTANOPREATOR:
','$'
DATA4DB'THEOPERATORISWRONG,INPUTAGAIN:
','$'
OPERDB?
FLAGDB0
FLAG1DB0
DATADW3DUP(?
)
DATASENDS
STACKSSEGMENT
DW256DUP(?
)
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVDI,OFFSETDATA0;提示信息
CALLDISPL
MOVSI,0;SI作为数组下标
CALLINPUT
CALLNEWLINE
MOVDI,OFFSETDATA3;提示信息
CALLDISPL
AGAIN:
MOVAH,1;1号功能输入四则运算符
INT21H
CMPAL,'+';判断输入的是不是+,-,*,/
JENEXT0
CMPAL,'-'
JENEXT0
CMPAL,'*'
JENEXT0
CMPAL,'/'
JENEXT0
CALLNEWLINE;输入的运算符不合法,重新输入
MOVDI,OFFSETDATA4
CALLDISPL
JMPAGAIN
NEXT0:
MOVOPER,AL;保存运算符
CALLNEWLINE
MOVDI,OFFSETDATA2;输入第二个操作数
CALLDISPL
MOVSI,2
CALLINPUT
MOVAX,DATA[0]
MOVBX,DATA[2]
CMPOPER,'+';判断是那种操作,进行运算
JENEXT1
CMPOPER,'-'
JENEXT2
CMPOPER,'*'
JENEXT3
CMPOPER,'/'
JENEXT4
NEXT1:
;加法运算
CLC
ADCAX,BX
JNCN1
MOVFLAG,1;判断是否进位
N1:
MOVDATA[4],AX;运算结果放入存
JMPOUTPUT
NEXT2:
;减法运算
CLC
SBBAX,BX
JNCN2
MOVFLAG,1;判断是否借位
NEGAX
N2:
MOVDATA[4],AX;运算结果放入存
JMPOUTPUT
NEXT3:
;乘法运算
CLC
MOVDX,0
MULBX
MOVDATA[4],AX;运算结果放入存
JMPOUTPUT
NEXT4:
;除法运算
CLC
MOVDX,0
CMPBX,0
JNZN4;判断除数是否为0
CALLNEWLINE
CALLERROR
CALLNEWLINE
MOVDI,OFFSETDATA2
CALLDISPL
MOVSI,2
CALLINPUT
JMPNEXT4
N4:
DIVBX
MOVDATA[4],AX;运算结果放入存
OUTPUT:
CALLNEWLINE
MOVDI,0;输出第一个操作数
CALLPRINT
DISPOPER;输出运算符
MOVDI,2
CALLPRINT;输出第二个操作数
DISP'='
CMPFLAG,1
JNZNEXT5
DISP'-'
NEXT5:
MOVDI,4
CALLPRINT;输出结果
MOVAH,4CH
INT21H
;-----------输入函数------------
INPUTPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVBX,0;BX存放十进制数
CLC
MOVDX,0
L0:
;----------输入数字----------
MOVAH,1;判断数字是否合法
INT21H
CMPAL,0DH
JEL2
SUBAL,30H
JLL1
CMPAL,9
JGL1
;---------转换成十进制数-------
MOVAH,0;转换成10进制数放入存
XCHGAX,BX
MOVCX,10
MULCX
ADDAX,BX
JCL1
XCHGAX,BX
JMPL0
L1:
MOVDX,0
MOVBX,0
CALLNEWLINE
CALLERROR
JMPL0
L2:
CMPDX,0
JNZL1
MOVDATA[SI],BX
MOVDX,0
POPDX
POPCX
POPBX
POPAX
RET
INPUTENDP
;--------------提示信息------------
DISPLPROCNEAR
MOVAH,9
MOVDX,DI
INT21H
RET
DISPLENDP
;-------回车换行--------
NEWLINEPROCNEAR
PUSHAX
PUSHDX
MOVDL,0AH
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
POPDX
POPAX
RET
NEWLINEENDP
;----------错误提示----------------
ERRORPROCNEAR
PUSHAX
PUSHDX
MOVDX,OFFSETDATA1
MOVAH,9
INT21H
POPDX
POPAX
RET
ERRORENDP
;-----------显示函数--------
PRINTPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVCX,0
MOVBX,10
MOVAX,DATA[DI]
LAST:
MOVDX,0;除10压栈
DIVBX
PUSHDX
INCCX
CMPAX,0
JNZLAST
AGE:
POPDX;出栈输出
ORDX,30H
MOVAH,2
INT21H
LOOPAGE
POPDX
POPCX
POPBX
POPAX
RET
PRINTENDP
CODESENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实现 四则 混合 运算