[英]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.