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