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