匯編語言程序格式課件_第1頁
匯編語言程序格式課件_第2頁
匯編語言程序格式課件_第3頁
匯編語言程序格式課件_第4頁
匯編語言程序格式課件_第5頁
已閱讀5頁,還剩159頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

母親卡

第3章匯編語言程序格式

3.1匯編程序功能

3.2偽操作

3.3匯編語言程序格式

3.4匯編語言程序的上機(jī)過程3.5DOS系統(tǒng)功能調(diào)用開始母親卡第3章匯編語言程序格式3.1匯編程序功能13.1匯編程序功能

1.程序的建立及匯編過程

⑴用編輯程序建立ASM源文件

源文件就是用匯編語言的語句格式編寫的程序-源程序。它是不能被機(jī)器所識(shí)別的,所以要經(jīng)過匯編程序加以翻譯。我們通常用編輯程序(全屏幕編輯程EDIT)產(chǎn)生匯編語言的源程序。返回本章首頁3.1匯編程序功能1.程序的建立及匯編過程返回本章首2⑵用MASM程序把源程序ASM轉(zhuǎn)換成OBJ文件。匯編語言的作用就是把源文件轉(zhuǎn)換成二進(jìn)制代碼表示的目標(biāo)文件(稱為OBJ文件)。在轉(zhuǎn)換的過程中,匯編程序?qū)υ闯绦蜻M(jìn)行二遍掃視,如果源程序中有語法錯(cuò)誤,則匯編結(jié)束后,匯編程序?qū)⒅赋鲈闯绦蛑械腻e(cuò)誤,用戶還可以用編輯程序來修改源程序中的錯(cuò)誤,最后得到無語法錯(cuò)誤的OBJ文件。

⑵用MASM程序把源程序ASM轉(zhuǎn)換成OBJ文件。3⑶用LINK程序把OBJ文件轉(zhuǎn)換成EXE文件OBJ文件雖然已經(jīng)是二進(jìn)制文件,但它還不能直接上機(jī)運(yùn)行;OBJ文件必須經(jīng)過連接程序(LINK)把目標(biāo)文件與庫文件或其他目標(biāo)文件連接在一起形成可執(zhí)行文件(EXE文件)。這個(gè)文件可以由DOS裝入存儲(chǔ)器,并在機(jī)器上運(yùn)行。⑷用DOS文件命令直接鍵入文件名就可以執(zhí)行改程序。

⑶用LINK程序把OBJ文件轉(zhuǎn)換成EXE文件4用圖來表示對(duì)匯編語言的處理過程:

2.匯編程序的主要功能:⑴檢查源程序;⑵測出源程序中的語法錯(cuò)誤,并給出出錯(cuò)信息⑶產(chǎn)生源程序的目標(biāo)程序,并給出列表文件⑷展開宏指令

編輯程序ABC.ASM文件匯編程序ABC.OBJ文件連接程序ABC.EXE文件用圖來表示對(duì)匯編語言的處理過程:編輯程序ABC.ASM文件匯53.2偽操作

匯編語言程序由指令、偽操作和宏指令組成。偽操作又稱偽指令,它不象機(jī)器指令那樣是在程序運(yùn)行期間由計(jì)算機(jī)來執(zhí)行的,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作,它們可以完成如數(shù)據(jù)定義,分配存儲(chǔ)區(qū),指示程序結(jié)束等功能。

返回本章首頁3.2偽操作匯編語言程序由指令、偽操作和宏指令組成。返61.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作偽操作的格式:

【變量】助記符

操作數(shù)1,操作數(shù)2,…【;注釋】

其中變量字段是可有可無的,它是符號(hào)地址,(1)變量是“操作數(shù)1”的偏移地址。(2)助記符(操作項(xiàng)):說明偽操作的功能。【說明所定義的數(shù)據(jù)類型】(3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。(4)注釋:說明該偽操作的功能,它是可有可無的。1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作71.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作(2)助記符(操作項(xiàng)):說明偽操作的功能【說明所定義的數(shù)據(jù)類型】DB:用來定義字節(jié),其后的每一個(gè)操作數(shù)都占一個(gè)字節(jié)。DW:用來定義字,其后的每一個(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.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作81.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作這些偽操作可以把數(shù)據(jù)存入指定的存儲(chǔ)單元或者只分配存儲(chǔ)器空間而并不存入確定的數(shù)據(jù)。(3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。①操作數(shù)可以是常數(shù)或表達(dá)式,但在存儲(chǔ)區(qū)中存放的是數(shù)據(jù)。

1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作91.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作例3.7數(shù)據(jù)的定義:DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,+5DATE_DWDD3*20,0FFFDHARYDW1,1,1,2,2,2解:DB:100AH,DW:100D0064H+50005HDD:3*20=60D=3CH=0000003CH0FFFDH=0000FFFFDH

1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作101.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,+5DATE_DWDD3*20,0FFFDHNUMDW1,1,1,2,2,2DS=0B45ES=0B35SS=0B48CS=0B55IP=0010NVUPEIPLNZNAPONC-D0B45:00000B45:00000A0410

6400

0001

05-00

3C000000FD0F00...d0B45:001000

01000100010002-00020002000000000B45:00200000000000000000-00000000000000001.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作111.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作②操作數(shù)也可以是字符串例3.8:MESSAGEDB’HELLO’DB‘AB’用ASCII碼值一個(gè)字節(jié)來表示一個(gè)字符H-48H;E-45H;L-4CH;L-4CH;O-4FH;A-41H;B-42H用十六進(jìn)制表示的ASCII碼字符。DS=0B45ES=0B35SS=0B47CS=0B54IP=0005-D0B45:00000B45:0000

48454C4C4F

414201-0001000100020002HELLOAB...0B45:00100002000600000000-00000000000000001.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作12③操作數(shù)可以保留存儲(chǔ)空間,但不存入數(shù)據(jù)。例3.9:ABCDB0,?,?,?,0DEFDW?,60,?0B45:000000

00

00

00

00

0000

3C-00

000000④操作數(shù)字段還可以使用復(fù)制操作符來復(fù)制一個(gè)多個(gè)或操作數(shù)。格式:復(fù)制數(shù)DUP(操作數(shù),…,操作數(shù))復(fù)制數(shù)指定括號(hào)中的操作數(shù)被重復(fù)的次數(shù),它可以是一個(gè)表達(dá)式。

③操作數(shù)可以保留存儲(chǔ)空間,但不存入數(shù)據(jù)。13

例3.10:ARRAY1DB2DUP(0,1,2,?)ORG10HARRAY2DB5DUP(?)

ORG20H

ARRAY3DB5DUP(8)

語句1與ARRAY1DB0,1,2,?,0,1,2,?

等價(jià)0B45:000000010200

00010200-00000000000000000B45:0010

0000000000000000-00000000000000000B45:0020

0808080808000000-0000000000000000⑤DUP操作可嵌套例:ARRAY4DB2DUP(0,2DUP(1,2),3)(1+2×2+1)×2=6×2=12字節(jié)例3.10:ARRAY1DB2D14第3章-匯編語言程序格式課件15⑥變量的類型屬性:1)變量是第一個(gè)數(shù)據(jù)項(xiàng)的偏移地址。2)用來表示每一個(gè)數(shù)據(jù)項(xiàng)的長度,它是以字節(jié)為單位來表示的。

用DB定義的變量占1字節(jié)。DW=2,DD=4,DQ=8,DT=10匯編語言用隱含的類型屬性來確定某些指令是字指令還是字節(jié)指令在賦值語句中,兩個(gè)操作數(shù)類型要一致。⑥變量的類型屬性:16例7:OPER1DB1,2

OPER2DW1234H,5678H┆MOVAL,OPER1(賦值語句)

MOVAX,OPER2∴OPER1為字節(jié)類型屬性,AL為字節(jié)類型屬性,

OPER2為字類型屬性,AX為字類型屬性。若改為MOVAX,OPER1MOVAL,OPER2錯(cuò)誤:匯編程序在匯編時(shí),能發(fā)現(xiàn)兩條MOV指令中的兩個(gè)操作數(shù)的類型不匹配。可以用“PTR”屬性操作符指定操作數(shù)的類型屬性,其格式:類型PTR變量±常量

類型:BYTE,WORD,DWORD(雙字)例7:OPER1DB1,217格式:類型PTR變量±常量

類型:BYTE,WORD,DWORD(雙字)改正:

MOVAX,WORDPTROPER1→(AX)=0201HMOVAL,BYTEPTROPER2→(AL)=34H這樣OPER1類型屬性為字,兩個(gè)操作數(shù)(AX,OPER1)的類型一致,匯編時(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é)內(nèi)容送AL,即(AL)=34H格式:類型PTR變量±常量18⑦LABEL:用來使同一個(gè)變量具有不同的屬性(與PTR屬性操作符類似)

格式:變量LABEL類型

其中:類型-BYTE,WORD,DWORD例8:B_ARRAYLABELBYTEW_ARRAYDW1122H,1122H數(shù)據(jù)1122H的第一個(gè)字節(jié)的地址賦予2個(gè)不同類型的變量名:字節(jié)類型變量B_ARRAY和字類型變量W_ARRAY。MOVAL,B_ARRAY;(AL)=22HMOVBX,W_ARRAY;(BX)=1122H⑦LABEL:用來使同一個(gè)變量具有不同的屬性(與PTR屬性操192.表達(dá)式賦值偽操作有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為方便起見可以用賦值偽操作給表達(dá)式賦予一個(gè)名字。格式:⑴表達(dá)式名EQU表達(dá)式表達(dá)式名:凡用到該表達(dá)式之處就可以用表達(dá)式名來代替表達(dá)式:操作數(shù)、可求出常數(shù)值的表達(dá)式、有效的助記符

例:CONSTANTEQU256數(shù)賦以符號(hào)名ALPHAEQUCONSTANT+72.表達(dá)式賦值偽操作20⑵“=”偽操作也可作為賦值偽操作使用,并且“=”偽操作允許重復(fù)定義。例:EMP=7EMP=EMP+1而EQU偽操作中的表達(dá)式名是不允許重復(fù)定義的。⑵“=”偽操作也可作為賦值偽操作使用,213.段定義偽操作存儲(chǔ)器的物理地址是由段地址和偏移地址組成的,當(dāng)匯編程序把源程序轉(zhuǎn)換為目標(biāo)程序時(shí),必須確定標(biāo)號(hào)和變量的偏移地址,并把有關(guān)的信息通過目標(biāo)模塊傳送給連接程序,以便連接程序把不同的段和模塊連接在一起形成一個(gè)可執(zhí)行的程序。

段定義偽操作的格式段名SEGMENT定位類型組合類型使用類型‘類別’

例如:

DATA1SEGMENTPARAPRIVATEUSE16

‘DATA’

DATA1ENDS3.段定義偽操作22段定義格式:SEGMENT;ENDS①對(duì)于數(shù)據(jù)段,附加段,堆棧段來說,是存儲(chǔ)單元的定義分配②對(duì)于代碼段則是指令及偽操作。段名—必須由SEGMENT定義的段中的段名各段的作用:是通過它與段寄存器的關(guān)系語句聲明指定的。語句格式:

ASSUME段寄存器:段名段寄存器—CS,DS,ES,SS例如:ASSUMEDS:DATA1段定義格式:SEGMENT;ENDS23例如:

data_seg1segment;定義數(shù)據(jù)段

……

data_seg1endsdata_seg2segment;定義附加段

……data_seg2ends

code_segsegment

assumecs:code_seg,ds:data_seg1,es:data_seg2

start:movax,data-seg1;數(shù)據(jù)段地址放入dsmovds,ax

movax,data-seg2;附加段地址放入esmoves,ax

……Code_segends;代碼段結(jié)束endstart

例如:24∵ASSUNE偽操作只指定某一個(gè)段分配給哪一個(gè)段寄存器,它并不把段地址裝入段寄存器中,所以在代碼段中必須把段地址裝入相應(yīng)的段寄存器中。SEGMENT偽操作還可以增加類型及屬性的說明;格式如下:

Segnamesegment定位類型

組合類型使用類型

類別

……

Segnameends

∵ASSUNE偽操作只指定某一個(gè)段分配給哪一個(gè)段寄存器,它并25段定義偽操作的格式段名SEGMENT定位類型組合類型使用類型‘類別’

例如:

DATA1SEGMENTPARAPRIVATEUSE16

‘DATA’

DATA1ENDS

⑴定位類型:段起始位置的邊界值的情況

PARA:指定段的起始地址必須從小段邊界開始,小段邊界是指段的地址的最低的16進(jìn)制數(shù)位必須為0。BYTE:該段可以從任何地址開始,這樣定義段的時(shí)候等于對(duì)段的起始位沒有限制。WORD:該段必須從字的邊界開始,即段地址必須為偶數(shù)。PAGE:該段必須從頁的邊界開始,即段地址的最低兩個(gè)16進(jìn)制數(shù)位必須為0(該地址能被256整除)

段定義偽操作的格式26段定義偽操作的格式段名SEGMENT定位類型組合類型使用類型‘類別’

例如:

DATA1SEGMENTPARAPRIVATEUSE16

‘DATA’

組合類型:程序連接時(shí)的段合并方法。

PUBLIC:該段連接時(shí)將與有相同名字的其他分段連接在一起,連接次序由連接命令指定。COMMON:會(huì)產(chǎn)生覆蓋。該段在連接時(shí)與其它同名分段具有相同的起始地址,所以會(huì)產(chǎn)生覆蓋,COMMON連接長度是各分段中的最大長度。PRIVATE:該段為私有段,在連接時(shí)將不與其他模塊中的同名分段合并組合類型的默認(rèn)值是PRIVATE。段定義偽操作的格式27段定義偽操作的格式

段名SEGMENT定位類型組合類型使用類型‘類別’

DATA1SEGMENTPARAPRIVATEUSE16

‘DATA’

(3)

使用類型:用來說明使用16位尋址方式,還是32位尋址方式。它們是:USE16:使用16位尋址方式;USE32:使用32位尋址方式。使用類型默認(rèn)項(xiàng)為USE16(4)

‘類別’:在引號(hào)中給出類型名,連接時(shí)把相同類型的段的位置靠在一起。段定義偽操作的格式284.存儲(chǔ)模型與簡化段定義偽操作

簡化段定義

例:.MODELSMALL.STACK100H.DATAA1DB08H;定義數(shù)據(jù)區(qū)┆.CODESTART:MOVAX,@DATAMOVDS,AX

……MOVAX,4C00HINT21HENDSTART4.存儲(chǔ)模型與簡化段定義偽操作29⑴MODEL偽操作

用來說明在存儲(chǔ)器中是如何存放各個(gè)段的。Ting:所有數(shù)據(jù)和代碼都放在一個(gè)段內(nèi),其數(shù)據(jù)和代碼都是近訪問。近訪問:位移量是16位,范圍在-32768~+32767之間。Small:所有數(shù)據(jù)放在一個(gè)64K的數(shù)據(jù)段內(nèi),所有代碼放在另一個(gè)64K的代碼段內(nèi)。

⑴MODEL偽操作305.程序開始和結(jié)束偽操作在程序的開始可以用NAME或TITLE為模塊取名字。(1)NAME:模塊名例:NAME:EX_MOVS匯編程序把NAME后邊給出的名字作為模塊名。程序中也可使用TITLE偽操作:(2)TITLETEXT例:TITLEEX_MOVSTITLE偽操作可指定每一頁上打印標(biāo)題;匯編程序可以將TEXT的前六個(gè)字符作為模塊名。若既無NAME,又無TITLE,則把源文件名作為模塊名。

5.程序開始和結(jié)束偽操作31表示源程序結(jié)束的偽操作的格式為:END[LABEL]例:ENDSTART其中l(wèi)abel標(biāo)號(hào)指示程序開始執(zhí)行的起始地址,如果是多個(gè)程序模塊相連接,則只有主程序才使用標(biāo)號(hào),其它子程序則只用END而不必指定標(biāo)號(hào)。title給出標(biāo)題,用endstart表示程序結(jié)束;匯編程序遇到END時(shí)結(jié)束匯編,并指出從START開始執(zhí)行。表示源程序結(jié)束的偽操作的格式為:32例如:設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)三個(gè)數(shù)10H、3BH和42H的加法運(yùn)算,源程序的名字為ABC.ASM。STACKSEGMENTDB20DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAL,10HADDAL,3BHADDAL,42HMOVAH,4CHINT21HCODEENDSENDSTART例如:設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)三個(gè)數(shù)10H、3BH和42H的加法運(yùn)336.對(duì)準(zhǔn)偽操作和地址計(jì)數(shù)器⑴EVEN偽操作使下一個(gè)字節(jié)地址是偶數(shù)∵一個(gè)字的地址最好從偶地址開始,∴對(duì)于字?jǐn)?shù)組,為保證其從偶地址開始,可以在它前面用EVEN來實(shí)現(xiàn)。

第3章-匯編語言程序格式課件34DATASEGMENT

┆EVENWARRYDW100DUP(?)

┆DATAENDS⑵ORG『常用的表達(dá)式』設(shè)置當(dāng)前地址計(jì)數(shù)器的值使下一個(gè)字節(jié)的地址是常數(shù)表達(dá)式的值。例如:VECTORSSEGMENTSORG10HVECT1DW1234HORG20HVECT2DW5678HVECTORSENDS∴VECT1的偏移地址值為10H,而VECT2偏移值為20H

DATASEGMENT35⑶地址計(jì)數(shù)器的值可用$來表示,并可直接用$來引用地址計(jì)數(shù)器的值。在對(duì)源程序進(jìn)行匯編時(shí),使用地址計(jì)數(shù)器來保存當(dāng)前正在匯編的指令的地址。例如:VECTORSSEGMENTS

ORG10HVECT1DW$+1234H;(VECT1)=1244HORG20HVECT2DW$+5678H;(VECT2)=5688HVECTORSENDS第3章-匯編語言程序格式課件36⑷ALIGN偽操作設(shè)置地址值是4的倍數(shù)。格式為:ALIGNboundary

其中boundary必須是2的冪例:DATA

┆ALIGN4ARRAYDB100DUP(?)保證了ARRAY的值為4的倍數(shù)。⑷ALIGN偽操作37例1:定義數(shù)據(jù)段中變量A=10,數(shù)組WARRY有10個(gè)元素11,再定義變量B=10DATASEGMENTADB10WARRYDW10DUP(11)BDB10DATAENDS例1:定義數(shù)據(jù)段中變量A=10,數(shù)組WARRY有10個(gè)元素138例2:定義數(shù)據(jù)段中變量A=10,數(shù)組WARRY有10個(gè)元素11,但該數(shù)組應(yīng)從偶地址開始存放數(shù)據(jù),再定義變量B=10DATASEGMENTADB10

EVENWARRYDW10DUP(11)BDB10DATAENDS例2:定義數(shù)據(jù)段中變量A=10,數(shù)組WARRY有10個(gè)元素139例3:定義數(shù)據(jù)段中變量A=10,存入數(shù)組WARRY時(shí),應(yīng)用20H開始,存放10個(gè)元素11,再存放B=10變量并從30H開始DATASEGMENTADB10ORG20HWARRYDW10DUP(11)ORG30HBDB10DATAENDS例3:定義數(shù)據(jù)段中變量A=10,存入數(shù)組WARRY時(shí),應(yīng)用2407.基數(shù)控制偽操作匯編程序默認(rèn)的數(shù)為10進(jìn)制數(shù),因而除非專門指定,匯編程序把程序中出現(xiàn)的數(shù)均看作10進(jìn)制數(shù)。當(dāng)使用其他基數(shù)表示的常數(shù)時(shí),需要專門給以標(biāo)記。⑴二進(jìn)制數(shù)由一串0,1組成其后跟以字母B,如:00101100B⑵十進(jìn)制數(shù):由0-9數(shù)字組成的數(shù),后面可以跟字母D,如178D7.基數(shù)控制偽操作41⑶十六進(jìn)制數(shù):由數(shù)字0-9,A-F組成的數(shù),后面跟字母H.

如果這個(gè)數(shù)的第一個(gè)字符是A-F時(shí),應(yīng)在其前加上數(shù)字0,如0FFFF⑷八進(jìn)制數(shù):由數(shù)字0-7組成的數(shù),后面可跟字母O或Q,如:1777O⑶十六進(jìn)制數(shù):由數(shù)字0-9,A-F組成的數(shù),后面跟字母H.42⑸RADIX:可把默認(rèn)的基數(shù)改變?yōu)?-16范圍內(nèi)的任何基數(shù)

RADIX表達(dá)式

表達(dá)式的值為默認(rèn)的基數(shù)值(十進(jìn)制表示)例:MOVBX,0FFHRADIX16MOVBX,178MOVBX,0FFMOVBX,178D是等價(jià)的。∴把基數(shù)定為16進(jìn)制數(shù)后,十進(jìn)制數(shù)后跟D,如果某16進(jìn)制數(shù)末字符為D,則應(yīng)在其后跟字母H,以免與10進(jìn)制混淆。⑹字符串可以看成串常數(shù),可以用雙引號(hào)或單引號(hào)把字符串放在其中,得到的是字符串的ASCII碼值.例如:DB‘ABCD’db“good”

⑸RADIX:可把默認(rèn)的基數(shù)改變?yōu)?-16范圍內(nèi)的任何基數(shù)433.3匯編語言程序格式

匯編語言源程序中的每個(gè)語句可以由四項(xiàng)組成,語句格式:『名字』操作項(xiàng)

操作數(shù)

『;注釋』其中,名字項(xiàng)是一個(gè)符號(hào);操作項(xiàng)是一個(gè)操作碼的助記符,它可以是指令,偽操作或宏指令名。操作數(shù)項(xiàng)是由一個(gè)或多個(gè)表達(dá)式組成,它為執(zhí)行操作提供需要的信息。注釋項(xiàng)用來說明程序或語句功能“;”為識(shí)別注釋項(xiàng)的開始。以上四項(xiàng)中,帶括號(hào)的兩項(xiàng)是可有可無的;各項(xiàng)間用“空格”符隔開。

3.3匯編語言程序格式匯編語言源程序中的每個(gè)44語句格式:『名字』操作項(xiàng)

操作數(shù)

『;注釋』

1.名字項(xiàng):源程序中用下列字符來表示名字:(1)字母A-Z;(2)數(shù)字0~9;

(3)專用字符?.@

_

$除了數(shù)字外,所有字符都可以放在源語句的第一個(gè)位置。名字中如果遇到“.”則必須是第一個(gè)字府。可以用很多字符來說明名字,但只有前面的31個(gè)字符能被匯編程序所識(shí)別。名字項(xiàng)可以是標(biāo)號(hào)或變量,它們都用來表示本語句的符號(hào)地址。它是可有可無的,只有用符號(hào)地址來訪問該語句時(shí)它才需要出現(xiàn)。

語句格式:『名字』操作項(xiàng)操作數(shù)『;注釋』45語句格式:『名字』操作項(xiàng)

操作數(shù)

『;注釋』⑴標(biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面根冒號(hào)“:”,它也可以用LABEL或EQU偽操作來定義。標(biāo)號(hào)經(jīng)常在轉(zhuǎn)移指令用以表示轉(zhuǎn)向地址。三種屬性:段,偏移和類型①

段屬性:標(biāo)號(hào)的段地址已隱含給出,標(biāo)號(hào)的段地址總在CS寄存器中。②

偏移:標(biāo)號(hào)的偏移地址是16位無符號(hào)數(shù),它代表從段起始地址到定義標(biāo)號(hào)的位置之間的字節(jié)數(shù)③類型:用來指出該標(biāo)號(hào)是在本段內(nèi)引用還是在其它段中引用,如在段內(nèi)則稱為NEAR指針長度為2字節(jié)。如在段外引用則稱為FAR指針長度4字節(jié)。

語句格式:『名字』操作項(xiàng)操作數(shù)『;注釋』46⑵變量:變量在除代碼段以外的其他段中定義,后面不根冒號(hào),它也可以用LABLE或EQU偽操作來定義。變量經(jīng)常在操作數(shù)字段出現(xiàn)。三種屬性:段,偏移和類型。①

段屬性:具有段地址。定義變量的段起始地址,此值必須在一個(gè)段寄存器中;

⑵變量:變量在除代碼段以外的其他段中定義,后面不根冒號(hào),它也47②

偏移:變量的偏移地址是16位無符號(hào)數(shù),它代表從段的起始地址到定義變量的位置之間的字節(jié)數(shù)。③類型:定義該變量所保留的字節(jié)數(shù)。如:BYTE(1個(gè)字節(jié)長)

WORD(2個(gè)字節(jié)長)

DWORD(4個(gè)字節(jié)長)

DQ(8個(gè)字節(jié)長)在程序中,標(biāo)號(hào)或變量的定義只允許出現(xiàn)一次。

偏移:變量的偏移地址是16位無符號(hào)數(shù),它代表從段的起始地48語句格式:『名字』操作項(xiàng)

操作數(shù)

『;注釋』2.操作項(xiàng):操作項(xiàng)可以是指令助記符,偽操作或宏指令的助記符。對(duì)于指令,匯編程序?qū)⑵浞g為機(jī)器語言指令。對(duì)于偽操作,匯編程序?qū)雌涔δ苓M(jìn)行處理。對(duì)于宏指令,則將根據(jù)其定義展開。3.操作數(shù)項(xiàng):由一個(gè)表達(dá)式或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號(hào)分開。在指令中,操作數(shù)項(xiàng)的位置被翻譯成操作數(shù)地址。

語句格式:『名字』操作項(xiàng)操作數(shù)『;注釋』2.操作49

操作數(shù)項(xiàng)可以是常數(shù),寄存器,標(biāo)號(hào),變量,表達(dá)式

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

0100

020003000400-050006000700

0000偏移地址:00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E0F(0E-00)/2=7

例1:要求把首地為BLOCK的字?jǐn)?shù)組的第1個(gè)字傳送到DX寄存51⑵邏輯操作符:AND,OR,XOR,NOT邏輯操作符是位操作,它只能用于數(shù)字表達(dá)式中。例3:INAL,PORTOUTPORT+1,AL其中,PORT為端口號(hào),OUT指令中表達(dá)式說明從PORT重讀出數(shù)據(jù),將該數(shù)據(jù)在PORT+1中輸出。⑵邏輯操作符:AND,OR,XOR,NOT52⑶關(guān)系操作符:兩個(gè)操作數(shù)必須為數(shù)字或同一段內(nèi)兩存儲(chǔ)器地址,結(jié)果有6種:

LT(小于),LE(小于等于)GT(大于),GE(大于等于)EQ(相等),NE(不等)例5:MOVBX,PORTLT5當(dāng)PORT<5為真時(shí),(BX)=0FFFFH,當(dāng)PORT>=5為真時(shí),(BX)=0第3章-匯編語言程序格式課件53⑷數(shù)值回送操作符將變量或表號(hào)作為數(shù)值回送。①TYPE1)如果是變量,則匯編程序?qū)⒒厮驮撟兞款愋桶淖止?jié)數(shù):

DB=1,DW=2,DD=4,DT=10.2)如果是標(biāo)號(hào),回送該標(biāo)號(hào)類型的數(shù)值。NEAR=-1,FAR=-2例6:ARRAYDW1,2,3ADDSI,TYPEARRAY

匯編:ADDSI,2⑷數(shù)值回送操作符54②LENGTH

變量中使用DUP的情況時(shí)回送該變量單元數(shù);其他情況回送1例7:FEESDW100DUP(0)MOVCX,LENGTHFEES匯編:MOVCX,100例8:ARRAYDW1,2,3MOVCX,LENGTHARRAY

匯編:MOVCX,1②LENGTH55③SIZE:匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù),此值是LENGTH和TYPE值的乘積。FEESDW100DUP(0)MOVSI,TYPEFEESMOVCX,LENGTHFEES

MOVDX,SIZEFEES匯編:MOVSI,2

MOVCX,100MOVDX,200③SIZE:匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù),此值是LEN56④OFFSET:回送變量或標(biāo)號(hào)的偏移地址。格式為:OFFSETVariable或label例:MOVBX,OFFSETFEES

將OPER的偏移地址作為立即數(shù)回送給指令而在執(zhí)行時(shí),則將該偏移地址裝入BX寄存器中。與LEABX,FEES等價(jià)。

④OFFSET:回送變量或標(biāo)號(hào)的偏移地址。57

SEG:回送變量的段地址或標(biāo)號(hào)的段地址

例:數(shù)組A定義如下DATASEGMENTADW1,2,3,4,5,6,7ENDDW?DATAENDSMOVBX,SEGADATA是從存儲(chǔ)器的05000H地址開始的一個(gè)數(shù)據(jù)段的段名,A是該段中的一個(gè)變量名,將把0500H賦值給BX。⑤SEG:回送變量的段地址或標(biāo)號(hào)的段地址58⑸屬性操作符包括6種:

①PTR②段操作符③SHORT④THIS⑤HIGH⑥LOW

第3章-匯編語言程序格式課件59①

PTR類型PTR表達(dá)式(typePTRexpression)用來給已分配的存儲(chǔ)地址賦予另一種屬性使該地址具有另一種類型。類型:類型字段表示所賦予的新類型屬性。表達(dá)式:表達(dá)式字段是原有類型的符號(hào)字段。OPER2DW1234H,5678HMOVAL,BYTEPTROPER2→(AL)=34H①

PTR60例:已有數(shù)據(jù)定義如下:

TWO_BYTEDW?

用下列語句對(duì)這兩個(gè)字節(jié)賦予另一類型定義:

ONE_BYTEEQUBYTEPTRTWO-BYTE這里ONE-BYTE和TWO-BYTE兩個(gè)符號(hào)地址具有相同的段地址和偏移地址。但類型屬性不同,ONE_BYTE為字節(jié)變量,TWO-BYTE為字節(jié)變量.∵說明類型可有:BYTE,WORD,DWORD,NEAR,FAR幾種。∴PTR可用來建立字,雙字,段內(nèi)或段間指令單元

例:已有數(shù)據(jù)定義如下:61

②段操作符用來表示一個(gè)標(biāo)號(hào),變量或地址表達(dá)式的段屬性例如:用段前綴指定某段的地址操作數(shù)。MOVAX,ES:[BX+SI]表示形式:段名:地址表達(dá)式③SHORT用來修飾指令中轉(zhuǎn)向地址的屬性指出轉(zhuǎn)向地址是在下一條指令地址的±127個(gè)字節(jié)范圍內(nèi)

②段操作符62THIS格式:THIS屬性或類型該操作數(shù)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元地址相同。它可以象PTR一樣建立一個(gè)指定類型或指定距離的地址操作數(shù)。例如:FIRST_TYPEEQUTHISBYTEWORD_TABDW100DUP(?)

此時(shí)FIRST_TYPE的偏移地址和WORD_TAB完全相同,但它是字節(jié)類型的,而WORD_TAB是字類型的。THIS63HIGH和LOW:稱為字節(jié)分離操作符,它接收一個(gè)數(shù)或地址表達(dá)式,HIGH取其高字節(jié),LOW取其低字節(jié)。例:CONSTEQU0ABCDH則MOVAH,HIGHCONST將匯編成

MOVAH,0ABH

以上說明了五種類型的常用操作符。HIGH和LOW:稱為字節(jié)分離操作符,它接收一個(gè)數(shù)或地址表達(dá)64表達(dá)式是常數(shù),寄存器,標(biāo)號(hào),變量和操作符的組合.在計(jì)算表達(dá)式時(shí),應(yīng)該先計(jì)算優(yōu)先級(jí)高的操作符。然后從左到右的對(duì)優(yōu)先級(jí)相同的操作符進(jìn)行計(jì)算。優(yōu)先級(jí)從高到低排列如下,共11級(jí)。(P109)第3章-匯編語言程序格式課件65

語句格式:『名字』操作項(xiàng)

操作數(shù)

『;注釋』⑷注釋項(xiàng):說明一段程序或一條指令的功能,是可有可無的。

語句中分號(hào)“;”后面是注釋項(xiàng).語句格式:『名字』操作項(xiàng)操作數(shù)『;注釋』663.4匯編語言程序的上機(jī)過程

1.建立匯編語言的工作環(huán)境:EDIT.COM;編輯程序MASM.EXE;匯編程序LINK.EXE;連接程序DEBUG.COM;調(diào)試程序EXE2BIN.EXE;轉(zhuǎn)換成COM文件以上文件存放在磁盤上。

返回本章首頁3.4匯編語言程序的上機(jī)過程1.建立匯編語言的工作672.建立ASM文件設(shè)用編輯軟件建立一個(gè)文件名為:abc.asm的原文件.C>EDITabc.asm[BR]E存盤退出3.產(chǎn)生OBJ文件

MASMABC[BR]源文件建立后,就用MASM對(duì)源文件匯編,匯編后產(chǎn)生二進(jìn)制的目標(biāo)文件(OBJ)4.用LINK產(chǎn)生EXE文件

LINKABC[BR]5.程序的執(zhí)行

C>ABC[BR]C>DEBUGABC.EXE[BR]2.建立ASM文件683.產(chǎn)生OBJ文件C>MASMABC[BR]TheIBMPersonlComputerAssemblerVersion1.00(C)CopyrightIBMCORP(98)Obgectfilename[ABC.OBJ]:SourceListing[NUL.LST]:ABCCrossreference[NUL.CRF]:ABC第一個(gè)是OBJ文件-目標(biāo)文件第二個(gè)是LST文件-列表文件列表文件同時(shí)列出源程序和機(jī)器語言程序清單,并給出符號(hào)表,因而使程序調(diào)試更加方便。3.產(chǎn)生OBJ文件69LST清單的最后部分為段名表和符號(hào)表,段的大小及有關(guān)屬性,以及用戶定義的符號(hào)名,類型及屬性第三個(gè)是CRT文件-產(chǎn)生交叉引用表該表給出用戶定義的所有符號(hào),

對(duì)于每個(gè)符號(hào)列出了其定義所在行號(hào)及引用的行號(hào)。

LST清單的最后部分為段名表和符號(hào)表,704.用LINK產(chǎn)生EXE文件LINK有兩個(gè)輸入文件OBJ和LIBOBJ是需要連接的目標(biāo)文件,LIB則是程序中需要用到的庫文件,如無特殊要求,則對(duì)[LIB]:回車LINK的另一個(gè)輸出文件是MAP文件,它是連接程序的列表文件,稱為連接映象,它給出每個(gè)段在存儲(chǔ)器中的分配情況。

4.用LINK產(chǎn)生EXE文件715.程序的執(zhí)行C>ABCCSDSSSES000600000000030存儲(chǔ)器

40B數(shù)據(jù)┆a40B附加數(shù)據(jù)

29B代碼

書P28段寄存器5.程序的執(zhí)行000600000000030存儲(chǔ)器40B數(shù)723.5DOS系統(tǒng)功能調(diào)用3.5.1概述3.5.2常用的DOS系統(tǒng)功能調(diào)用3.5DOS系統(tǒng)功能調(diào)用3.5.1概述733.5.1概述對(duì)8086系列機(jī)來說,MS-DOS操作系統(tǒng)是最主要的操作系統(tǒng)。MS-DOS操作系統(tǒng)除了具有較為完整的文件管理功能之外,同時(shí)還為各種應(yīng)用程序、外圍設(shè)備等提供軟件接口。它由三部分組成:IO.SYS、MSDOS.SYSCOMMAND.COM。3.5.1概述對(duì)8086系列機(jī)來說,MS-DOS操作系統(tǒng)74DOS系統(tǒng)功能調(diào)用的方法一般可分為以下幾步:①設(shè)置所要調(diào)用功能的入口參數(shù)。②在AH寄存器中存入所要調(diào)用功能的功能號(hào)。③INT21H指令自動(dòng)轉(zhuǎn)入中斷子程序入口。④相應(yīng)中斷子程序運(yùn)行完畢,可按規(guī)定取得出口參數(shù)。DOS系統(tǒng)功能調(diào)用的方法一般可分為以下幾步:753.5.2常用的DOS系統(tǒng)功能調(diào)用1.單字符輸入(1號(hào)調(diào)用)2.單字符顯示(2號(hào)調(diào)用)3.打印輸出(5號(hào)調(diào)用)4.結(jié)束調(diào)用(4CH號(hào)調(diào)用)5.顯示字符串(9號(hào)調(diào)用)6.字符串輸入(10號(hào)調(diào)用)3.5.2常用的DOS系統(tǒng)功能調(diào)用1.單字符輸入(1號(hào)調(diào)761.單字符輸入(1號(hào)調(diào)用)

格式:MOV AH,1INT 21H功能:從鍵盤輸入字符的ASCII碼送入寄存器AL中,并送顯示器顯示。

2.單字符顯示(2號(hào)調(diào)用)格式:MOVDL,待顯示字符的ASCII碼MOVAH,2INT21H功能:將DL寄存器中的字符送顯示器顯示。如果DL中為〈CTRL〉+〈BREAK〉的ASCII碼,則退出。1.單字符輸入(1號(hào)調(diào)用)773.打印輸出(5號(hào)調(diào)用)格式:MOV DL,待打印字符的ASCII碼MOV AH,5INT 21H功能:將DL寄存器中的字符送打印機(jī)打印。4.結(jié)束調(diào)用(4CH號(hào)調(diào)用)格式:MOV AH,4CHINT 21H功能:終止當(dāng)前程序并返回調(diào)用(返回DOS)3.打印輸出(5號(hào)調(diào)用)785.顯示字符串(9號(hào)調(diào)用)格式:LEA DX,待顯示字符串首偏移地址MOV AH,9INT 21H功能:將當(dāng)前數(shù)據(jù)區(qū)中以‘$’結(jié)尾的字符串送顯示器顯示。

6.字符串輸入(10號(hào)調(diào)用)格式:LEA DX,緩沖區(qū)首偏移地址MOV AH,10INT 21H功能:從鍵盤上輸入一字符串到用戶定義的輸入緩沖區(qū)中,并送顯示器顯示。5.顯示字符串(9號(hào)調(diào)用)79【例3.25】若要在屏幕上顯示字符串“Exampleofstringdisplay!”,則程序如下:

DATA SEGMENT

STR DB0DH,0AH,‘Exampleofstringdisplay!$’DATA ENDSSTACK SEGMENTSTACKDB 100DUP(0)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODE,SS:STACK【例3.25】若要在屏幕上顯示字符串“Exampleof80BEGIN: MOV AX,DATA MOV DS,AX

LEA DX,STR MOV AH,9 INT 21H MOV AH,4CH INT 21HCODE ENDS END BEGINBEGIN: MOV AX,DATA81本章到此結(jié)束!返回本章首頁結(jié)束本章到此結(jié)束!返回本章首頁結(jié)束82母親卡

第3章匯編語言程序格式

3.1匯編程序功能

3.2偽操作

3.3匯編語言程序格式

3.4匯編語言程序的上機(jī)過程3.5DOS系統(tǒng)功能調(diào)用開始母親卡第3章匯編語言程序格式3.1匯編程序功能833.1匯編程序功能

1.程序的建立及匯編過程

⑴用編輯程序建立ASM源文件

源文件就是用匯編語言的語句格式編寫的程序-源程序。它是不能被機(jī)器所識(shí)別的,所以要經(jīng)過匯編程序加以翻譯。我們通常用編輯程序(全屏幕編輯程EDIT)產(chǎn)生匯編語言的源程序。返回本章首頁3.1匯編程序功能1.程序的建立及匯編過程返回本章首84⑵用MASM程序把源程序ASM轉(zhuǎn)換成OBJ文件。匯編語言的作用就是把源文件轉(zhuǎn)換成二進(jìn)制代碼表示的目標(biāo)文件(稱為OBJ文件)。在轉(zhuǎn)換的過程中,匯編程序?qū)υ闯绦蜻M(jìn)行二遍掃視,如果源程序中有語法錯(cuò)誤,則匯編結(jié)束后,匯編程序?qū)⒅赋鲈闯绦蛑械腻e(cuò)誤,用戶還可以用編輯程序來修改源程序中的錯(cuò)誤,最后得到無語法錯(cuò)誤的OBJ文件。

⑵用MASM程序把源程序ASM轉(zhuǎn)換成OBJ文件。85⑶用LINK程序把OBJ文件轉(zhuǎn)換成EXE文件OBJ文件雖然已經(jīng)是二進(jìn)制文件,但它還不能直接上機(jī)運(yùn)行;OBJ文件必須經(jīng)過連接程序(LINK)把目標(biāo)文件與庫文件或其他目標(biāo)文件連接在一起形成可執(zhí)行文件(EXE文件)。這個(gè)文件可以由DOS裝入存儲(chǔ)器,并在機(jī)器上運(yùn)行。⑷用DOS文件命令直接鍵入文件名就可以執(zhí)行改程序。

⑶用LINK程序把OBJ文件轉(zhuǎn)換成EXE文件86用圖來表示對(duì)匯編語言的處理過程:

2.匯編程序的主要功能:⑴檢查源程序;⑵測出源程序中的語法錯(cuò)誤,并給出出錯(cuò)信息⑶產(chǎn)生源程序的目標(biāo)程序,并給出列表文件⑷展開宏指令

編輯程序ABC.ASM文件匯編程序ABC.OBJ文件連接程序ABC.EXE文件用圖來表示對(duì)匯編語言的處理過程:編輯程序ABC.ASM文件匯873.2偽操作

匯編語言程序由指令、偽操作和宏指令組成。偽操作又稱偽指令,它不象機(jī)器指令那樣是在程序運(yùn)行期間由計(jì)算機(jī)來執(zhí)行的,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作,它們可以完成如數(shù)據(jù)定義,分配存儲(chǔ)區(qū),指示程序結(jié)束等功能。

返回本章首頁3.2偽操作匯編語言程序由指令、偽操作和宏指令組成。返881.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作偽操作的格式:

【變量】助記符

操作數(shù)1,操作數(shù)2,…【;注釋】

其中變量字段是可有可無的,它是符號(hào)地址,(1)變量是“操作數(shù)1”的偏移地址。(2)助記符(操作項(xiàng)):說明偽操作的功能。【說明所定義的數(shù)據(jù)類型】(3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。(4)注釋:說明該偽操作的功能,它是可有可無的。1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作891.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作(2)助記符(操作項(xiàng)):說明偽操作的功能【說明所定義的數(shù)據(jù)類型】DB:用來定義字節(jié),其后的每一個(gè)操作數(shù)都占一個(gè)字節(jié)。DW:用來定義字,其后的每一個(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.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作901.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作這些偽操作可以把數(shù)據(jù)存入指定的存儲(chǔ)單元或者只分配存儲(chǔ)器空間而并不存入確定的數(shù)據(jù)。(3)操作數(shù):是存放到數(shù)據(jù)區(qū)的數(shù)據(jù),以備程序使用。①操作數(shù)可以是常數(shù)或表達(dá)式,但在存儲(chǔ)區(qū)中存放的是數(shù)據(jù)。

1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作911.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作例3.7數(shù)據(jù)的定義:DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,+5DATE_DWDD3*20,0FFFDHARYDW1,1,1,2,2,2解:DB:100AH,DW:100D0064H+50005HDD:3*20=60D=3CH=0000003CH0FFFDH=0000FFFFDH

1.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作921.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,+5DATE_DWDD3*20,0FFFDHNUMDW1,1,1,2,2,2DS=0B45ES=0B35SS=0B48CS=0B55IP=0010NVUPEIPLNZNAPONC-D0B45:00000B45:00000A0410

6400

0001

05-00

3C000000FD0F00...d0B45:001000

01000100010002-00020002000000000B45:00200000000000000000-00000000000000001.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作931.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作②操作數(shù)也可以是字符串例3.8:MESSAGEDB’HELLO’DB‘AB’用ASCII碼值一個(gè)字節(jié)來表示一個(gè)字符H-48H;E-45H;L-4CH;L-4CH;O-4FH;A-41H;B-42H用十六進(jìn)制表示的ASCII碼字符。DS=0B45ES=0B35SS=0B47CS=0B54IP=0005-D0B45:00000B45:0000

48454C4C4F

414201-0001000100020002HELLOAB...0B45:00100002000600000000-00000000000000001.?dāng)?shù)據(jù)定義及存儲(chǔ)器分配偽操作94③操作數(shù)可以保留存儲(chǔ)空間,但不存入數(shù)據(jù)。例3.9:ABCDB0,?,?,?,0DEFDW?,60,?0B45:000000

00

00

00

00

0000

3C-00

000000④操作數(shù)字段還可以使用復(fù)制操作符來復(fù)制一個(gè)多個(gè)或操作數(shù)。格式:復(fù)制數(shù)DUP(操作數(shù),…,操作數(shù))復(fù)制數(shù)指定括號(hào)中的操作數(shù)被重復(fù)的次數(shù),它可以是一個(gè)表達(dá)式。

③操作數(shù)可以保留存儲(chǔ)空間,但不存入數(shù)據(jù)。95

例3.10:ARRAY1DB2DUP(0,1,2,?)ORG10HARRAY2DB5DUP(?)

ORG20H

ARRAY3DB5DUP(8)

語句1與ARRAY1DB0,1,2,?,0,1,2,?

等價(jià)0B45:000000010200

00010200-00000000000000000B45:0010

0000000000000000-00000000000000000B45:0020

0808080808000000-0000000000000000⑤DUP操作可嵌套例:ARRAY4DB2DUP(0,2DUP(1,2),3)(1+2×2+1)×2=6×2=12字節(jié)例3.10:ARRAY1DB2D96第3章-匯編語言程序格式課件97⑥變量的類型屬性:1)變量是第一個(gè)數(shù)據(jù)項(xiàng)的偏移地址。2)用來表示每一個(gè)數(shù)據(jù)項(xiàng)的長度,它是以字節(jié)為單位來表示的。

用DB定義的變量占1字節(jié)。DW=2,DD=4,DQ=8,DT=10匯編語言用隱含的類型屬性來確定某些指令是字指令還是字節(jié)指令在賦值語句中,兩個(gè)操作數(shù)類型要一致。⑥變量的類型屬性:98例7:OPER1DB1,2

OPER2DW1234H,5678H┆MOVAL,OPER1(賦值語句)

MOVAX,OPER2∴OPER1為字節(jié)類型屬性,AL為字節(jié)類型屬性,

OPER2為字類型屬性,AX為字類型屬性。若改為MOVAX,OPER1MOVAL,OPER2錯(cuò)誤:匯編程序在匯編時(shí),能發(fā)現(xiàn)兩條MOV指令中的兩個(gè)操作數(shù)的類型不匹配。可以用“PTR”屬性操作符指定操作數(shù)的類型屬性,其格式:類型PTR變量±常量

類型:BYTE,WORD,DWORD(雙字)例7:OPER1DB1,299格式:類型PTR變量±常量

類型:BYTE,WORD,DWORD(雙字)改正:

MOVAX,WORDPTROPER1→(AX)=0201HMOVAL,BYTEPTROPER2→(AL)=34H這樣OPER1類型屬性為字,兩個(gè)操作數(shù)(AX,OPER1)的類型一致,匯編時(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é)內(nèi)容送AL,即(AL)=34H格式:類型PTR變量±常量100⑦LABEL:用來使同一個(gè)變量具有不同的屬性(與PTR屬性操作符類似)

格式:變量LABEL類型

其中:類型-BYTE,WORD,DWORD例8:B_ARRAYLABELBYTEW_ARRAYDW1122H,1122H數(shù)據(jù)1122H的第一個(gè)字節(jié)的地址賦予2個(gè)不同類型的變量名:字節(jié)類型變量B_ARRAY和字類型變量W_ARRAY。MOVAL,B_ARRAY;(AL)=22HMOVBX,W_ARRAY;(BX)=1122H⑦LABEL:用來使同一個(gè)變量具有不同的屬性(與PTR屬性操1012.表達(dá)式賦值偽操作有時(shí)程序中多次出現(xiàn)同一個(gè)表達(dá)式,為方便起見可以用賦值偽操作給表達(dá)式賦予一個(gè)名字。格式:⑴表達(dá)式名EQU表達(dá)式表達(dá)式名:凡用到該表達(dá)式之處就可以用表達(dá)式名來代替表達(dá)式:操作數(shù)、可求出常數(shù)值的表達(dá)式、有效的助記符

例:CONSTANTEQU256數(shù)賦以符號(hào)名ALPHAEQUCONSTANT+72.表達(dá)式賦值偽操作102⑵“=”偽操作也可作為賦值偽操作使用,并且“=”偽操作允許重復(fù)定義。例:EMP=7EMP=EMP+1而EQU偽操作中的表達(dá)式名是不允許重復(fù)定義的。⑵“=”偽操作也可作為賦值偽操作使用,1033.段定義偽操作存儲(chǔ)器的物理地址是由段地址和偏移地址組成的,當(dāng)匯編程序把源程序轉(zhuǎn)換為目標(biāo)程序時(shí),必須確定標(biāo)號(hào)和變量的偏移地址,并把有關(guān)的信息通過目標(biāo)模塊傳送給連接程序,以便連接程序把不同的段和模塊連接在一起形成一個(gè)可執(zhí)行的程序。

段定義偽操作的格式段名SEGMENT定位類型組合類型使用類型‘類別’

例如:

DATA1SEGMENTPARAPRIVATEUSE16

‘DATA’

DATA1ENDS3.段定義偽操作104段定義格式:SEGMENT;ENDS①對(duì)于數(shù)據(jù)段,附加段,堆棧段來說,是存儲(chǔ)單元的定義分配②對(duì)于代碼段則是指令及偽操作。段名—必須由SEGMENT定義的段中的段名各段的作用:是通過它與段寄存器的關(guān)系語句聲明指定的。語句格式:

ASSUME段寄存器:段名段寄存器—CS,DS,ES,SS例如:ASSUMEDS:DATA1段定義格式:SEGMENT;ENDS105例如:

data_seg1segment;定義數(shù)據(jù)段

……

data_seg1endsdata_seg2segment;定義附加段

……data_seg2ends

溫馨提示

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

評(píng)論

0/150

提交評(píng)論