.MODEL SMALL
.STACK 64
.DATA
MSGA DB 13,10,"Input first number: ","$"
MSGB DB 13,10,"Input second number:","$"
MSGC DB 13,10,"The quotient is: ","$"
MSGD DB 13,10,"The modulo is: ","$"
NUM1 db ?
NUM2 db ?
.CODE
MAIN PROC NEAR
MOV AX, @DATA
MOV DS, AX
; get first number
LEA DX, MSGA
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV BL, AL
; get second number
LEA DX, MSGB
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV CL, AL
MOV AL, BL
; divide
DIV CL
MOV NUM1, AL
ADD NUM1, '0'
MOV NUM2, AH
ADD NUM2, '0'
; output quotient
LEA DX, MSGC
MOV AH, 09h
INT 21h
MOV DL, NUM1
MOV AH, 02H
INT 21h
; output remainder/modulo
LEA DX, MSGD
MOV AH, 09h
INT 21h
MOV DL, NUM2
MOV AH, 02H
INT 21h
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN
I am new to Assembly language and I’m getting a problem with the DIV operation.
This should output the quotient and remainder if a 1-digit number is divided to a 1-digit number. What is wrong with my code?
8-bit division using
DIVinstruction requiresAXfor dividend and an operand for the divisor.I’ve corrected the division part of the code and the stack size. Stack size should be at least 1000, or your program might crash due to insufficient stack storage. Below is the code.