在源程序語句格式的 4 個組成部分中,參數是指令的操作對象(在學習硬指令時被稱為操作數),參數之間用逗號分隔
參數根據指令不同可以沒有,可以有 1 個、 2 個或多個
匯編語言程序中,指令參數有數值型,它的主要形式是常數和數值表達式;
硬指令的操作數有立即數;立即數就要用數值型參數表達
1. 常數
常數(常量)表示一個固定的數值
它又分成多種形式:
( 1 )十進制常數
( 2 )十六進制常數
( 3 )二進制常數
( 4 )八進制常數
( 5 )字符串常數
( 6 )符號常數
十進制常數
由 0 ~ 9 數字組成,以字母 d 或 d 結尾
缺省情況下,后綴 d 或 d 可以省略
匯編語言大小寫不敏感, d 和 d 通用
例如: 100 、 255d
由 0 ~ 9 、 a ~ f 組成,以字母 h 或 h 結尾
以字母 a ~ f 開頭的十六進制數,前面要用 0 表達,以避免與其他符號混淆
匯編語言大小寫不敏感, h 和 h 通用
例如: 64h 、 0ffh 、 0b800h
二進制常數
由 0 或 1 兩個數字組成,以字母 b 或 b 結尾
匯編語言大小寫不敏感, b 和 b 通用
例如: 01101100b
八進制常數
由 0 ~ 7 數字組成,以字母 q 或 q 結尾
匯編語言大小寫不敏感, q 和 q 通用
例如: 144q
各種進制的數據以后綴字母區(qū)分,默認不加后綴字母的是十進制數
masm 提供基數控制 .radix 偽指令可以改變默認進制,其格式是: .radix n
字符串常數
用單引號或雙引號括起來的單個字符或多個字符,其數值是每個字符對應的 ascii 碼的值
例如: 'd' = 64h
'ab'= 4142h
‘1'= 31h
'hello, everybody !'
符號常數
利用一個標識符表達的一個數值 ,masm 提供等價機制,用于常量定義
符號定義偽指令:
等價 equ 偽指令
符號名 equ 數值表達式
符號名 equ < 字符串 >
等號 = 偽指令
符號名 = 數值表達式
常數若使用有意義的符號名來表示,可以提高程序的可讀性,同時更具有通用性
符號定義
doswritechar equ 2
carriagereturn = 13
calldos equ <int 21h>
符號應用(左邊程序段等價右側的符號形式)
mov ah,2 ;mov ah,doswritechar
mov dl,13 ;mov dl,carriagereturn
int 21h ;calldos
2. 數值表達式
數值表達式一般是指由運算符連接的各種常數所構成的表達式 , 匯編程序在匯編過程中計算表達式,最終得到一個數值,程序運行之前,就已經計算出了表達式;所以,程序運行速度沒有變慢,但增強程序的可讀性
masm 對除偽指令外各種匯編時處理的指令統稱為操作符( operator )
運算符
算術運算符: + - * / mod
邏輯運算符 and or xor not
移位運算符 shl shr
關系運算符 eq ne gt lt ge le
高低分離符 high low highword lowword
算術運算符:
• 實現加、減、乘、除、取余的算術運算
mov ax,3*4+5 ; 等價于 mov ax,17
• 其中 mod 也稱為取模,它產生除法之后的余數,如 19 mod 7 = 5
• 加 + 和減 - 運算符還可以用于地址表達式
• 除加、減外,其他運算符的參數必須是整數
邏輯運算符:
• 實現按位相與、相或、異或、求反的邏輯運算
or al,03h and 45h
; 等價于 or al,01h
移位運算符:
• 實現對數值的左移、右移的邏輯操作;移入低位或高位的是 0
• 格式為:
數值表達式 shl/shr 移位次數
mov al,0101b shl (2*2)
; 等價于 mov al,01010000b
關系運算符:
• 用于比較和測試符號數值
• masm 用 0ffffh (補碼 -1 )表示條件為真
• masm 用 0000h 表示條件為假
mov bx,((port lt 5)and 20)or((port ge 5)and 30)
; 當 port<5 時,匯編結果為 mov bx,20
; 否則,匯編結果為 mov bx,30
高低分離符:
• 取數值的高半部分或低半部分
3. 運算符的優(yōu)先級
1 () <> [] · length size width mask
2 ptr offset seg tpye this :
3 hige low
4 * / mod shl shr
5 + -
6 eq ne gt lt ge le
7 not
8 and
9 or xor
10 short
建議采用圓括號“()”顯式表達,它可以極大地提高程序的可閱讀性
4. 地址型參數
匯編語言程序中,指令參數還有地址型,它的主要形式是標號和名字(變量名、段名、過程名等)
硬指令的操作數有存儲單元;存儲單元就應該用地址型參數(存儲器操作數)表達