第3章+匯編語(yǔ)言程序格式+.ppt_第1頁(yè)
第3章+匯編語(yǔ)言程序格式+.ppt_第2頁(yè)
第3章+匯編語(yǔ)言程序格式+.ppt_第3頁(yè)
第3章+匯編語(yǔ)言程序格式+.ppt_第4頁(yè)
第3章+匯編語(yǔ)言程序格式+.ppt_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、母親卡,第3章 匯編語(yǔ)言程序格式,3.1 匯編程序功能 3.2 偽操作 3.3 匯編語(yǔ)言程序格式 3.4 匯編語(yǔ)言程序的上機(jī)過(guò)程 3.5 DOS系統(tǒng)功能調(diào)用,開(kāi) 始,3.1 匯編程序功能,1.程序的建立及匯編過(guò)程 用編輯程序建立ASM源文件 源文件就是用匯編語(yǔ)言的語(yǔ)句格式編寫(xiě)的程序源程序。它是不能被機(jī)器所識(shí)別的,所以要經(jīng)過(guò)匯編程序加以翻譯。 我們通常用編輯程序(全屏幕編輯程EDIT)產(chǎn)生匯編語(yǔ)言的源程序。,返回本章首頁(yè),用MASM程序把源程序ASM轉(zhuǎn)換成OBJ文件。 匯編語(yǔ)言的作用就是把源文件轉(zhuǎn)換成二進(jìn)制代碼表示的目標(biāo)文件(稱(chēng)為OBJ文件)。 在轉(zhuǎn)換的過(guò)程中,匯編程序?qū)υ闯绦蜻M(jìn)行二遍掃視,如果

2、源程序中有語(yǔ)法錯(cuò)誤,則匯編結(jié)束后,匯編程序?qū)⒅赋鲈闯绦蛑械腻e(cuò)誤,用戶(hù)還可以用編輯程序來(lái)修改源程序中的錯(cuò)誤,最后得到無(wú)語(yǔ)法錯(cuò)誤的OBJ文件。,用LINK程序把OBJ文件轉(zhuǎn)換成EXE文件 OBJ文件雖然已經(jīng)是二進(jìn)制文件,但它還不能直接上機(jī)運(yùn)行; OBJ文件必須經(jīng)過(guò)連接程序(LINK)把目標(biāo)文件與庫(kù)文件或其他目標(biāo)文件連接在一起形成可執(zhí)行文件(EXE文件)。 這個(gè)文件可以由DOS裝入存儲(chǔ)器,并在機(jī)器上運(yùn)行。 用DOS文件命令直接鍵入文件名就可以執(zhí)行改程序。,用圖來(lái)表示對(duì)匯編語(yǔ)言的處理過(guò)程: 2匯編程序的主要功能: 檢查源程序; 測(cè)出源程序中的語(yǔ)法錯(cuò)誤,并給出出錯(cuò)信息 產(chǎn)生源程序的目標(biāo)程序,并給出列表文

3、件 展開(kāi)宏指令,編輯程序,ABC.ASM文件,匯編程序,ABC.OBJ文件,連接程序,ABC.EXE文件,3.2 偽操作,匯編語(yǔ)言程序由指令、偽操作和宏指令組成。 偽操作又稱(chēng)偽指令,它不象機(jī)器指令那樣是在程序運(yùn)行期間由計(jì)算機(jī)來(lái)執(zhí)行的,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作,它們可以完成如數(shù)據(jù)定義,分配存儲(chǔ)區(qū),指示程序結(jié)束等功能。,返回本章首頁(yè),1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 偽操作的格式: 【變量】 助記符 操作數(shù)1,操作數(shù)2,【;注釋】 其中變量字段是可有可無(wú)的,它是符號(hào)地址, (1)變量是“操作數(shù)1”的 偏移地址。 (2)助記符(操作項(xiàng)):說(shuō)明偽操作的功能。 【說(shuō)明所定義的數(shù)據(jù)類(lèi)

4、型】 (3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。 (4)注釋?zhuān)赫f(shuō)明該偽操作的功能,它是可有可無(wú)的。,1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 (2)助記符(操作項(xiàng)):說(shuō)明偽操作的功能 【說(shuō)明所定義的數(shù)據(jù)類(lèi)型】 DB:用來(lái)定義字節(jié),其后的每一個(gè)操作數(shù)都占一個(gè)字節(jié)。 DW:用來(lái)定義字,其后的每一個(gè)操作數(shù)都占一個(gè)字(低位字節(jié)在第一個(gè)字節(jié)地址中,高位字節(jié)在第二個(gè)字節(jié)地址中)。 DD:定義雙字,其后的每個(gè)操作數(shù)占有二個(gè)字。 DQ:定義四個(gè)字,其后的每個(gè)操作數(shù)占四個(gè)字 DT:定義十個(gè)字節(jié),其后每個(gè)操作數(shù)占10個(gè)字節(jié)。,1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 這些偽操作可以把數(shù)據(jù)存入指定的存儲(chǔ)單元或者只分配存儲(chǔ)器空間而并

5、不存入確定的數(shù)據(jù)。 (3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。 操作數(shù)可以是常數(shù)或表達(dá)式,但在存儲(chǔ)區(qū)中存放的是數(shù)據(jù)。,1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 例3.7 數(shù)據(jù)的定義: DATA_BYTE DB 10,4,10H DATA_WORD DW 100,100H,+5 DATE_DW DD 3*20,0FFFDH ARY DW 1,1,1,2,2,2 解: DB: 10 0AH, DW: 100D 0064H +5 0005H DD: 3*20=60D= 3CH=0000003CH 0FFFDH=0000FFFFDH,1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 DATA_BYTE DB 10,4,10H

6、 DATA_WORD DW 100,100H,+5 DATE_DW DD 3*20,0FFFDH NUM DW 1,1,1,2,2,2 DS=0B45 ES=0B35 SS=0B48 CS=0B55 IP=0010 NV UP EI PL NZ NA PO NC -D0B45:0000 0B45:0000 0A 04 10 64 00 00 01 05-00 3C 00 00 00 FD 0F 00 .d. 0B45:0010 00 01 00 01 00 01 00 02-00 02 00 02 00 00 00 00 . 0B45:0020 00 00 00 00 00 00 00 00-

7、00 00 00 00 00 00 00 00 .,1數(shù)據(jù)定義及存儲(chǔ)器分配偽操作 操作數(shù)也可以是字符串 例3.8:MESSAGE DB HELLO DB AB 用ASCII碼值一個(gè)字節(jié)來(lái)表示一個(gè)字符 H48H;E45H;L4CH; L4CH; O4FH; A41H;B42H 用十六進(jìn)制表示的ASCII碼字符。 DS=0B45 ES=0B35 SS=0B47 CS=0B54 IP=0005 -D0B45:0000 0B45:0000 48 45 4C 4C 4F 41 42 01-00 01 00 01 00 02 00 02 HELLOAB. 0B45:0010 00 02 00 06 00

8、00 00 00-00 00 00 00 00 00 00 00 .,操作數(shù)可以保留存儲(chǔ)空間,但不存入數(shù)據(jù)。 例3.9: ABC DB 0,?,?,?,0 DEF DW ?,60,? 0B45:0000 00 00 00 00 00 00 00 3C-00 00 00 00 操作數(shù)字段還可以使用復(fù)制操作符來(lái)復(fù)制一個(gè)多個(gè)或操作數(shù)。 格式:復(fù)制數(shù) DUP (操作數(shù),操作數(shù)) 復(fù)制數(shù)指定括號(hào)中的操作數(shù)被重復(fù)的次數(shù),它可以是一個(gè)表達(dá)式。,例3.10:ARRAY1 DB 2 DUP (0,1,2,?) ORG 10H ARRAY2 DB 5 DUP (?) ORG 20H ARRAY3 DB 5 DUP

9、(8) 語(yǔ)句1與ARRAY1 DB 0,1,2,?,0,1,2,? 等價(jià) 0B45:0000 00 01 02 00 00 01 02 00-00 00 00 00 00 00 00 00 0B45:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B45:0020 08 08 08 08 08 00 00 00-00 00 00 00 00 00 00 00 DUP 操作可嵌套 例:ARRAY4 DB 2 DUP(0,2 DUP(1,2),3) (1+221)26212字節(jié),變量的類(lèi)型屬性: 1)變量是第一個(gè)數(shù)據(jù)項(xiàng)的偏移地址。 2)用

10、來(lái)表示每一個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度,它是以字節(jié)為單位來(lái)表示的。 用DB定義的變量占1字節(jié)。 DW=2,DD=4,DQ=8,DT=10 匯編語(yǔ)言用隱含的類(lèi)型屬性來(lái)確定某些指令是字指令還是字節(jié)指令 在賦值語(yǔ)句中,兩個(gè)操作數(shù)類(lèi)型要一致。,例7:OPER1 DB 1,2 OPER2 DW 1234H,5678H MOV AL, OPER1 (賦值語(yǔ)句) MOV AX, OPER2 OPER1為字節(jié)類(lèi)型屬性,AL為字節(jié)類(lèi)型屬性, OPER2為字類(lèi)型屬性,AX為字類(lèi)型屬性。 若改為 MOV AX, OPER1 MOV AL, OPER2 錯(cuò)誤:匯編程序在匯編時(shí),能發(fā)現(xiàn)兩條MOV指令中的兩個(gè)操作數(shù)的類(lèi)型不匹配。 可以

11、用“PTR”屬性操作符指定操作數(shù)的類(lèi)型屬性, 其格式:類(lèi)型 PTR 變量常量 類(lèi)型:BYTE, WORD, DWORD(雙字),格式:類(lèi)型 PTR 變量常量 類(lèi)型:BYTE, WORD, DWORD(雙字) 改正: MOV AX, WORD PTR OPER1 (AX)=0201H MOV AL, BYTE PTR OPER2(AL)=34H 這樣OPER1類(lèi)型屬性為字,兩個(gè)操作數(shù)(AX, OPER1 )的類(lèi)型一致,匯編時(shí)不會(huì)出錯(cuò),運(yùn)行時(shí)把OPER1的字內(nèi)容送入AX,即將OPER1的內(nèi)容送AL,把OPER1 +1的內(nèi)容送AH,執(zhí)行后(AX)=0201H, 而第二條指令應(yīng)把OPER2的第一個(gè)字節(jié)

12、內(nèi)容送AL,即(AL)=34H,LABEL:用來(lái)使同一個(gè)變量具有不同的屬性(與PTR屬性操作符類(lèi)似) 格式:變量 LABEL 類(lèi)型 其中:類(lèi)型BYTE,WORD,DWORD 例8:B_ARRAY LABEL BYTE W_ARRAY DW 1122H,1122H 數(shù)據(jù)1122H的第一個(gè)字節(jié)的地址賦予2個(gè)不同類(lèi)型的變量名:字節(jié)類(lèi)型變量B_ARRAY和字類(lèi)型變量W_ARRAY 。 MOV AL,B_ARRAY ;(AL)=22H MOV BX,W_ARRAY ;(BX)=1122H,2表達(dá)式賦值偽操作 有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為方便起見(jiàn)可以用賦值偽操作給表達(dá)式賦予一個(gè)名字。格式: 表達(dá)式名

13、 EQU 表達(dá)式 表達(dá)式名:凡用到該表達(dá)式之處就可以用表達(dá) 式名來(lái)代替 表達(dá)式:操作數(shù)、可求出常數(shù)值的表達(dá)式、有效的助記符 例:CONSTANT EQU 256 數(shù)賦以符號(hào)名 ALPHA EQU CONSTANT +7,“”偽操作也可作為賦值偽操作使用, 并且“”偽操作允許重復(fù)定義。 例:EMP=7 EMP=EMP+1 而EQU偽操作中的表達(dá)式名是不允許重復(fù)定義的。,3段定義偽操作 存儲(chǔ)器的物理地址是由段地址和偏移地址組成的,當(dāng)匯編程序把源程序轉(zhuǎn)換為目標(biāo)程序時(shí),必須確定標(biāo)號(hào)和變量的偏移地址,并把有關(guān)的信息通過(guò)目標(biāo)模塊傳送給連接程序,以便連接程序把不同的段和模塊連接在一起形成一個(gè)可執(zhí)行的程序。

14、段定義偽操作的格式 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 使用類(lèi)型 類(lèi)別 例如: DATA1 SEGMENT PARA PRIVATE USE16 DATA DATA1 ENDS,段定義格式:SEGMENT ; ENDS 對(duì)于數(shù)據(jù)段,附加段,堆棧段來(lái)說(shuō),是存儲(chǔ)單元的定義分配 對(duì)于代碼段則是指令及偽操作。 段名必須由SEGMENT定義的段中的段名 各段的作用:是通過(guò)它與段寄存器的關(guān)系語(yǔ)句聲明指定的。語(yǔ)句格式: ASSUME 段寄存器 :段名 段寄存器CS,DS,ES,SS 例如: ASSUME DS :DATA1,例如: data_seg1 segment ; 定義數(shù)據(jù)段 data_seg1

15、 ends data_seg2 segment ; 定義附加段 data_seg2 ends code_seg segment assume cs : code_seg, ds:data_seg1, es:data_seg2 start: mov ax, data-seg1 ;數(shù)據(jù)段地址放入ds mov ds, ax mov ax, data-seg2 ;附加段地址放入es mov es, ax Code_seg ends ;代碼段結(jié)束 end start,ASSUNE偽操作只指定某一個(gè)段分配給哪一個(gè)段寄存器,它并不把段地址裝入段寄存器中,所以在代碼段中必須把段地址裝入相應(yīng)的段寄存器中。 SE

16、GMENT偽操作還可以增加類(lèi)型及屬性的說(shuō)明;格式如下: Segname segment 定位類(lèi)型 組合類(lèi)型 使用類(lèi)型 類(lèi)別 Segname ends,段定義偽操作的格式 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 使用類(lèi)型 類(lèi)別 例如: DATA1 SEGMENT PARA PRIVATE USE16 DATA DATA1 ENDS 定位類(lèi)型:段起始位置的邊界值的情況 PARA:指定段的起始地址必須從小段邊界開(kāi)始,小段邊界是指段的地址的最低的16進(jìn)制數(shù)位必須為0。 BYTE:該段可以從任何地址開(kāi)始,這樣定義段的時(shí)候等于對(duì)段的起始位沒(méi)有限制。 WORD:該段必須從字的邊界開(kāi)始,即段地址必須為偶數(shù)。

17、 PAGE:該段必須從頁(yè)的邊界開(kāi)始,即段地址的最低兩個(gè)16進(jìn)制數(shù)位必須為0(該地址能被256整除),段定義偽操作的格式 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 使用類(lèi)型 類(lèi)別 例如: DATA1 SEGMENT PARA PRIVATE USE16 DATA 組合類(lèi)型:程序連接時(shí)的段合并方法。 PUBLIC:該段連接時(shí)將與有相同名字的其他分段連接在一起,連接次序由連接命令指定。 COMMON:會(huì)產(chǎn)生覆蓋。該段在連接時(shí)與其它同名分段具有相同的起始地址,所以會(huì)產(chǎn)生覆蓋, COMMON連接長(zhǎng)度是各分段中的最大長(zhǎng)度。 PRIVATE:該段為私有段,在連接時(shí)將不與其他模塊中的同名分段合并 組合類(lèi)型的默

18、認(rèn)值是PRIVATE。,段定義偽操作的格式 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 使用類(lèi)型 類(lèi)別 DATA1 SEGMENT PARA PRIVATE USE16 DATA (3) 使用類(lèi)型:用來(lái)說(shuō)明使用16位尋址方式,還是32位尋址方式。它們是: USE 16:使用16位尋址方式; USE 32:使用32位尋址方式。 使用類(lèi)型默認(rèn)項(xiàng)為USE 16 (4) 類(lèi)別:在引號(hào)中給出類(lèi)型名,連接時(shí)把相同類(lèi)型的段的位置靠在一起。,4存儲(chǔ)模型與簡(jiǎn)化段定義偽操作 簡(jiǎn)化段定義 例: . MODEL SMALL . STACK 100H . DATA A1 DB 08H ;定義數(shù)據(jù)區(qū) . CODE STAR

19、T: MOV AX, DATA MOV DS, AX MOV AX, 4C00H INT 21H END START,MODEL偽操作 用來(lái)說(shuō)明在存儲(chǔ)器中是如何存放各個(gè)段的。 Ting:所有數(shù)據(jù)和代碼都放在一個(gè)段內(nèi),其數(shù)據(jù)和代碼都是近訪問(wèn)。 近訪問(wèn):位移量是16位,范圍在-32768+32767之間。 Small:所有數(shù)據(jù)放在一個(gè)64K的數(shù)據(jù)段內(nèi),所有代碼放在另一個(gè)64K的代碼段內(nèi)。,5程序開(kāi)始和結(jié)束偽操作 在程序的開(kāi)始可以用NAME或TITLE為模塊取名字。 (1) NAME:模塊名 例:NAME: EX_MOVS 匯編程序把NAME后邊給出的名字作為模塊名。 程序中也可使用TITLE偽操作

20、: (2) TITLE TEXT 例:TITLE EX_MOVS TITLE偽操作可指定每一頁(yè)上打印標(biāo)題;匯編程序可以將TEXT的前六個(gè)字符作為模塊名。 若既無(wú)NAME,又無(wú)TITLE,則把源文件名作為模塊名。,表示源程序結(jié)束的偽操作的格式為: END LABEL 例:END START 其中l(wèi)abel標(biāo)號(hào)指示程序開(kāi)始執(zhí)行的起始地址,如果是多個(gè)程序模塊相連接,則只有主程序才使用標(biāo)號(hào),其它子程序則只用END而不必指定標(biāo)號(hào)。 title給出標(biāo)題,用end start表示程序結(jié)束; 匯編程序遇到END時(shí)結(jié)束匯編,并指出從START開(kāi)始執(zhí)行。,例如:設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)三個(gè)數(shù)10H、3BH和42H的加法

21、運(yùn)算,源程序的名字為ABCASM。 STACK SEGMENT DB 20 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AL,10H ADD AL,3BH ADD AL,42H MOV AH,4CH INT 21H CODE ENDS END START,6對(duì)準(zhǔn)偽操作和地址計(jì)數(shù)器 EVEN偽操作使下一個(gè)字節(jié)地址是偶數(shù) 一個(gè)字的地址最好從偶地址開(kāi)始, 對(duì)于字?jǐn)?shù)組,為保證其從偶地址開(kāi)始,可以在它前面用EVEN來(lái)實(shí)現(xiàn)。,DATA SEGMENT EVEN WARRY D

22、W 100 DUP(?) DATA ENDS ORG 常用的表達(dá)式 設(shè)置當(dāng)前地址計(jì)數(shù)器的值使下一個(gè)字節(jié)的地址是常數(shù)表達(dá)式的值。 例如:VECTORS SEGMENTS ORG 10H VECT1 DW 1234H ORG 20H VECT2 DW 5678H VECTORS ENDS VECT1的偏移地址值為10H,而VECT2偏移值為20H, 地址計(jì)數(shù)器的值可用$來(lái)表示,并可直接用$來(lái)引用地址計(jì)數(shù)器的值。在對(duì)源程序進(jìn)行匯編時(shí),使用地址計(jì)數(shù)器來(lái)保存當(dāng)前正在匯編的指令的地址。 例如: VECTORS SEGMENTS ORG 10H VECT1 DW $1234H ; (VECT1)= 1244

23、H ORG 20H VECT2 DW $5678H ; (VECT2)=5688H VECTORS ENDS,ALIGN偽操作 設(shè)置地址值是4的倍數(shù)。格式為: ALIGN boundary 其中 boundary 必須是2的冪 例: DATA ALIGN 4 ARRAY DB 100 DUP(?) 保證了ARRAY的值為4的倍數(shù)。,例1:定義數(shù)據(jù)段中變量A=10,數(shù)組WARRY有10個(gè)元素11,再定義變量B10 DATA SEGMENT A DB 10 WARRY DW 10 DUP(11) B DB 10 DATA ENDS,例2:定義數(shù)據(jù)段中變量A10,數(shù)組WARRY有10個(gè)元素11,但該

24、數(shù)組應(yīng)從偶地址開(kāi)始存放數(shù)據(jù),再定義變量B10 DATA SEGMENT A DB 10 EVEN WARRY DW 10 DUP(11) B DB 10 DATA ENDS,例3:定義數(shù)據(jù)段中變量A=10,存入數(shù)組WARRY時(shí),應(yīng)用20H開(kāi)始,存放10個(gè)元素11,再存放B=10變量并從30H開(kāi)始 DATA SEGMENT A DB 10 ORG 20H WARRY DW 10 DUP(11) ORG 30H B DB 10 DATA ENDS,7.基數(shù)控制偽操作 匯編程序默認(rèn)的數(shù)為10進(jìn)制數(shù),因而除非專(zhuān)門(mén)指定,匯編程序把程序中出現(xiàn)的數(shù)均看作10進(jìn)制數(shù)。當(dāng)使用其他基數(shù)表示的常數(shù)時(shí),需要專(zhuān)門(mén)給以標(biāo)

25、記。 二進(jìn)制數(shù) 由一串0,1組成其后跟以字母B,如:00101100B 十進(jìn)制數(shù):由09數(shù)字組成的數(shù),后面可以跟字母D,如178D,十六進(jìn)制數(shù):由數(shù)字09,A-F組成的數(shù),后面跟字母H. 如果這個(gè)數(shù)的第一個(gè)字符是A-F時(shí),應(yīng)在其前加上數(shù)字0,如0FFFF 八進(jìn)制數(shù):由數(shù)字07組成的數(shù),后面可跟字母O或Q,如:1777O,RADIX:可把默認(rèn)的基數(shù)改變?yōu)?16范圍內(nèi)的任何基數(shù) RADIX 表達(dá)式 表達(dá)式的值為默認(rèn)的基數(shù)值(十進(jìn)制表示) 例:MOV BX ,0FFH RADIX 16 MOV BX, 178 MOV BX, 0FF MOV BX, 178D 是等價(jià)的。 把基數(shù)定為16進(jìn)制數(shù)后,十進(jìn)

26、制數(shù)后跟D,如果某16進(jìn)制數(shù)末字符為D,則應(yīng)在其后跟字母H,以免與10進(jìn)制混淆。 字符串可以看成串常數(shù),可以用雙引號(hào)或單引號(hào)把字符串放在其中,得到的是字符串的ASCII碼值. 例如:DB ABCD db “good”,3.3 匯編語(yǔ)言程序格式,匯編語(yǔ)言源程序中的每個(gè)語(yǔ)句可以由四項(xiàng)組成, 語(yǔ)句格式:名字 操作項(xiàng) 操作數(shù) ;注釋 其中,名字項(xiàng)是一個(gè)符號(hào); 操作項(xiàng)是一個(gè)操作碼的助記符,它可以是指令,偽操作或宏指令名。 操作數(shù)項(xiàng)是由一個(gè)或多個(gè)表達(dá)式組成,它為執(zhí)行操作提供需要的信息。 注釋項(xiàng)用來(lái)說(shuō)明程序或語(yǔ)句功能 “;”為識(shí)別注釋項(xiàng)的開(kāi)始。 以上四項(xiàng)中,帶括號(hào)的兩項(xiàng)是可有可無(wú)的; 各項(xiàng)間用“空格”符隔開(kāi)

27、。,語(yǔ)句格式:名字 操作項(xiàng) 操作數(shù) ;注釋 1名字項(xiàng):源程序中用下列字符來(lái)表示名字: (1)字母A-Z; (2) 數(shù)字09; (3)專(zhuān)用字符 ? . _ $ 除了數(shù)字外,所有字符都可以放在源語(yǔ)句的第一個(gè)位置。 名字中如果遇到“ . ”則必須是第一個(gè)字府。 可以用很多字符來(lái)說(shuō)明名字,但只有前面的31個(gè)字符能被匯編程序所識(shí)別。 名字項(xiàng)可以是標(biāo)號(hào)或變量,它們都用來(lái)表示本語(yǔ)句的符號(hào)地址。 它是可有可無(wú)的,只有用符號(hào)地址來(lái)訪問(wèn)該語(yǔ)句時(shí)它才需要出現(xiàn)。,語(yǔ)句格式:名字 操作項(xiàng) 操作數(shù) ;注釋 標(biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面根冒號(hào)“:”,它也可以用LABEL或EQU偽操作來(lái)定義。 標(biāo)號(hào)經(jīng)常在轉(zhuǎn)移指令用以表示轉(zhuǎn)

28、向地址。 三種屬性:段,偏移和類(lèi)型 段屬性:標(biāo)號(hào)的段地址已隱含給出,標(biāo)號(hào)的段地址總在CS寄存器中。 偏移:標(biāo)號(hào)的偏移地址是16位無(wú)符號(hào)數(shù),它代表從段起始地址到定義標(biāo)號(hào)的位置之間的字節(jié)數(shù) 類(lèi)型:用來(lái)指出該標(biāo)號(hào)是在本段內(nèi)引用還是在其它段中引用,如在段內(nèi)則稱(chēng)為NEAR指針長(zhǎng)度為2字節(jié)。如在段外引用則稱(chēng)為FAR指針長(zhǎng)度4字節(jié)。,變量:變量在除代碼段以外的其他段中定義,后面不根冒號(hào),它也可以用LABLE或EQU偽操作來(lái)定義。 變量經(jīng)常在操作數(shù)字段出現(xiàn)。 三種屬性:段,偏移和類(lèi)型。 段屬性:具有段地址。 定義變量的段起始地址,此值必須在一個(gè)段寄存器中;,偏移:變量的偏移地址是16位無(wú)符號(hào)數(shù),它代表從段的起

29、始地址到定義變量的位置之間的字節(jié)數(shù)。 類(lèi)型:定義該變量所保留的字節(jié)數(shù)。 如:BYTE(1個(gè)字節(jié)長(zhǎng)) WORD(2個(gè)字節(jié)長(zhǎng)) DWORD(4個(gè)字節(jié)長(zhǎng)) DQ(8個(gè)字節(jié)長(zhǎng)) 在程序中,標(biāo)號(hào)或變量的定義只允許出現(xiàn)一次。,語(yǔ)句格式:名字 操作項(xiàng) 操作數(shù) ;注釋 2.操作項(xiàng):操作項(xiàng)可以是指令助記符, 偽操作或宏指令的助記符。 對(duì)于指令,匯編程序?qū)⑵浞g為機(jī)器語(yǔ)言指令。 對(duì)于偽操作,匯編程序?qū)雌涔δ苓M(jìn)行處理。 對(duì)于宏指令,則將根據(jù)其定義展開(kāi)。 3.操作數(shù)項(xiàng): 由一個(gè)表達(dá)式或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號(hào)分開(kāi)。 在指令中,操作數(shù)項(xiàng)的位置被翻譯成操作數(shù)地址。,操作數(shù)項(xiàng)可以是常數(shù),寄存器,標(biāo)號(hào),變

30、量,表達(dá)式 表達(dá)式:是由常數(shù),寄存器,標(biāo)號(hào),變量與一些操作符組合的序列。 有數(shù)字表達(dá)式和地址表達(dá)式兩種 算術(shù)操作符:,*,/,mod(除法求余) 算術(shù)操作符可以用于數(shù)字表達(dá)式或地址表達(dá)式中 地址數(shù)字量是是某一單元的地址: SUM1:SUM字節(jié)單元的下一個(gè)字節(jié)單元的地址 SUM1:SUM字節(jié)單元的前一個(gè)字節(jié)單元的地址,例1:要求把首地為BLOCK的字?jǐn)?shù)組的第1個(gè)字傳送到DX寄存器,可用指令。 MOV DX , BLOCK 例2:數(shù)組A定義如下,試寫(xiě)出把數(shù)組長(zhǎng)度(字?jǐn)?shù))存入CX寄存器的指令。 A DW 1,2,3,4,5,6,7 END DW ? 其中END是為計(jì)算數(shù)組長(zhǎng)度而建立的符號(hào)地址 MOV

31、 CX , (END-A)/2 MOV CX , 7 0500:0000 01 00 02 00 03 00 04 00-05 00 06 00 07 00 0000 偏移地址: 00-01-02-03-04-05 -06-07-08-09-0A-0B-0C-0D-0E0F (0E-00)/2=7,邏輯操作符:AND,OR,XOR,NOT 邏輯操作符是位操作,它只能用于數(shù)字表達(dá)式中。 例3:IN AL , PORT OUT PORT +1 , AL 其中,PORT為端口號(hào),OUT指令中表達(dá)式說(shuō)明從PORT 重讀出數(shù)據(jù),將該數(shù)據(jù)在PORT +1中輸出。,關(guān)系操作符:兩個(gè)操作數(shù)必須為數(shù)字或同一段內(nèi)

32、兩存儲(chǔ)器地址,結(jié)果有6種: LT(小于), LE(小于等于) GT(大于),GE(大于等于) EQ(相等),NE(不等) 例5:MOV BX ,PORT LT 5 當(dāng)PORT5為真時(shí), (BX)=0FFFFH , 當(dāng)PORT=5為真時(shí), (BX)=0,數(shù)值回送操作符 將變量或表號(hào)作為數(shù)值回送。 TYPE 1)如果是變量,則匯編程序?qū)⒒厮驮撟兞款?lèi)型包含的字節(jié)數(shù): DB=1,DW=2,DD=4,DT=10. 2)如果是標(biāo)號(hào),回送該標(biāo)號(hào)類(lèi)型的數(shù)值。 NEAR1, FAR2 例6: ARRAY DW 1,2,3 ADD SI , TYPE ARRAY 匯編:ADD SI, 2, LENGTH 變量中使

33、用DUP的情況時(shí)回送該變量單元數(shù);其他情況回送1 例7: FEES DW 100 DUP (0) MOV CX , LENGTH FEES 匯編: MOV CX , 100 例8:ARRAY DW 1,2,3 MOV CX , LENGTH ARRAY 匯編: MOV CX , 1,SIZE:匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù),此值是LENGTH和TYPE值的乘積。 FEES DW 100 DUP (0) MOV SI,TYPE FEES MOV CX , LENGTH FEES MOV DX, SIZE FEES 匯編:MOV SI,2 MOV CX , 100 MOV DX,200,OFF

34、SET:回送變量或標(biāo)號(hào)的偏移地址。 格式為:OFFSET Variable或label 例: MOV BX , OFFSET FEES 將OPER的偏移地址作為立即數(shù)回送給指令 而在執(zhí)行時(shí),則將該偏移地址裝入BX寄存器中。 與 LEA BX , FEES等價(jià)。, SEG:回送變量的段地址或標(biāo)號(hào)的段地址 例:數(shù)組A定義如下 DATA SEGMENT A DW 1,2,3,4,5,6,7 END DW ? DATA ENDS MOV BX , SEG A DATA是從存儲(chǔ)器的05000H地址開(kāi)始的一個(gè)數(shù)據(jù)段的段名,A是該段中的一個(gè)變量名,將把0500H賦值給BX。,屬性操作符包括6種: PTR 段

35、操作符 SHORT THIS HIGH LOW, PTR 類(lèi)型 PTR 表達(dá)式 (type PTR expression) 用來(lái)給已分配的存儲(chǔ)地址賦予另一種屬性使該地址具有另一種類(lèi)型。 類(lèi)型: 類(lèi)型字段表示所賦予的新類(lèi)型屬性。 表達(dá)式:表達(dá)式字段是原有類(lèi)型的符號(hào)字段。 OPER2 DW 1234H,5678H MOV AL, BYTE PTR OPER2(AL)=34H,例:已有數(shù)據(jù)定義如下: TWO_BYTE DW ? 用下列語(yǔ)句對(duì)這兩個(gè)字節(jié)賦予另一類(lèi)型定義: ONE_BYTE EQU BYTE PTR TWO-BYTE 這里ONE-BYTE和TWO-BYTE兩個(gè)符號(hào)地址具有相同的段地址和偏

36、移地址。但類(lèi)型屬性不同, ONE_BYTE 為字節(jié)變量, TWO-BYTE為字節(jié)變量. 說(shuō)明類(lèi)型可有:BYTE,WORD,DWORD, NEAR,FAR幾種。 PTR可用來(lái)建立字,雙字,段內(nèi)或段間指令單元, 段操作符 用來(lái)表示一個(gè)標(biāo)號(hào),變量或地址表達(dá)式的段屬性 例如:用段前綴指定某段的地址操作數(shù)。 MOV AX , ES : BX+SI 表示形式:段名:地址表達(dá)式 SHORT 用來(lái)修飾指令中轉(zhuǎn)向地址的屬性 指出轉(zhuǎn)向地址是在下一條指令地址的127個(gè)字節(jié)范圍內(nèi),THIS 格式: THIS 屬性 或 類(lèi)型 該操作數(shù)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元地址相同。 它可以象PTR一樣建立一個(gè)指定類(lèi)型或指定

37、距離的地址操作數(shù)。 例如:FIRST_TYPE EQU THIS BYTE WORD_TAB DW 100 DUP(?) 此時(shí)FIRST_TYPE的偏移地址和WORD_TAB完全相同,但它是字節(jié)類(lèi)型的,而WORD_TAB是字類(lèi)型的。,HIGH和LOW:稱(chēng)為字節(jié)分離操作符,它接收一個(gè)數(shù)或地址表達(dá)式,HIGH取其高字節(jié),LOW取其低字節(jié)。 例: CONST EQU 0ABCDH 則 MOV AH , HIGH CONST 將匯編成 MOV AH , 0ABH 以上說(shuō)明了五種類(lèi)型的常用操作符。,表達(dá)式是常數(shù),寄存器,標(biāo)號(hào),變量和操作符的組合. 在計(jì)算表達(dá)式時(shí),應(yīng)該先計(jì)算優(yōu)先級(jí)高的操作符。然后從左到右

38、的對(duì)優(yōu)先級(jí)相同的操作符進(jìn)行計(jì)算。優(yōu)先級(jí)從高到低排列如下,共11級(jí)。(P109),語(yǔ)句格式:名字 操作項(xiàng) 操作數(shù) ;注釋 注釋項(xiàng):說(shuō)明一段程序或一條指令的功能,是可有可無(wú)的。 語(yǔ)句中分號(hào)“;”后面是注釋項(xiàng).,3.4 匯編語(yǔ)言程序的上機(jī)過(guò)程,1建立匯編語(yǔ)言的工作環(huán)境: EDIT.COM ;編輯程序 MASM.EXE ; 匯編程序 LINK.EXE ;連接程序 DEBUG.COM ; 調(diào)試程序 EXE 2BIN.EXE ; 轉(zhuǎn)換成COM文件 以上文件存放在磁盤(pán)上。,返回本章首頁(yè),2建立ASM文件 設(shè)用編輯軟件建立一個(gè)文件名為: abc.asm的原文件. CEDIT abc.asmBR E存盤(pán)退出 3

39、產(chǎn)生OBJ文件 MASM ABCBR 源文件建立后,就用MASM對(duì)源文件匯編,匯編后產(chǎn)生二進(jìn)制的目標(biāo)文件(OBJ) 4用LINK產(chǎn)生EXE文件 LINK ABCBR 5程序的執(zhí)行 C ABCBR CDEBUG ABC.EXEBR,3產(chǎn)生OBJ文件 CMASM ABC BR The IBM Personl Computer Assembler Version 1.00(C) Copyright IBM CORP (98) Obgect filename ABC.OBJ: Source Listing NUL.LST: ABC Cross reference NUL.CRF: ABC 第一個(gè)是OBJ文件目標(biāo)文件 第二個(gè)是LST文件列表文件 列表文件同時(shí)列出源程序和機(jī)器語(yǔ)言程序清單,并給出符號(hào)表,因而使程序調(diào)試更加方便。,LST清單的最后部分為段名表和符號(hào)表, 段的大小及有關(guān)屬性, 以及用戶(hù)定義的符號(hào)名,類(lèi)型及屬性 第三個(gè)是CRT文件產(chǎn)生交叉引用表 該表給出用戶(hù)定義的所有符號(hào), 對(duì)于每個(gè)符號(hào)列出了其定義所在行號(hào)及引用的行號(hào)。,4用LINK產(chǎn)生EXE

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論