複製鏈接
請複製以下鏈接發送給好友

數值表達式

鎖定
數值表達式是指評估為數字的任意表達式。該表達式可以變量常量、函數和運算符的任意組合。主要包括常量算術運算符關係運算符邏輯運算符等。
中文名
數值表達式
類    別
表達式
種    類
變量常量函數
組    成
常量、算術運算符、關係運算符

數值表達式相關內容

數值表達式常量

常量是一個立即數,直接寫在彙編語言語句中,在程序的執行過程中,它不可能發生變化。通常,我們用二進制、八進制、十進制或十六進制來書寫常量。
例如:10101011B、324Q、1234D、1234H、0abcdH、'AB'等都是常量
在程序中,我們還可用偽指令.RADIX來改變數據的基數,在後面再詳細講解。

數值表達式算術運算符

算術運算符包括符號:+(正)、-(負),運算符:+(加)、-(減)、*(乘)、/(除)和MOD(取模)。這些運算符和常量、括號可組成數值表達式。
如:120+(321-90) mod 3,322*5/32,0abcdH+5,-590等

數值表達式關係運算符

關係運算符包括符號:EQ(相等)、NE(不等)、LT(小於)、GT(大於)、LE(小於等於)和GE(大於等於)。這些關係運算符和常量、括號也可組成數值表達式。該表達式的計算結果規定如下:
若關係不成立,則該數值表達式的計算結果為0;否則,其結果為0FFFFH。
如:120H LT 100H+3,21H LE 21H等,它們的計算結果分別為:0和0FFFFH。

數值表達式邏輯運算符

邏輯運算符包括按位操作符和移位操作符。具體是:AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)、XOR(異或)、SHL(左移位)和SHR(右移位)。這些邏輯運算符和常量、括號可組成數值表達式。
如:1 SHL 3,47H AND 0FH,NOT 56H等,它們的計算結果分別為:8,7和0A9H。

數值表達式其它操作符

彙編語言中,還有其它可在數值表達式中使用的操作符。它們是:
、HIGH(高8位)、LOW(低8位)
、SEG(段地址)、OFFSET(偏移量)
、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 表達式中的數值運算符
表達式的任意組件都可以用一元運算符來修改,任意兩個組件都可以用二元運算符組合起來。一元運算符優先於二元運算符。當用到多個二元運算符時,遵循已定的優先級規則。
總是可以用圓括號來掩蓋優先級規則。
如果 MASM 表達式的某一部分被圓括號括住並有兩個 @ 前綴 - @@( ... ) - 該部分將根據 C++ 表達式規則來解析。在兩個 @ 記號之間以及和左圓括號之間不能有空格。也可以通過使用 @@c++( ... ) 或者 @@masm( ... ) 指定表達式求解器。
當執行算術運算時,MASM 表達式求解器把所有的數值和符號當做 ULONG64 類型。
一元地址運算符尋址時假定 DS 為缺省段。按運算符的優先級順序計算表達式。如果兩個相鄰的運算符優先級一樣,則從左往右計算表達式。