評估運算式
偵錯工具瞭解兩種不同的運算式形式: MASM 運算式 和 C++ 運算式。
Microsoft 巨集群組合工具 (MASM) 運算式會用於本說明文件中的範例,除非另有說明。 在 MASM 運算式中,所有符號都會視為位址。
C++ 運算式與實際 C++ 程式碼中使用的運算式相同。 在這些運算式中,符號會視為適當的資料類型。
使用每個語法時
您可以使用下列其中一種方式來選取預設運算式評估工具:
在偵錯工具啟動之前,請使用 _NT_EXPR_EVAL 環境變數 。
啟動偵錯工具時,請使用-ee {masm|c++}命令列選項。
使用 .expr (選擇運算式評估工具) 命令,在偵錯工具執行之後顯示或變更運算式評估工具。
如果您未使用上述其中一種方法,偵錯工具會使用 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++ 類型規則, (包括指標算術) 的縮放比例。
如需不同語法的一些範例,請參閱 混合運算式範例。