📄 exp3.asm
字号:
DATA SEGMENT
RESULT DW 0
NONUM DB 0
FLAG DB 0 ;INSTRUCT WHETHER OR NOT TO CAL
NEWLINE DB 0AH,0DH,'$'
ERRORMSG DB 0AH,0DH,'ERROR:INVALID EXPRESSION',0AH,0DH,'$'
INPUTMSG DB 'INPUT THE EXPRESSION(END WITH #):$'
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 100 DUP(0)
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK ;LINE 10
START: MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INPUTMSG
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX ;50
INT 21H
MAINLOP:XOR BX,BX
MOV AH,1
INT 21H
MOV BL,AL
CMP BL,'#';END OF THE EXPRESSION
JE ENDEXP ;LINE 20
CMP BL,'+'
JE OPERATOR
CMP BL,'-'
JE OPERATOR
CMP BL,'*'
JE OPERATOR
CMP BL,'/'
JE OPERATOR
CMP BL,'('
JE INSIDE ;LINE 30
CMP BL,')'
JE OUTSIDE
CMP BL,'0'
JB ERROR
CMP BL,'9'
JA ERROR
AND BL,0FH ; IT IS A NUM
CONCAL: INC FLAG ;38
CMP FLAG,2
JE CAL ;40
PUSH BX
JMP MAINLOP
OPERATOR:PUSH BX ;PHSH THE OPERATOR IN THE STACK
JMP MAINLOP
INSIDE: DEC FLAG
JMP MAINLOP
OUTSIDE:
POP BX
JMP CONCAL
ERROR: MOV DX,OFFSET ERRORMSG
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX ;50
INT 21H
MOV AH,4CH
INT 21H
ENDEXP:
MOV DX,OFFSET NEWLINE
MOV AH,9
INT 21H
POP BX
MOV RESULT,BX
MOV CL,4 ;SHIFT NUM 60
MOV CH,4 ;LOOP NUM
SHOW: MOV DL,BH
SHR DL,CL ;
SHL BX,CL
CMP DL,9
JLE DIRECT
ADD DL,7
DIRECT: ADD DL,'0'
MOV AH,2
INT 21H ;70
DEC CH
JNE SHOW
MOV AH,4CH
INT 21H
CAL: POP CX ;//DI IS AN OPERATOR
POP SI ;THE RESULT
CMP CL,'+' ;77
JE PLUSCAL ;
CMP CL,'-'
JE SUBCAL
CMP CL,'*'
JE TIMESCAL
CMP CL,'/'
JE DIVCAL
AFTER: DEC FLAG
PUSH SI
JMP MAINLOP
PLUSCAL:ADD SI,BX
JMP AFTER
SUBCAL: SUB SI,BX
JMP AFTER
TIMESCAL:PUSH AX
MOV AX,SI
MUL BX
MOV SI,AX
POP AX
JMP AFTER
DIVCAL: PUSH DX
PUSH AX
XOR DX,DX
MOV AX,SI
DIV BX
MOV SI,AX
POP AX
POP DX
JMP AFTER
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -