評估運算式

偵錯工具瞭解兩種不同的運算式形式: MASM 運算式C++ 運算式

Microsoft 巨集群組合工具 (MASM) 運算式會用於本說明文件中的範例,除非另有說明。 在 MASM 運算式中,所有符號都會視為位址。

C++ 運算式與實際 C++ 程式碼中使用的運算式相同。 在這些運算式中,符號會視為適當的資料類型。

使用每個語法時

您可以使用下列其中一種方式來選取預設運算式評估工具:

如果您未使用上述其中一種方法,偵錯工具會使用 MASM 運算式評估工具。

如果您想要評估運算式而不變更偵錯工具狀態,可以使用 ? (評估運算式) 命令。

所有命令和偵錯資訊視窗都會透過預設運算式評估工具解譯其引數,但有下列例外狀況:

  • ?? (評估 C++ 運算式) 命令一律使用 C++ 運算式評估工具。

  • [監看式] 視窗一律使用 C++ 運算式評估工具。

  • [ 區域變數] 視窗 一律使用 C++ 運算式評估工具。

  • 某些擴充命令一律使用 MASM 運算式評估工具 (,而其他擴充命令只接受數值引數,而不是) 的完整運算式。

  • 如果運算式的任何部分以括弧括住,而且您在運算式之前 () @@ 插入兩個 at 符號,運算式就會由通常不會用於此案例的運算式評估工具進行評估。

雙符號 () @@ 可讓您針對單一命令的不同參數使用兩個不同的評估工具。 它也可讓您使用不同的方法來評估長運算式的不同片段。 您可以在符號巢狀兩者。 兩個 at 符號的外觀會切換至另一個運算式評估工具。

警告 C++ 運算式語法適用于操作結構和變數,但不適合作為偵錯工具命令參數的剖析器。 當您針對一般用途使用偵錯工具命令,或使用偵錯工具擴充功能時,您應該將 MASM 運算式語法設定為預設運算式評估工具。 如果您必須有特定的參數使用 C++ 運算式語法,請使用兩個 at sign (@@) 語法。

如需兩種不同運算式類型的詳細資訊,請參閱 數值運算式語法

運算式中的數位

MASM 運算式中的數位會根據目前的基數來解譯。 n ([設定數位基底) ] 命令可用來將預設的基數設定為 16、10 或 8。 所有未前置詞的數位都會在此基底中解譯。 您可以藉由指定 0x 前置詞 (十六進位) 、 0n 前置詞 (十進位) 、 0t 前置詞 (八進位) 或 0y 前置詞 (二進位) 來覆寫。

除非您以不同的方式指定,否則 C++ 運算式中的數位會解譯為十進位數。 若要指定十六進位整數,請在數位前面加上 0x 。 若要指定八進位整數,請在數位前面加上 0 (零) 。 (不過,在偵錯工具的 輸出中,有時會使用 0n 個十進位前置詞。)

如果您想要同時以數個基底顯示數位,請使用 .formats (顯示數位格式) 命令。

運算式中的符號

這兩種類型的運算式會以不同的方式解譯符號:

  • 在 MASM 運算式中,每個符號都會解譯為位址。 根據符號所參考的內容,此位址是全域變數、區域變數、函式、區段、模組或任何其他已辨識標籤的位址。

  • 在 C++ 運算式中,每個符號都會根據其類型來解譯。 根據符號所參考的內容,它可能會解譯為整數、資料結構、函式指標或任何其他資料類型。 未對應至 C++ 資料類型的符號, (例如未修改的模組名稱,) 建立語法錯誤。

如果符號可能模棱兩可,請在符號前面加上模組名稱和驚嘆號 ( ) 。 如果符號名稱可以解譯為十六進位數位,請在其前面加上模組名稱和驚嘆號 ( ) 或只有驚嘆號。 若要指定符號是本機符號,請省略模組名稱,並在符號名稱前面包含貨幣符號和驚嘆號 ( $! ) 。 如需解譯符號的詳細資訊,請參閱 符號語法和符號比對

運算式中的運算子

每個運算式類型都會使用不同的運算子集合。

如需您可以在 MASM 運算式及其優先順序規則中使用的運算子詳細資訊,請參閱 MASM 數位和運算子

如需您可以在 C++ 運算式及其優先順序規則中使用的運算子詳細資訊,請參閱 C++ 數位和運算子

請記住,MASM 作業一律是以位元組為基礎,而 C++ 作業遵循 C++ 類型規則, (包括指標算術) 的縮放比例。

如需不同語法的一些範例,請參閱 混合運算式範例