Home

Double digit addition subtraction multiplication and division program using 8086 microprocessor

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