汇编语言实现四则运算.doc
文本预览下载声明
DISP MACRO VAR
MOV AH,2
MOV DL,VAR
INT 21H
ENDM
DATAS SEGMENT
DATA0 DB PLEASE INPUT A NUMBER(0-999):,$
DATA1 DB over flow input again:,$
DATA2 DB PLEASE INPUT ANOTHER NUMBER(EXP:123),$
DATA3 DB PLEASE INPUT AN OPREATOR:,$
DATA4 DB THE OPERATOR IS WRONG,INPUT AGAIN:,$
OPER DB ?
FLAG DB 0
FLAG1 DB 0
DATA DW 3 DUP(?)
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DI,OFFSET DATA0 ;提示信息
CALL DISPL
MOV SI,0 ;SI作为数组下标
CALL INPUT
CALL NEWLINE
MOV DI,OFFSET DATA3 ;提示信息
CALL DISPL
AGAIN:
MOV AH,1 ;1号功能输入四则运算符
INT 21H
CMP AL,+ ;判断输入的是不是+,-,*,/
JE NEXT0
CMP AL,-
JE NEXT0
CMP AL,*
JE NEXT0
CMP AL,/
JE NEXT0
CALL NEWLINE ;输入的运算符不合法,重新输入
MOV DI, OFFSET DATA4
CALL DISPL
JMP AGAIN
NEXT0:
MOV OPER,AL ;保存运算符
CALL NEWLINE
MOV DI,OFFSET DATA2 ;输入第二个操作数
CALL DISPL
MOV SI,2
CALL INPUT
MOV AX,DATA[0]
MOV BX,DATA[2]
CMP OPER,+ ;判断是那种操作,进行运算
JE NEXT1
CMP OPER,-
JE NEXT2
CMP OPER,*
JE NEXT3
CMP OPER,/
JE NEXT4
NEXT1: ;加法运算
CLC
ADC AX,BX
JNC N1
MOV FLAG,1 ;判断是否进位
N1: MOV DATA[4],AX ;运算结果放入内存
JMP OUTPUT
NEXT2: ;减法运算
CLC
SBB AX,BX
JNC N2
MOV FLAG,1 ;判断是否借位
NEG AX
N2: MOV DATA[4],AX ;运算结果放入内存
JMP OUTPUT
NEXT3: ;乘法运算
CLC
MOV DX,0
MUL BX
MOV DATA[4],AX ;运算结果放入内存
JMP OUTPUT
NEXT4: ;除法运算
CLC
MOV DX,0
CMP BX,0
JNZ N4 ;判断除数是否为0
CALL NEWLINE
CALL ERROR
CALL NEWLINE
MOV DI,OFFSET DATA2
CALL DISPL
MOV SI,2
CALL INPUT
JMP NEXT4
N4: DIV BX
MOV DATA[4],AX ;运算结果放入内存
OUTPUT:
CALL NEWLINE
MOV DI,0 ;输出第一个操作数
CALL PRINT
DISP OPER ;输出运算符
MOV DI,2
显示全部