基本介紹
相關內容,常量,算術運算符,關係運算符,邏輯運算符,其它操作符,運算優先權,
相關內容
常量
常量是一個立即數,直接寫在彙編語言語句中,在程式的執行過程中,它不可能發生變化。通常,我們用二進制、八進制、十進制或十六進制來書寫常量。
例如: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。
邏輯運算符
如: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 類型。