-
DISP
MACRO V
AR
MOV
AH,2
MOV
DL,V
AR
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,
'+'
p>
;
判断输入的是不是
+
,
-
,
*
,
/
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
N
4
;
判断除数是否为
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
CALL
PRINT
;
输出第二个操作数
DISP
'='
CMP
FLAG
,1
JNZ
N
EXT5
DISP
'-'
NEXT5:
MOV
DI,4
CALL
PRINT
;
输出结果
MOV
AH,4CH
INT 21H
;-----------
输入函数
------------
INPUT PROC NEAR
PUSH
AX
PUSH
BX
PUSH
CX
PUSH
DX
MOV
BX,0
;BX
存放十进制数
CLC
-
-
-
-
-
-
-
-
-
上一篇:snmp-oid详解
下一篇:集装箱结构示意图