8086 assembly language program to read a numeric character and convert it into single digit number Edit
In this article, we will write an 8086 assembly language program to read a numeric single-digit ASCII character, convert it into a number and store the value in al register. Writing a program to read a number is not simple like how you could read a number using one line of code in C or C . Here you have to read the numeric characters one by one and then convert the characters into a number. In our case, it's a single-digit number so it's much simpler.
First, we will have to understand the value of numeric characters from 0 to 9. For that let's look at ASCII Character Table. Open this link ASCII Character Table. Here you can see there are 4 columns Char Dec Oct Hex. Let's focus only on two columns Char & Hex. From this table you can find the hex value of character 0 is 0x30 and the hex value of 9 is 0x39. This means when a user press number 0 on keyboard the value of the character read will be 0x30 . To convert this ASCII value to numeric we have to subtract the value of 0x30 from the ASCII value.
Sample Code
.model tiny .code org 100h main proc near loop_readnumber: mov ah,09h mov dx,offset messageenternumber int 21h mov ah,01h ; dos function to read a character with echo from keyboard ; result (character entered) is stored in al int 21h ; dos interrupt 21h cmp al,30h ; check if input character is less then 0, ; here we are validating user input to check if entered character is betwen 0 and 9 jl loop_readnumber ; jump to display invalid character cmp al,39h ; check if input character is great then 9 jg loop_readnumber ; jump to display invalid character sub al,30h ; subtract 30h character code of character 0 from input to get numeric value mov bl,al ; store value of read character in bl mov ah,4ch ; dos function 4ch to terminate and return to dos mov al,00 int 21h ; dos interrupt 21h endp messageenternumber db 0ah,0dh,'Please input a single digit number $' end main