gpt4 book ai didi

loops - 使用嵌套循环的乘法表

转载 作者:行者123 更新时间:2023-12-02 03:58:41 26 4
gpt4 key购买 nike

组装 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

最佳答案

   mov ecx,10
outloop :
push ecx
call printtimes
call crlf
inc a
pop ecx
loop outloop
call crlf

前面的所有内容都是生成第一个表的代码 (1*1=1 2*1=2 ... 10*1=10)
要开始使用嵌套循环来输出所有表格,您需要用一个额外的循环包围此代码

  • 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

您的程序中不再需要 printtimes1printtimes2mymul1mymul2

关于loops - 使用嵌套循环的乘法表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40326190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com