8086 assembly language program to read 5 digit number from keyboard and display its sum
Edit
Here we will write an 8086 assembly language program to input a 5 digit number from the keyboard and display the sum of the digits. This program can be broken into 2 main sections.
- Read a 5 digit number with validation to check if the entered character is numeric. If the entered character is valid add to a dw sum
- Convert the numeric sum into ASCII so that it can be displayed
Code To calculate the sum of 5 digit number
.model tiny
.code
org 100h
main proc near
; here is the section to read a valid 5 digit number and keep adding to dw sum
numberreadstart:
mov ah,09h ; dos function 09h to display a string
mov dx,offset messagereadnumber ; offset of message
int 21h ; dos interrupt 21h
mov sum,0
mov cx,5 ; cx is set to 5 so that it loops 5 times to enter 5 digits of the number
readnumber:
push cx
mov ah,01h ; read character from input store result in al
int 21h ; dos interrupt 21h
; code to check if the number is between 0 and 9
cmp al,30h ; 30h is character 0
jl invalidnumber ; If the number is less than character 0 jump to invalidnumber
cmp al,39h ; 39h is character 9
jg invalidnumber ; if the number is greater that character 9 jump to invalid number
; end code to check if the number is between 0 and 9
sub al,30h ; 30h is the hex code for character 9 you subtract 30h to get the number and not character
mov ah,00
add sum,ax ; add sum = sum number read
pop cx
loop readnumber
jmp validnumber
invalidnumber:
mov ah,09h
mov dx,offset messageinvalidnumber
int 21h
jmp numberreadstart
; end section to read a valid 5 digit number
validnumber:
mov ax,sum
; code to convert decimal number to asii
mov si,offset numbertoascii
mov cx,00h
mov bx,0ah
hexloop1:
mov dx,0
div bx
add dl,'0'
push dx
inc cx
cmp ax,0ah
jge hexloop1
add al,'0'
mov [si],al
hexloop2:
pop ax
inc si
mov [si],al
loop hexloop2
inc si
mov [si],'$'
; end convert decimal number to asii
mov ah,09h ; dos function to display a string
mov dx,offset displayresult ; offset of message to display since I am not terminating
; the string displayresult with a dollar it will print
; the displayresult also which terminates with a $
int 21h ; dos interrupt 21h
mov ah,4ch ; dos function to terminate and return to dos
mov al,00
int 21h ; dos interrupt 21h
endp
messageinvalidnumber db 0ah,0dh,"Invalid number$"
messagereadnumber db 0ah,0dh,"Please enter a 5 digit number $"
displayresult db 0ah,0dh,"Sum of 5 digit number = "
numbertoascii db 5 dup(?)
sum dw 0
end main