汇编代碼中出現兩個 @@,詢問其作用。這是 MASM/TASM 風格汇编中的局部標號語法。
@@: 定義一個匿名局部標號@B (Back) 引用最近的上一個 @@:@F (Forward) 引用最近的下一個 @@:LabelName:)之間,或 PROC/ENDP 之間; 假設圖片代碼類似:
Start:
mov cx, 10
@@: ; 局部標號 1
inc ax
loop @B ; 跳回最近的 @@: (標號1) → 循環 10 次
cmp ax, 0
je @F ; 跳轉到最近的下一個 @@: (標號2)
; 這裡代碼不會執行(若 ax==0)
@@: ; 局部標號 2
mov bx, ax
ret
End:
| 特性 | 局部標號 (@@:) | 全局標號 (Label:) |
|---|---|---|
| 命名 | 無需名字,匿名 | 必須唯一名字 |
| 引用方式 | @B (向後) / @F (向前) | 直接用名字 |
| 作用域 | 兩個全局標號之間 | 整個模塊/文件 |
| 重複定義 | 不同作用域可重複 | 全局唯一,重複報錯 |
| 適用場景 | 短跳轉、循環、條件分支內部 | 函數入口、數據標識、跨模塊引用 |
loop1、skip_if 等)@B/@F 指向難以肉眼判斷現代汇编(NASM/FASM/GAS)推薦使用有意義的局部標號前綴:
; NASM 風格:. 開頭為局部標號
.loop_start:
inc ax
loop .loop_start
.if_zero:
je .after_check
.after_check:
既有作用域隔離,又可讀性強,調試器也能識別名字。
@@ 是 MASM 系汇编的匿名局部標號,配合 @B/@F 實現短距離跳轉,類似高級語言的標簽/continue/break。理解其作用域規則(兩個全局標號之間)是正確使用的關鍵。