1

我是汇编编程的菜鸟,我需要对以下类型的循环(@@、@B、@F)进行一些澄清。

当你有这样的例程时:

Routine: PROC  Value: Byte
         MOV   ECX, 3
         MOVZX EDX, Value
         MOV   EAX, EDX
     @@: SHL   EAX, 8
         OR    EAX, EDX
         LOOP @B
         RET
Routine: ENDP

,@@、@B 是什么意思?

正如我被告知的那样,这些循环有一些特殊性。@B 指向例程中的第一个@@,@F 指向例程中的最后一个@@,对吗?关于这些循环还有什么我应该知道的吗?(我还被告知,每当它们出现时,循环就会进行 3 次,但我不确定)。

提前致谢。

4

1 回答 1

1

@@ 是本地标签。您可以将它放在程序中的任何代码行上。在您定义下一个@@ 标签之前它是有效的。(不是“第一个”或“最后一个”,只是上一个和下一个)。

@b 表示“先前(早期源代码行)定义的@@ 标签”。@f 表示“下一个定义的@@ 标签”。

循环执行三次,因为“LOOP”指令在每次迭代时(隐式)递减 ECX,如果 ECX 中的剩余值不为零,则分支......并且您最初使用 3 的值加载 ECX。

如果你想了解代码是如何工作的,你应该使用 MS Assembler 来组装它,然后单步执行它,边看边看寄存器。或者,非常仔细地手动阅读英特尔指令集。(当我第一次开始为 x86 编程时,我做了很多这样的事情,即使是对于那个巨大的文档,每一分钟都是值得的)。

于 2013-04-16T01:00:10.610 回答