2013-04-16 59 views
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次,但我不確定)。

在此先感謝。

+1

你在用什麼彙編語言?此外,'@ B'可能意味着「下一個@標籤,倒退」,同樣「前進」爲「@ F」(如果這是GCC的內聯彙編本地標籤) –

+0

Visual Studio,儘管我的主題主要是紙和基於筆,並非常依賴代碼分析等。 –

回答

1

@@是本地標籤。你可以把它放在程序中的任何代碼行上。在定義下一個@@標籤之前它是有效的。 (不是「第一」或「最後」,只是上一個和下一個)。

@b表示「之前(早期源代碼行)定義@@ label」。 @f表示「下一個定義的@@標籤」。

循環執行三次是因爲「LOOP」指令在每次迭代中遞減ECX(隱式地),並且如果ECX中的剩餘值不爲零則分支...並且最初加載ECX的值爲3。

如果您想了解代碼是如何工作的,您應該使用MS Assembler進行彙編,然後單步執行,隨時查看寄存器。或者,請仔細閱讀手動設置的Intel手動設置。 (當我第一次開始編程x86時,我做了很多這樣的事情,即使對於那個龐大的文檔,也是每分鐘都是值得的)。