我很难掌握汇编语言的概念。我得到了这个示例代码:
ploop: mov ax, 0201h
add al, ah
cmp al, 5
jb ploop
eloop:
循环结束时的十六进制值是0205,但我不确定我理解为什么。
对于第一行,我们将0201移动到ax,所以al = 01并且ah = 02.然后你向al添加ah,使al = 03.我们将al与5比较,因为3< 5,它适合jb并再次通过ploop。我们经历了所有步骤,并且在cmp al = 05 == 5,所以它不再适合jb。
这是看待它的正确方法吗?
答案 0 :(得分:3)
几乎正确。除了你可能希望它看起来像以下代码:
mov ax, 0201h
ploop: add al, ah
cmp al, 5
jb ploop
eloop:
因为它将进入无限循环,因为al
和ah
在每次循环迭代中被覆盖。
答案 1 :(得分:2)
我几乎打赌你错误地转录了代码。就目前而言,你有一个无限循环。它需要更像这样:
mov ax, 0201h
ploop: add al, ah
cmp al, 5
jb ploop
eloop:
当您发布它时,ax
将在循环的每次迭代开始时重新加载0201h
。然后,您将ah
中的02添加到al
中的01。这将给出3.你将它与5进行比较,如果它小于(显然它总是会)你再次执行循环。
移动标签后,我们以<{1}}中的02和ah
中的01开始。然而,在循环的每次迭代中,我们将02添加到al
的当前内容,因此它将遵循序列1,3,5。在每次迭代时,我们将其内容与5进行比较,并继续循环,如果并且只有当它小于(被视为无符号)时,所以循环执行三次迭代,然后以al = 5停止。