Loops 装配中的循环

Loops 装配中的循环,loops,assembly,x86,Loops,Assembly,X86,我是汇编编程的新手,我需要对以下循环(@、@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)进行澄清

当你有这样的例行程序时:

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次,但我对此不确定)


提前感谢。

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

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

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


如果您想了解代码是如何工作的,您应该使用MS Assembler对其进行组装,然后一步一步地完成,一边查看寄存器。或者,手动仔细阅读“英特尔指令集”。(当我第一次开始编写x86时,我做了很多这方面的工作,每一分钟都是值得的,即使对于那个巨大的文档也是如此)。

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

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

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


如果您想了解代码是如何工作的,您应该使用MS Assembler对其进行组装,然后一步一步地完成,一边查看寄存器。或者,手动仔细阅读“英特尔指令集”。(当我第一次开始编写x86时,我做了很多这方面的工作,每一分钟都是值得的,即使对于那个庞大的文档也是如此)。

您使用的是什么汇编程序?另外,
@B
可能意味着“下一个@label,向后”,同样地,
@F
也意味着“向前”(如果这类似于GCC的内联汇编本地标签)。Visual Studio,尽管我的主题主要是基于纸和笔的,并且非常依赖于代码分析等。您使用的是什么汇编程序?另外,
@B
可能意味着“下一个@label,向后”,同样地,
@F
也意味着“向前”(如果这与GCC的内联汇编本地标签类似的话)。Visual Studio,尽管我的主题主要是基于纸和笔的,并且非常依赖于代码分析等。