![]() |
|
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Programmer
|
DATA SEGMENT
EXPRESS DW 40 DUP(?)
TEMP DW 0
RESULT DD 0
ASSIST DD 0
BUF DB 0AH,0DH,'Input invalid,Try again'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
CALL GETINPUT
CALL MYCAL
CALL DISPLAY
MOV AH,4CH
INT 21H
MAIN ENDP
GETINPUT PROC NEAR
LEA DI,EXPRESS
MOV AX,0H
PUSH AX
S_TART: AND AX,0
AND BX,0
AND CX,0
MOV AH,01H
INT 21H
L1: CMP AL,'0'
JB L2
CMP AL,'9'
JA L2
S: AND AX,000FH
MOV CX,AX
CALL GETNUM
L2: CMP AL,'='
JNZ L3
ONE: MOV CX,0
POP CX
AND CX,00FFH
CMP CX,0H
JZ ZERO
MOV [DI],CX
ADD DI,2
JMP ONE
ZERO: AND AX,00FFH
MOV [DI],AX
ADD DI,2H
RET
L3: CMP AL,'('
JNZ L4
PUSH AX
JMP S_TART
L4: CMP AL,')'
JNZ L5
S1: POP CX
AND CX,00FFH
CMP CL,'('
JZ S_TART
CMP CX,0
JNZ AS
PUSH CX
JMP S_TART
AS: MOV [DI],CX
ADD DI,2
JMP S1
L5: CMP AL,'*'
JZ L6
CMP AL,'/'
JZ L6
JMP L7
L6: POP CX
AND CX,00FFH
CMP CL,'*'
JZ C1
CMP CL,'/'
JZ C1
PUSH CX
PUSH AX
JMP S_TART
C1: MOV [DI],CX
ADD DI,2
PUSH AX
JMP S_TART
L7: CMP AL,'+'
JZ L8
CMP AL,'-'
JZ L8
JMP L9
L8: POP CX
AND CX,00FFH
CMP CX,'('
JZ D1
CMP CX, 0
JZ D1
MOV [DI],CX
ADD DI,2
PUSH AX
JMP S_TART
D1: PUSH CX
PUSH AX
JMP S_TART
L9: MOV CX,15
LEA BX,BUF
V1: MOV DL,[BX]
INC BX
MOV AH,02H
INT 21H
LOOP V1
RET
GETINPUT ENDP
GETNUM PROC NEAR
PUSH BX
NUM_STAR: MOV AH,01H
INT 21H
CMP AL,30H
JC NUM_OUT
CMP AL,3AH
JNC NUM_OUT
ADD CX,CX
MOV BX,CX
ADD CX,CX
ADD CX,CX
ADD CX,BX
AND AX,000FH
ADD CX,AX
JMP NUM_STAR
NUM_OUT: MOV [DI],CX
ADD DI,2
POP BX
RET
GETNUM ENDP
MYCAL PROC NEAR
LEA SI,RESULT
LEA DI,ASSIST
LEA BX,EXPRESS
CAL_STAR: AND DX,0
AND AX,0
CMP [BX],'*'
JZ CAL_MUL
CMP [BX],'/'
JZ CAL_DIV
CMP [BX],'+'
JZ CAL_ADD
CMP [BX],'-'
JZ CAL_SUB
CMP [BX],'='
JZ CAL_OUT
PUSH WORD PTR [BX]
ADD BX,2
JMP CAL_STAR
CAL_MUL: POP DX
POP AX
IMUL DX
PUSH AX
ADD BX,2
JMP CAL_STAR
CAL_DIV: POP DX
POP AX
IDIV DL
PUSH AX
ADD BX,2
JMP CAL_STAR
CAL_ADD: POP DX
POP AX
ADC AX,DX
PUSH AX
ADD BX,2
JMP CAL_STAR
CAL_SUB: POP DX
POP AX
SBB AX,DX
PUSH AX
ADD BX,2
JMP CAL_STAR
CAL_OUT: POP CX
RET
MYCAL ENDP
DISPLAY PROC NEAR
CMP CX,10000
JNC AA12
CMP CX,1000
JNC AA4
CMP CX,100
JNC AA6
CMP CX,10
JNC AA8
JMP AA10
AA12: MOV DL,-1
AA3: SUB CX,10000
INC DL
JNC AA3
ADD CX,10000
OR DL,30H
MOV AH,2H
INT 21H
AA4: MOV DL,-1
AA5: SUB CX,1000
INC DL
JNC AA5
ADD CX,1000
OR DL,30H
MOV AH,2H
INT 21H
AA6: MOV DL,-1
AA7: SUB CX,100
INC DL
JNC AA7
ADD CX,100
OR DL,30H
MOV AH,2H
INT 21H
AA8: MOV DL,-1
AA9: SUB CX,10
INC DL
JNC AA9
ADD CX,10
OR DL,30H
MOV AH,2H
INT 21H
AA10: MOV DL,CL
OR DL,30H
MOV AH,2H
INT 21H
RET
DISPLAY ENDP
CODE ENDS
END START |
|
|
|
|
|
#2 |
|
Programmer
|
sorry,a calculator,with simple function
|
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|