-
數值表達式
鎖定
數值表達式相關內容
數值表達式常量
常量是一個立即數,直接寫在彙編語言語句中,在程序的執行過程中,它不可能發生變化。通常,我們用二進制、八進制、十進制或十六進制來書寫常量。
例如:10101011B、324Q、1234D、1234H、0abcdH、'AB'等都是常量。
在程序中,我們還可用偽指令.RADIX來改變數據的基數,在後面再詳細講解。
數值表達式算術運算符
如:120+(321-90) mod 3,322*5/32,0abcdH+5,-590等
數值表達式關係運算符
若關係不成立,則該數值表達式的計算結果為0;否則,其結果為0FFFFH。
如:120H LT 100H+3,21H LE 21H等,它們的計算結果分別為:0和0FFFFH。
數值表達式邏輯運算符
如:1 SHL 3,47H AND 0FH,NOT 56H等,它們的計算結果分別為:8,7和0A9H。
數值表達式其它操作符
彙編語言中,還有其它可在數值表達式中使用的操作符。它們是:
、HIGH(高8位)、LOW(低8位)
、TYPE(標識符類型)、LENGTH(變量長度)、SIZE(變量容量)
、WIDTH(記錄/記錄字段寬度)、MASK(記錄/記錄字段的屏蔽位)等
在以上操作符中,只有HIGH和LOW沒有介紹過,它們分別是選取表達式計算結果的高8位和低8位。其使用格式如下:
HIGH 表達式 LOW 表達式
如:HIGH (1234H+100H),LOW 1234H等,它們的選取結果分別為:13H和34H。
數值表達式運算優先級
在彙編語言中,有許多各種運算符和操作符,它們的優先級按從高到低的排列如下:
優先級:高
LENGTH、SIZE、WIDTH、MASK、()、[]、.(用於結構字段)、<>(用於記錄類型)
PTR、SEG、OFFSET、TYPE、THIS、:(用於段超越前綴)
*、/、MOD、SHL、SHR
HIGH、LOW
+、-
EQ、NE、LT、LE、GT、GE
NOT
AND
OR、XOR
優先級:低
SHORT
MASM 數值和運算符
MASM(Microsoft 宏彙編器)表達式語法是 Debugging Tools for Windows 4.0 之前版本中的 NTSD, CDB, KD 和 WinDbg 惟一使用的語法。
MASM 表達式中的數值
MASM 表達式中的數值能夠以 16, 10, 8 或者 2 為基數方式輸入。
n (Set Number Base) 命令可用來設置缺省基數為 16, 10 或者 8。所有不帶前綴的數值都以該基數來解釋。通過指定 0x 前綴(十六進制),0n 前綴(十進制),0t 前綴(八進制),或者 0y 前綴(二進制)能夠掩蓋缺省基數。也可以添加一個 h 後綴表示十六進制數值。數值裏面的字母可以是大寫或者小寫,所以 "0x4AB3", "0X4aB3", "4AB3h", "4ab3h" "4aB3H" 都表示相同意思。
如果表達式中前綴後面沒有跟一個數值,它被讀作 0。所以,0 可以寫成三種形式:0,前綴後面跟一個 0,單獨一個前綴。例如,在十六進制下,"0", "0x0" 和 "0x" 都表示相同意思。
能夠以 xxxxxxxx`xxxxxxxx 格式輸入 64 位的十六進制數值,或者忽略當中的重音符號(`)。包含重音符號會使得自動符號擴展無效,詳細請看符號擴展。
MASM 表達式中的符號
如果會混淆,你可以給符號添加一個模塊名和一個感嘆號(!)做為前綴,或者只加一個感嘆號。關於符號識別,詳細請看符號語法和符號匹配。
兩個冒號(::)或者兩條下劃線(__)可以用來標誌類的成員。
只有以模塊名和感嘆號為前綴的符號名中才能使用重音符號(`)或者撇號(')。
MASM 表達式中的數值運算符
總是可以用圓括號來掩蓋優先級規則。
如果 MASM 表達式的某一部分被圓括號括住並有兩個 @ 前綴 - @@( ... ) - 該部分將根據 C++ 表達式規則來解析。在兩個 @ 記號之間以及和左圓括號之間不能有空格。也可以通過使用 @@c++( ... ) 或者 @@masm( ... ) 指定表達式求解器。
當執行算術運算時,MASM 表達式求解器把所有的數值和符號當做 ULONG64 類型。