2017-08-28 77 views
3

Microsoft operators reference for MASM顯示雜項部分中的::運算符。MASM是否有::運算符?

該商品的鏈接將打開一個頁面;; operator

我不是這是表中的錯誤名稱還是錯誤鏈接的項目。還有其他一些項目確實有錯誤的聯繫。

MASM是否有::運算符?它是做什麼的?

+4

[這裏](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/masm-numbers-and-operators#symbols_in_masm_expressions)'SA提到它的masm鏈接。 –

+0

比在MASM docs正確的@DavidWohlferd中有更好的材質。好的。 – Lycan

+2

@DavidWohlferd該鏈接適用於Microsoft的調試工具,MASM本身不支持使用'::'運算符來「指示類的成員」。 –

回答

6

是的,它的確如此。

我在舊的TASM 4 manual(PDF的打印文檔的135頁)中找到了對它的引用。

它被用來以比它們在所定義的過程更寬的範圍定義標籤

考慮:

foo PROC 

lbl: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Undefined symbol lbl 
bar ENDP 

這不會在組裝MASM因爲lbl是在另一個步驟。
然而,這樣的:

foo PROC 

lbl:: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Fine 
bar ENDP 

一樣。

至於我還記得,在TASM/NASM標籤的行爲不同,他們沒有一個範圍(TASM可以製成雖然模仿MASM)。

+0

謝謝。愛讀你的材料順便說一句。真的滿足你的命令。 – Lycan

+0

在NASM中,'lbl:'具有文件範圍。本地標籤以'.'開始(所以你會寫'.lbl:'),但它們實際上只是'foo.lbl'的語法糖。所以在'bar:'之後,你仍然可以寫'jmp foo.lbl'。 (NASM沒有任何東西PROC,你只寫'全球foo'如果你想'foo'標籤的符號表導出。) –

+1

@PeterCordes這就是爲什麼我喜歡它! ;) –

5

1996年的微軟書MASM程序員指南6.1揭示了一些額外的語義。

雙冒號::可以用於傳遞從寄存器值製作在過程調用自變量的遠指針。第157頁所描述的那樣:

可以在一個段傳遞FAR指針::偏移對,如示於以下。請注意使用雙冒號分隔寄存器對。
..
INVOKE SomeProc, ES::BX, arg1, arg2