一、彙編語言的語句格式
由彙編語言編寫的源程序是由許多語句(也可稱為彙編指令)組成的。每個語句由1~4個部分組成,其格式是:
[標號] 指令助記符 [操作數] [;註解]
其中用方括號括起來的部分,可以有也可以沒有。每部分之間用空格(至少一個)分開,一行最多可有132個字符。
1.標識符
給指令或某一存儲單元地址所起的名字。可由下列字符組成:
字母:A ~ z ; 數字:0 ~ 9 ; 特殊字符:?、· 、@、一、$ 。
數字不能作標識符的第一個字符,而圓點僅能用作第一個字符。標識符最長為31個字符。當標識符後跟冒號時,表示是標號。它代表該行指令的起始地址;當標識符後不帶冒號時,表示變量;偽指令前的標識符不加冒號。
2.指令助記符
表示不同操作的指令,可以是8086的指令助記符,也可以是偽指令。
3.操作數
指令執行的對象。依指令的要求,可能有一個、兩個或者沒有,
例如: RET ;無操作數
COUNT: INC CX ;一個操作數
如果是偽指令,則可能有多個操作數,例如:
COST DB 3,4,5,6,7 ;5個操作數
MOV AX,[BP+4] ;第二個操作數為表達式
4.註解
該項可有可無,是為源程序所加的註解,用於提高程序的可讀性。
二、彙編語言的運算符
1.算術運算符、邏輯運算符和關係運算符
算術運算符可以應用於數字操作數,結果也是數字。而應用於存儲器操作數時,只有+、-運算符有意義。
2.取值運算符SEG、OFFSET、TYPE、SIZE和LENGTH
· SEG和OFFSET分別給出一個變量或標號的段地址和偏移量。
例如,定義: SLOT DW 25
則: MOV AX,SLOT;從SLOT地址中取一個字送入AX
MOV AX,SEG SLOT;將SLOT所在段的段地址送入AX
MOV AX,OFFSET SLOT;將SLOT所在段的段內偏移地址送AX
· TYPE操作符返回一個表示存儲器操作數類型的數值。各種存儲器地址操作數類型部分的值如表4-1所示。
·LENGTH和SIZE操作符只應用於數據存儲器操作數。(用DB/DW/DD等定義的操作數)
LENGTH返回一個與存儲器地址操作數相聯繫的單元數,
SIZE操作數返回一個為存儲器操作數分配的字節數。
例如:若 MULT-WORD DW 50DUP(0)
則 LENGTH(MULT-WORD)=50
SIZE(MULT-WORD)=100
注意:SIZE(X)=(LENGTH X)*(TYPE X)
3.屬性運算符
屬性運算符用來給指令中的操作數指定一個臨時屬性,而暫時忽略當前的屬性。常用的有:
(1) 合成運算符PTR
它作用於操作數時,則忽略了操作數當前的類型(字節或字)及屬性(NEAR或FAR),而給出一個臨時的類型或屬性,
一般格式:類型 PTR 表達式
功能:建立一個存儲器地址操作數,它與其後的存儲器地址操作數有相同的段地址偏移量,但有不同的類型。
例如:SLOT DW 25
此時SLOT已定義成字單元。若我們想取出它的第一個字節內容,則可用PTR對其作用,使它暫時改變為字節單元,
即 MOV AL,BYTE PTR SLOT
三、表達式
由運算符和操作數組成的序列,在彙編時產生一個確定的值。這個值可以僅表示一個常量,也可以表示一個存儲單元的偏移地址,相應的表達式稱為常量表達式和地址表達式。
1. 常數
彙編語言語句中出現的常數可以有7種:
① 二進位數 後跟字母B,如01000001B。
② 八進位數 後跟字母Q或O,如202Q或202O。
③ 十進位數 後跟D或不跟字母,如85D或85。
④ 十六進位數 後跟H,如56H,0FFH。注意,當數字的第一個字符是A~F時,在字符前應添加一個數字0,以示和變量的區別。
另有,十進位浮點數、十六進位實數、字符和字符串
2.常量操作數
常量操作數是一個數值操作數,一般是常量或者是表示常量的標識符。可以為數字常量操作數或字符串常量操作數。前者可採用二進位、八進位、十進位或十六進位等計數形式;而後者則為相應字符的ASCII碼。
3.存儲器操作數
存儲器操作數是一個地址操作數,代表一個存儲單元的地址,通常以標識符的形式出現。
存儲器操作數可以分為變量及標號兩種類型,如果存儲器操作數所代表的是某個數據在數據段、附加段或堆棧段中的地址,那麼這個存儲器操作數就稱為變量;如果存儲器操作數所代表的是某條指令代碼在代碼段中的地址,那麼這個存儲器操作數稱為標號。(http://www.diangon.com/版權所有)變量所對應的存儲單元內容在程序的運行過程中是可以改變的,標號通常作為轉移指令或調用指令的目標操作數,在程序運行過程中不能改變。
存儲器操作數有三個方面的屬性。
(1)、段地址:即存儲器操作數所對應的存儲單元所在段的段地址;
(2)、偏移地址:即存儲器操作數所對應的存儲單元在所在段內的偏移地址;
(3)、類型:變量的類型是相應存儲單元所存放的數據項的字節數;而標號的類型則反映了相應存儲單元地址在作為轉移或調用指令的目標操作數時的尋址方式,可有兩種情況,即 NEAR和FAR。具體值可見表4-1
4.常量表達式
由常量操作數及運算符構成,在彙編時產生一個常量。
如PORT、VAL+1、 OFFSET SUM、SEG SUM、TYPE CYCLE等。
5.地址表達式
由存儲器操作數與運算符構成,必須有明確的物理意義。
例如 SUM+2、CYCLE-5
表達式SUM+2、CYCLE-5的值仍然是一個存儲器操作數,該存儲器操作數的段地址與類型屬性分別與存儲器操作數SUM及CYCLE相同,但偏移地址分別比SUM及CYCLE大2或小5。表達式是在彙編時計算的,而變量單元的內容在程序的運行過程中可以改變。
四、彙編語言程序彙編步驟
彙編語言程序要能在機器上運行,還必需將彙編源程序彙編成可執行程序。為此必須完成以下幾個步驟。
1.編輯源程序
2.調用宏彙編對源程序進行彙編
3.對目標程序進行連接
4.運行可執行程序並調試
電子愛動手,關注電子DIY