.MODEL SMALL
.DATA
PROMPT1 DB 'INPUT A NUMBER: $'
PROMPT2 DB 'INPUT ANOTHER NUMBER: $'
PROMPT3 DB 'LIST OF OPERATION: 1. ADD, 2. SUB, 3. MUL, 4. DIV, 5. CMP$'
PROMPT4 DB 'ENTER OPERATION NUMBER TO PERFORM: $'
CHOICE DB ?
NUM1 DW 0
NUM2 DW 0
RESULT DW 0
REMAINDER DW 0
TEMP DW 0
ADDR DW 0
RESULT_ADD DB 'ADDITION RESULT: $'
RESULT_SUB DB 'SUBSTRACTION RESULT: $'
RESULT_MUL DB 'MULTIPLICATION RESULT: $'
RESULT_DIV DB 'DIVISION RESULT: $'
RESULT_REM DB 'REMAINDER: $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
;PROMT1
MOV AH,09H
LEA DX, PROMPT1
INT 21H
LEA BX, NUM1
MOV ADDR,BX
CALL INPUT_NUM
;NEW LINE
CALL NEW_LINE
;PROMT2
MOV AH,09H
LEA DX, PROMPT2
INT 21H
LEA BX, NUM2
MOV ADDR,BX
CALL INPUT_NUM
;CHOICE INPUT
CALL INPUT_CHOICE
;ADDITION
CMP CHOICE, 1
JE CALL ADD_NUM
;SUBSTRACTION
CMP CHOICE, 2
JE CALL SUB_NUM
;MULTIPLICATION
CMP CHOICE, 3
JE CALL MUL_NUM
;DIVISION
CMP CHOICE, 4
JE CALL DIV_NUM
HLT
MAIN ENDP
INPUT_NUM PROC
MOV DL, 10
MOV BX, 0
SCAN_INPUT:
MOV AH, 01H
INT 21H
CMP AL, 13
JZ EXIT
SUB AL,48
MOV AH,0
MOV CX,AX
MOV AX,BX
MUL DL
ADD AX,CX
MOV BX,AX
JNZ SCAN_INPUT
EXIT:
MOV CX,BX
MOV BX,ADDR
MOV [BX],CX
RET
INPUT_NUM ENDP
NEW_LINE PROC
MOV AH,02H
MOV DL,0AH
INT 21H
MOV AH,02H
MOV DL,0DH
INT 21H
RET
NEW_LINE ENDP
INPUT_CHOICE PROC
;NEW LINE
CALL NEW_LINE
;PROMPT3
MOV AH,09H
LEA DX, PROMPT3
INT 21H
;NEW LINE
CALL NEW_LINE
;PROMPT4
MOV AH,09H
LEA DX, PROMPT4
INT 21H
;CHOICE
MOV AH, 01H
INT 21H
SUB AL,48
MOV CHOICE, AL
RET
INPUT_CHOICE ENDP
ADD_NUM PROC
MOV BX, NUM1
ADD BX, NUM2
MOV RESULT, BX
CALL NEW_LINE
MOV AH, 09H
LEA DX, RESULT_ADD
INT 21H
CALL DISPLAY_NUM
HLT
ADD_NUM ENDP
SUB_NUM PROC
MOV BX, NUM1
SUB BX, NUM2
MOV RESULT, BX
CALL NEW_LINE
MOV AH, 09H
LEA DX, RESULT_SUB
INT 21H
CALL DISPLAY_NUM
HLT
SUB_NUM ENDP
MUL_NUM PROC
MOV AX, NUM1
MUL NUM2
MOV RESULT, AX
CALL NEW_LINE
MOV AH, 09H
LEA DX, RESULT_MUL
INT 21H
CALL DISPLAY_NUM
HLT
MUL_NUM ENDP
DIV_NUM PROC
MOV AX, NUM1
MOV BX, NUM2
DIV BL
MOV CL, AL
MOV CH, 0
MOV RESULT, CX
MOV CL, AH
MOV CH, 0
MOV REMAINDER, CX
CALL NEW_LINE
MOV AH, 09H
LEA DX, RESULT_DIV
INT 21H
CALL DISPLAY_NUM
MOV DX, REMAINDER
MOV RESULT, DX
CALL NEW_LINE
MOV AH, 09H
LEA DX, RESULT_REM
INT 21H
CALL DISPLAY_NUM
HLT
DIV_NUM ENDP
DISPLAY_NUM PROC
MOV AX, RESULT
MOV TEMP, AX
MOV BL, 10
MOV CX, 0
SCAN_DISPLAY:
MOV AX, TEMP
DIV BL
ADD AH, 48
MOV DL, AH
MOV DH, 0
MOV AH, 0
PUSH DX
MOV AH, 0
MOV TEMP, AX
INC CX
CMP TEMP,0
JNZ SCAN_DISPLAY
DISPLAY:
POP AX
MOV DL, AL
MOV AH, 02H
INT 21H
LOOP DISPLAY
RET
DISPLAY_NUM ENDP