|
Source program:
RIGHT EQU 1
WRONG EQU 0
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
;
DATA SEGMENT PARA PUBLIC 'DATA'
DATA ENDS
INTER SEGMENT AT 0H
ORG 100H
INT_40 DB 4 DUP(?) ;+
INT_41 DB 4 DUP(?) ;-
INT_42 DB 4 DUP(?) ;*
INT_43 DB 4 DUP(?) ;/
INTER ENDS;
CODE SEGMENT PARA PUBLIC 'CODE';
ASSUME CS:CODE,DS:DATA,ES:INTER
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,INTER
MOV ES,AX
MOV SI,OFFSET INT_40
MOV AX,OFFSET ADD
MOV ES:[SI],AX
ADD SI,2
MOV AX,SEG ADD
MOV ES:[SI],AX
ADD SI,2
MOV SI,OFFSET INT_41
MOV AX,OFFSET SUB
MOV ES:[SI],AX
ADD SI,2
MOV AX,SEG SUB
MOV ES:[SI],AX
ADD SI,2
MOV SI,OFFSET INT_42
MOV AX,OFFSET MUL
MOV ES:[SI],AX
ADD SI,2
MOV AX,SEG MUL
MOV ES:[SI],AX
ADD SI,2
MOV SI,OFFSET INT_43
MOV AX,OFFSET DIV
MOV ES:[SI],AX
ADD SI,2
MOV AX,SEG DIV
MOV ES:[SI],AX
MOV BX,0
FIRST: MOV AH,0
INT 16H
CALL JUDGE
AND AH,0FH
JZ FIRST
CALL DISCHAR
SUB AL,30H
MOV BL,AL
LOOP: MOV AH,0
INT 16H
CMP AL,"*"
JNZ JUDGE2
INT 42H
JMP LOOP
JUDGE2: CMP AL,"+"
JNZ JUDGE3
INT 40H
JMP LOOP
JUDGE3: CMP AL,"-"
JNZ JUDGE4
INT 41H
JMP LOOP
JUDGE4: CMP AL,"/"
JNZ NEXT
INT 43H
JMP LOOP
NEXT: CMP AL,0DH;ENTER
JZ OUTPUT
JMP LOOP
OUTPUT:
MOV AL,3DH
CALL DISCHAR
MOV AL,BL
PUSH AX
MOV CH,AL
MOV CL,4
SHR AL,CL
OR AL,30H
CMP AL,3AH
JC L1
ADD AL,07H
L1: CALL DISCHAR
MOV AL,CH
AND AL,0FH
OR AL,30H
CMP AL,3AH
JC L2
ADD AL,07H
L2: CALL DISCHAR
MOV AL,48H
CALL DISCHAR
MOV AH,4CH
INT 21H;
MUL PROC
MOV AL,2AH
CALL DISCHAR
MULL: MOV AH,0
INT 16H
CALL JUDGE
AND AH,0FH
JZ MULL
CALL DISCHAR
SUB AL,30H
MUL BL
MOV BL,AL
AND BH,0
STI
IRET
MUL ENDP
DIV PROC
MOV AL,2FH
CALL DISCHAR
DIVL: MOV AH,0
INT 16H
CALL JUDGE
AND AH,0FH
CALL DISCHAR
SUB AL,30H
PUSH BX
MOV BL,AL
POP AX
DIV BL
MOV BL,AL
AND BH,0
STI
IRET
DIV ENDP
;
ADD PROC
MOV AL,2BH
CALL DISCHAR
addl: MOV AH,0
INT 16H
CALL JUDGE
AND AH,0FH
JZ ADDL
CALL DISCHAR
SUB AL,30H
ADD BL,AL
AND BH,0
STI
IRET
ADD ENDP
;
JUDGE PROC near
CMP AL,"0"
JC NT
CMP AL,"9"
JA NT
MOV AH,RIGHT
ret
NT: MOV AH,WRONG
RET
JUDGE ENDP
SUB PROC
MOV AL,2DH
CALL DISCHAR
SUBL: MOV AH,0
INT 16H
CALL DISCHAR
CALL JUDGE
AND AH,0FH
JZ SUBL
SUB AL,30H
SUB BL,AL
AND BH,0
STI
IRET
SUB ENDP
DISCHAR PROC NEAR
PUSH BX
PUSH AX
MOV BX,0
MOV AH,14
INT 10H
POP AX
POP BX
RET
DISCHAR ENDP
;
CODE ENDS
END BEGIN
|