簡體   English   中英

裝配循環

[英]Loops in Assembly

我是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次,但我不確定。)

提前致謝。

@@是本地標簽。 您可以將其放在程序中的任何代碼行上。 在定義下一個@@標簽之前,它是有效的。 (不是“第一個”或“最后一個”,只是前一個和下一個)。

@b表示“先前(早期的源代碼行)定義的@@標簽”。 @f表示“下一個定義的@@標簽”。

循環執行3次,因為“ LOOP”指令在每次迭代中都會使ECX(隱式地)遞減,並且如果ECX中的剩余值不為零,則分支,並且您最初以3的值加載了ECX。

如果您想了解代碼的工作原理,則應使用MS匯編器對其進行匯編,然后逐步瀏覽並查看寄存器。 另外,請認真仔細地手動閱讀英特爾指令集。 (當我第一次開始對x86進行編程時,我做了很多事情,即使是那份龐大的文檔,它每一分鍾都是值得的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM