So I'm new to assembly language (Being honest, It's still confusing to me) and I need to make a multiplication table code for 3-digit numbers in assembler. This program needs to multiply as many times as the user says to but it doesn't have to be greater than 100. The result should print the multiplication table of a given 3-digit number up until the first 100 values (Depending on what the user asks for):
.model small
.stack
.data
.code
cif1 db ?
cif2 db ?
cif3 db ?
cif4 db ?
n1 db ?
n2 db ?
n3 db ?
top db ?
cic db 1
ac db 0
msg db "Type in the number: $"
msg2 db "Type in the limit: $"
msg3 db "RESULTS: $"
.startup
;Clear Screen
mov cx, 1h
mov ah, 00h
mov al, 03
int 10h
;Message
mov ah, 09h
lea dx, msg
int 21h
;Units
mov ah, 01h
int 21h
sub al, 30h
mov cif1, al
;Tens
mov ah, 01h
int 21h
sub al, 30h
mov cif2, al
;Hundreds
mov ah, 01h
int 21h
sub al, 30h
mov cif3, al
;Clear Screen 2
mov cx, 1h
mov ah, 00h
mov al, 03
int 10h
;Message 2
mov ah, 09h
lea dx, msg2
int 21h
;Limit Input
mov ah, 01h
int 21h
sub al, 30h
mov top, al
inc top
;Clear Screen 3
mov cx, 1h
mov ah, 00h
mov al, 03
int 10h
;Message 3
mov ah, 09h
lea dx, msg3
int 21h
start:
;New line
mov ah, 02h
mov dl, 0ah
int 21h
mov ah, 02h
mov dl, 0dh
int 21h
;Data Load
mov ah, 02h
mov dl, cif1
add dl, 30h
int 21h
mov ah, 02h
mov dl, cif2
add dl, 30h
int 21h
mov ah, 02h
mov dl, cif3
add dl, 30h
int 21h
mov ah, 02h
mov dl, "*"
int 21h
mov dl, cic
add dl, 30h
mov ah, 02h
int 21h
mov al, cl
mov cif4, al
mov ah, 02h
mov dl, "="
int 21h
;Math
mov al, cic
mov bl, cif3
mul bl
mov ah, 0h
aam
mov n3, al
mov ac, ah
mov al, cic
mov bl, cif2
mul bl
mov ah, 0h
aam
mov ac, ah
mov n2, al
mov al, cic
mov bl, cif1
mul bl
mov n1, al
mov bl, ac
add n1, bl
mov ah, 000h
mov al, n1
aam
mov n1, al
mov ac, ah
;Result Printing
mov ah, 02h
mov dl, ac
add dl, 30h
int 21h
mov ah, 02h
mov dl, n1
add dl, 30h
int 21h
mov ah, 02h
mov dl, n2
add dl, 30h
int 21h
mov ah, 02h
mov dl, n3
add dl, 30h
int 21h
inc cic
mov al, cic
cmp al, top
jne start
je end
end:
.exit
I'm using the "top" variable as a counter but, as I said, I've only managed to get it to 9.