使用嵌套循环乘法 Table
Multiplication Table using Nested Loops
汇编 x86 MASM
我创建了以下代码,将打印出乘以 1*1、1*2、1*3、...、1*10 的乘法 table。我想创建一个连续的 table of 1*1, 1*2, 1*3, ..., 1*10,以及另一个 table of 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
mov ecx,10
outloop :
push ecx
call printtimes
call crlf
inc a
pop ecx
loop outloop
call crlf
以上是您生成第一个table (1*1=1 2*1=2 ... 10*1=10
)
的代码
要开始使用 嵌套循环 来输出所有 table,您需要用一个额外的循环包围此代码,该循环将
- 将 a 变量重置为 1
- 增加 b 变量
你一直重复这个额外的(外部)循环,直到 b 变量变得大于 10。
为了简化,您可以在内部循环中不使用 ECX
寄存器,同时注意 a 变量的值变得大于 10。
mov b, 1
OuterLoop:
mov a, 1
InnerLoop:
call printtimes
call crlf
inc a
cmp a, 10
jbe InnerLoop
call crlf
inc b
cmp b, 10
jbe OuterLoop
您不再需要 printtimes1、printtimes2、mymul1 和 mymul2 在你的程序中。
汇编 x86 MASM
我创建了以下代码,将打印出乘以 1*1、1*2、1*3、...、1*10 的乘法 table。我想创建一个连续的 table of 1*1, 1*2, 1*3, ..., 1*10,以及另一个 table of 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
mov ecx,10 outloop : push ecx call printtimes call crlf inc a pop ecx loop outloop call crlf
以上是您生成第一个table (1*1=1 2*1=2 ... 10*1=10
)
的代码
要开始使用 嵌套循环 来输出所有 table,您需要用一个额外的循环包围此代码,该循环将
- 将 a 变量重置为 1
- 增加 b 变量
你一直重复这个额外的(外部)循环,直到 b 变量变得大于 10。
为了简化,您可以在内部循环中不使用 ECX
寄存器,同时注意 a 变量的值变得大于 10。
mov b, 1
OuterLoop:
mov a, 1
InnerLoop:
call printtimes
call crlf
inc a
cmp a, 10
jbe InnerLoop
call crlf
inc b
cmp b, 10
jbe OuterLoop
您不再需要 printtimes1、printtimes2、mymul1 和 mymul2 在你的程序中。