8086 assembly language program to read a number from keyboard Edit
Reading a number from the keyboard is one of the programs which is required while coding in 8086 assembly language. In 8086 reading a number from the keyboard is not very simple like how you could read it in C or C . Here you have to read character by character and convert the characters to a number. The below code can read any number from 0 to 65536 which is a word or two bytes. You press enter when you have entered the number. This is what we are doing in the code. Let's take an example where I have to input a number 255
We have a variable number that will store the output 1. set value of the number to 0 2. First The User Enters 2 3. check if enter key is pressed. If pressed go to number 6 4. multiply the variable number by 10 will give number = 0 because the value of a variable number is 0, zero multiplied by any number is 0 5. add 2 to a variable number Then you go to step 1 and repeat it till enter key is pressed. Let me tell you what happens when the user press 5. in step 4. number = number * 10 = 20 because 2 was entered earlier. add 5 to variable number. then the number will be 25 go to step 1 user press number 5 again in step 4 = number = number * 10 = 250 because 25 was already there in number add 5 again to the number and the value becomes 255 6. Here you can write code to do whatever after you have the number in a variable number
8086 Program to read a number using keyboard
.model tiny .code org 100h main proc near loop_number_main: mov ah,09h ; dos function 09h to print a string mov dx,offset messageinputnumber ; memory location of message int 21h ; dos interrupt 21h mov number,0 ; set initial value of number to 0 loop_read_number: 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,0dh ; check if enter key is pressed je numbercomplete ; jump to numbercompletd if enter key is pressed 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 invalidcharacter ; jump to display invalid character cmp al,39h ; check if input character is great then 9 jg invalidcharacter ; jump to display invalid character sub al,30h ; subtract 30h character code of character 0 from input to get numeric value mov ah,00 mov bx,ax ; temporarily store value of read character in bx mov ax,number ; copy number to ax mul numberplace ; we multipley number with 10. ; first time the number is 0 so multiplication with 10 it will remain same add ax,bx ; add the newly entered number to number variable mov number,ax jmp loop_read_number invalidcharacter: mov ah,09h ; dos function 09h to print a string mov dx,offset messageinvalidcharacter ; memoery location of message int 21h ; dos interrupt 21h jmp loop_number_main numbercomplete: ; When the user press enter the control will transfer to this location ; decimal value of input numeric charaters is stored in variable number mov ax,number ; this line can be removed. I am addint this only so that ; you can check the value of number in ax register in emu8086 ; Here you can write code to display the number ; or use entered number as an input for other program mov ah,4ch ; dos function 4ch to terminate and return to dos mov al,00 int 21h ; dos interrupt 21h endp numberplace db 10 number dw 0 messageinvalidcharacter db 0ah,0dh,"Invalid Character$" messageinputnumber db 0ah,0dh,"Please Input a number $" end main