Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 汇编语言嵌套循环_Loops_Assembly_X86 16 - Fatal编程技术网

Loops 汇编语言嵌套循环

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

由于我对这门语言还不熟悉,它听起来可能真的很不对劲,但这是前几天我考试时听到的,我真的非常想知道答案

根据我的内部程序员,我认为结果将是:

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