Loops 汇编语言嵌套循环
由于我对这门语言还不熟悉,它听起来可能真的很不对劲,但这是前几天我考试时听到的,我真的非常想知道答案 根据我的内部程序员,我认为结果将是: EAX=280 一切帮助都将不胜感激以下程序的EAX寄存器的最终值是多少?Loops 汇编语言嵌套循环,loops,assembly,x86-16,Loops,Assembly,X86 16,由于我对这门语言还不熟悉,它听起来可能真的很不对劲,但这是前几天我考试时听到的,我真的非常想知道答案 根据我的内部程序员,我认为结果将是: EAX=280 一切帮助都将不胜感激以下程序的EAX寄存器的最终值是多少? mov eax, 0 mov ecx, 10 loop1: mov ecx, 5 mov eax, 3 loop2: add eax, 5 jmp loop2 jmp loop1 我不确定您如何能发现程序将在EAX=280时停止 从您的代码中,您将执行以下指令: 1
mov eax, 0
mov ecx, 10
loop1:
mov ecx, 5
mov eax, 3
loop2:
add eax, 5
jmp loop2
jmp loop1
我不确定您如何能发现程序将在EAX=280时停止 从您的代码中,您将执行以下指令:
1: mov eax, 0
2: mov ecx, 10
loop1:
3: mov ecx, 5
4: mov eax, 3
loop2:
5: add eax, 5
6: jmp loop2
7: add eax, 5
8: jmp loop2
9: add eax, 5
...
由于没有条件,程序将永远不会停止,并将永远将eax
增加5,然后跳转到loop2
到
loop1
的分支将永远不会执行。我不确定您如何发现程序将在EAX=280处停止
从您的代码中,您将执行以下指令:
1: mov eax, 0
2: mov ecx, 10
loop1:
3: mov ecx, 5
4: mov eax, 3
loop2:
5: add eax, 5
6: jmp loop2
7: add eax, 5
8: jmp loop2
9: add eax, 5
...
由于没有条件,程序将永远不会停止,并将永远将eax
增加5,然后跳转到loop2
到
loop1
的分支将永远不会执行。是什么阻止您运行它并亲自查看?还有,你确定这是正确的代码吗?由于它有jmp loop2
将没有“最终值”,这是一个无限循环,eax
不断增加5。这正是我猜测的,但正如问题所述,它必须有一个最终答案。没有,这是一个无限循环。即使jmp
指令将被loop
取代(考虑到在循环之前设置了ecx
,这有点道理),将执行loop2
部分5次,然后在ecx==0
处执行另一个loop1
将跳回loop1
标签,该标签将ecx
重置为5,因此将再次出现无限循环的情况。通常很难判断代码何时停止(请参阅“停止问题”),但在这种情况下,CPU状态仅在数万亿条指令之后才会重复(直到相同的eax
),很容易看出它将如何重复。是什么阻止您运行它并亲自查看?另外,您确定这是正确的代码吗?因为它有jmp loop2
,所以不会有“最终值”,这是一个无限循环,eax
不断增加5。这正是我猜测的,但正如问题所述,它必须有一个最终答案。没有,这是一个无限循环。即使jmp
指令将被loop
取代(考虑到在循环之前设置了ecx
,这有点道理),将执行loop2
部分5次,然后在ecx==0
处执行另一个loop1
将跳回loop1
标签,该标签将ecx
重置为5,因此将再次出现无限循环的情况。通常很难判断代码何时停止(请参阅“停止问题”),但在这种情况下,CPU状态仅在几兆指令之后才会重复(直到相同的eax
),很容易看出它将如何重复。这是否意味着它将在eax=FFFFFFFF@Zextro:否…这是一个无限循环。EAX
将滚动,因为寄存器只有32位宽。(如:0x0000\u 0000==0x1\u 0000\u 0000&0xFFFF\u FFFF
)这是否意味着它将在EAX=FFFFFFFF@Zextro:否…这是一个无限循环。EAX
将滚动,因为寄存器只有32位宽。(如:0x0000\u 0000==0x1\u 0000&0xFFFF\u FFFF
)