我是Assembly编程方面的新手,我需要对以下几种循环(@@,@ 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次,但我不确定。)

提前致谢。

===============>>#1 票数:1

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

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

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

如果您想了解代码的工作原理,则应使用MS汇编器对其进行汇编,然后逐步浏览并查看寄存器。 另外,请认真仔细地手动阅读英特尔指令集。 (当我第一次开始对x86进行编程时,我做了很多事情,即使是那份庞大的文档,它每一分钟都是值得的)。

  ask by Guillherme Routar translate from so

未解决问题?本站智能推荐: