Сборка x86 MASMТаблица умножения с использованием вложенных циклов
Я создал следующий код, который будет печатает таблицу умножения, которая умножает 1 * 1, 1 * 2, 1 * 3, ..., 1 * 10. Я хочу создать непрерывную таблицу 1 * 1, 1 * 2, 1 * 3, ..., 1 * 10 и другую таблицу 2 * 1, 2 * 2, 2 * 3, ..., 2 * 10 и 3 * 1, 3 * 2, 3 * 3, ..., 3 * 10 и т. Д. До 10 * 10, используя петли, а записывая каждую процедуру отдельно. Однако мне трудно создавать петли. Пожалуйста, пусть кто-нибудь покажет мне. Огромное спасибо.
INCLUDE Irvine32.inc
.data
a dword 1
b dword 1
z dword ?
times byte " * ",0
equals byte " = ",0
.code
main PROC
call clrscr
mov ecx,10
outloop :
push ecx
call printtimes
call crlf
inc a
pop ecx
loop outloop
call crlf
mov ecx,10
mov a, 1
outloop1 :
push ecx
call printtimes1
call crlf
inc a
pop ecx
loop outloop1
call crlf
mov ecx,10
mov a, 1
outloop2 :
push ecx
call printtimes2
call crlf
inc a
pop ecx
loop outloop2
exit
main ENDP
mymul proc
mov ecx,a
mov eax,0
myloop:
add eax,b
loop myloop
mov z,eax
ret
mymul endp
mymul1 proc
mov ecx,a
mov eax,0
mov b, 1
inc b
myloop:
add eax,b
loop myloop
mov z,eax
ret
mymul1 endp
mymul2 proc
mov ecx,a
mov eax,0
mov b, 2
inc b
myloop:
add eax,b
loop myloop
mov z,eax
ret
mymul2 endp
printtimes proc
call mymul
mov eax,a
call writedec
mov edx, offset times
call writestring
mov eax,b
call writedec
mov edx,offset equals
call writestring
mov eax,z
call writedec
call crlf
ret
printtimes endp
printtimes1 proc
call mymul1
mov eax,a
call writedec
mov edx, offset times
call writestring
mov eax,b
call writedec
mov edx,offset equals
call writestring
mov eax,z
call writedec
call crlf
ret
printtimes1 endp
printtimes2 proc
call mymul2
mov eax,a
call writedec
mov edx, offset times
call writestring
mov eax,b
call writedec
mov edx,offset equals
call writestring
mov eax,z
call writedec
call crlf
ret
printtimes2 endp
end main
Результаты (Я хочу, чтобы этот результат с помощью вложенных циклов, но вместо этого я с трудом его создания):
1*1=1
2*1=2
3*1=3
4*1=4
5*1=5
6*1=6
7*1=7
8*1=8
9*1=9
10*1=10
1*2=2
2*2=4
3*2=6
4*2=8
5*2=10
6*2=12
7*2=14
8*2=16
9*2=18
10*2=20
1*3=3
2*3=6
3*3=9
4*3=12
5*3=15
6*3=18
7*3=21
8*3=24
9*3=27
10*3=30
Это то, что '; 1 * 30 = 30' материал в конце должен быть выходом? Я не понимаю, в чем проблема. Объясните, в какой части вы застряли, выясняя, как написать программу, которая добавляет и печатает в цикле для создания таблиц умножения. Все это звучит для меня довольно просто, поэтому IDK какая часть вам не очевидна. –
Я до сих пор не понимаю, почему это было бы трудно, или с какой частью у вас проблемы. У вас закончились регистры для счетчика внешнего контура? Вам просто нужно напечатать 'j * i = prod' в цикле' for (i = 1..10) для (j = 1..10) '. У вас, видимо, уже есть целые числа печати, так как вы печатаете '10' ok (не попадаете в проблему с многозначными целыми числами, которые не работают с просто« add al », 0''). –
Можете ли вы показать мне псевдокод? Большое вам спасибо –