multiplying two two digit numbers with both the numbers taken as input and result is also to be printed in Tasm

Denson picture Denson · Oct 4, 2013 · Viewed 10k times · Source

i am not understanding as to what can be done in this case single digit multiplication was possible using the AAM instruction however for AAM you need unpacked BCD therefore the result after two digit multiplication wont be accumulated in the AX register...

so i need an idea as to how i can proceed with this problem .thank you

here is how the input should look like (to take one two digit number) and BCD is desirable

mov dx,offset msg
mov ah,09h
int 21h

mov ah,01h
int 21h

mov ch,al
sub ch,30h
ror ch,04h

mov ah,01h
int 21h

mov cl,al
sub cl,30h
add cl,ch

Answer

us2012 picture us2012 · Oct 4, 2013
mynumber1 db ?
mynumber2 db ?

mov ah,01h
int 21h
sub al, 30h <- ASCII to value 

mov bl, 0Ah 
mul bl <- multiply al with 10

mov mynumber1, al <- mynumber1 now stores the tens (i.e. if you entered 8 it's now 80)

mov ah,01h
int 21h 
sub al, 30h <- ASCII to value, al now stores the ones

add mynumber1, al <- now your two-digit number is completely in mynumber1

Now repeat the same for mynumber2. Then:

mov al, mynumber1
mov bl, mynumber2

mul bl

Now the product is in AX. Proceed by converting the content of AX back to BCD, if you really need to.


The following code will print a number with up to 4 digits stored in AX:

xor dx,dx
mov bx,03E8h
div bx
call printdig

mov ax,dx
xor dx,dx
mov bx,0064h
div bx
call printdig

mov ax,dx
xor dx,dx
mov bx,000Ah
div bx
call printdig

;remainder from last div still in dx
mov al,dl
call printdig

Note that you need the following helper function, which prints a single digit from al:

printdig proc
push dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
pop dx
ret
printdig endp