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