




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1
微型計算機技術(shù)
第4章匯編語言程序設(shè)計2第一節(jié)匯編語言上機過程第二節(jié)匯編語言程序結(jié)構(gòu)第三節(jié)指示性語句第四節(jié)匯編語言程序舉例第五節(jié)匯編語言程序設(shè)計3上機環(huán)境硬件系統(tǒng)軟件
應(yīng)用軟件
操作系統(tǒng):DOS系統(tǒng)編輯器:
EDIT.exe匯編編譯程序:MASM.exe連接程序:LINK.exe調(diào)試程序:DEBUG.exe用戶開發(fā)的程序:ABC.exe等CPU、存儲器(ROM、RAM)、I/O接口、輸入、輸出設(shè)備4第一節(jié)匯編語言上機過程D:>EDITABC.asmD:>MASMABC;
有語法錯,回EDIT下改該程序D:>LINKABC;
有錯,回在EDIT下改程序D:>ABC
運行結(jié)果錯,回EDIT下改程序或在DEBUG下調(diào)試,找原因。D:>DEBUGABC.exe編輯源程序
EDITABC.ASM匯編源程序
MASM
ABC.ASM形成目標程序ABC.OBJ連接目標程序
LINKABC.OBJ有連接錯誤信息?形成可執(zhí)行程序
ABC.EXE裝入可執(zhí)行程序到內(nèi)存,并執(zhí)行D:\>sub>ABC下一程序用DEBUG調(diào)試可執(zhí)行程序D:\>sub>DEBUG
ABC.EXE找到原因YNYNNYN有匯編錯誤信息?Y運行結(jié)果正確?用DEBUG調(diào)試程序查錯?5第二節(jié)匯編語言程序結(jié)構(gòu)一、程序結(jié)構(gòu)二、語句結(jié)構(gòu)6一、程序結(jié)構(gòu)程序由數(shù)條語句構(gòu)成,每條語句占一行。指令性語句(指令語句)
指示性語句(偽指令語句)
分段結(jié)構(gòu)程序按段編寫,與8088內(nèi)存分段編址相對應(yīng)。每段由偽操作SEGMENT開始、由ENDS結(jié)束。程序最后為END結(jié)束語句,后跟一啟動地址。啟動地址指示程序開始執(zhí)行的第一條語句。程序中設(shè)有返回DOS的功能。使程序執(zhí)行完后返回DOS系統(tǒng)的命令接受狀態(tài)。
程序中用到內(nèi)存操作數(shù)時,
應(yīng)按操作數(shù)的尋址方式,給相應(yīng)的段寄存器賦值;匯編語言程序結(jié)構(gòu)例一movs.asm;實現(xiàn)數(shù)據(jù)傳送功能aaSEGMENT
;數(shù)據(jù)段1str1DB'Hello!’aaENDSbbSEGMENT
;數(shù)據(jù)段2str2DB6dup(?)bbENDSccSEGMENT
;代碼段
ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSB
MOVAH,4CHINT21H
;返回DOSccENDS
ENDstart;指示程序結(jié)束程序可由多個段構(gòu)成,至少有一個代碼段!7二、語句結(jié)構(gòu)
dataSEGMENT;數(shù)據(jù)段varDB?dataENDScodeSEGMENT;代碼段
ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回DOScodeENDS
ENDstart例:81.名字項
據(jù)語句功能的不同,
名字項可用來表示段名、變量名、標號、過程名以及常量名等。dataSEGMENT;數(shù)據(jù)段varDB?dataENDScodeSEGMENT;代碼段
ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回DOScodeENDS
ENDstart9
名字項用一個符號表示。
對符號的規(guī)定:①
由字符A~Z,a~z,0~9及符號@、$、下劃線_等組成,最長31個字符,超出部分忽略。②不能用數(shù)字打頭,以免與十六進制數(shù)相混。③不使用匯編程序中的保留字。(如指令的助記符等)④
對定義的符號不區(qū)分大小寫。102.助記符項助記符可以是指令、偽操作中的助記符。對于指令,匯編程序?qū)⑵浞g成機器語言指令。
MOVAX,100→B80001對于偽操作,匯編程序根據(jù)其要求的功能進行處理。
dataSEGMENT
→data與一段值對應(yīng)
stringDB‘Tsinghua’→string與一內(nèi)存地址對應(yīng)113.操作數(shù)項操作數(shù)給出參與操作的數(shù)或數(shù)所在的地方。操作數(shù)多于一個時,用逗號分開。操作數(shù)可以是常數(shù)、寄存器、存儲器操作數(shù)、標號名、過程名或表達式等。12常數(shù)給出具體的數(shù)據(jù)。可以是數(shù)字常量或字符常量。◢◢
數(shù)字默認十進制,也可加D表示十進制數(shù)。如
1234D,1234◢
◢
數(shù)字后加B表示二進制數(shù)。如
1010B◢
◢
數(shù)字后加H表示十六進制數(shù)。如1234H◢
◢
字符常量,用單引號表示。如‘1234’
匯編時,用字符對應(yīng)的ASCII表示。如
31H,32H,33H,34H例
data1DB12,34,56;十進制
data2DB12H,34H,56H;十六進制
MOVAL,‘G’;字符
stringDB‘1234’;字符串13A、B、C、D、E、F開頭的十六進制數(shù)前面加0,與H結(jié)尾的標識符區(qū)別。如寄存器名AH、BH、CH、
DH
變量名abcdH等例
movAL,0AHmovAL,AHmovBX,0abcdH144.注釋項由分號引出,用來說明語句或程序的功能。匯編程序?qū)Ψ痔柡蟮膬?nèi)容不做處理。作用:①注釋程序,增強程序可讀性。
②可放在語句最前,暫時注釋某語句,調(diào)試程序用。例
、、、
;MOVAH,2;顯示提示信息
;MOVDL,’A’
;INT21H
、、、15第三節(jié)指示性語句一、程序開始和結(jié)束二、段定義三、變量定義四、ASSUME語句五、表達式及表達式中的操作符六、過程定義七、等值定義16指示性語句與指令性語句:指令性語句是用指令系統(tǒng)中的指令構(gòu)成的語句。
例
MOVAX,BX指示性語句是指示匯編程序進行匯編的操作。
例
MOVAX,4+8中的+codeSEGMENT中的SEGMENTMOVBX,OFFSETstring中的OFFSET17指示性語句與指令性語句區(qū)別一個程序經(jīng)匯編,連接和裝入內(nèi)存后,在執(zhí)行程序之前:
◢指示性語句的功能已經(jīng)完成,故又稱偽操作。
◢而指令性語句的功能尚未完成,需控制CPU去執(zhí)行,才能完成。18常用偽操作介紹一、程序開始和結(jié)束二、段定義三、變量定義四、ASSUME語句五、表達式中的操作符六、過程定義七、等值定義19一、模塊定義和程序結(jié)束偽操作1.NAME和TITLE偽操作
格式
NAME
模塊名
格式
TITLE
模塊名在源程序開始可用NAME或TITLE為模塊命名,
模塊名的作用是指示給連接程序進行連接用。源程序中可無模塊定義,此時源文件名作為模塊名。
202.END偽操作
格式
END啟動地址作用是指示源程序到此結(jié)束。匯編程序?qū)ND之后的語句不進行處理。程序中所有有效語句應(yīng)放在END語句之前。源程序中必須有END結(jié)束語句。匯編程序?qū)oEND語句的源程序不進行處理,
只給出無END語句錯誤信息。21假設(shè)TEST.asm是一個無END語句的匯編語言源程序。其匯編結(jié)果如下:D:\MASMTEST;↙Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.EndoffileencounteredoninputfileEndoffileencounteredoninputfile49968+421181Bytessymbolspacefree
0WarningErrors
0SevereErrorsD:\由于沒有END語句,匯編程序根本沒對源程序進行匯編,此時顯示警告性錯誤總數(shù)為0,嚴重性錯誤總數(shù)為0,用戶不要被此值誤導。22啟動地址可是一個標號或過程名,指示程序的入口。程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處,開始執(zhí)行程序。aaSEGMENT;數(shù)據(jù)段1
str1DB'Hello!’aaENDSbbSEGMENT;數(shù)據(jù)段2
str2DB6dup(?)bbENDSccSEGMENT;代碼段
ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aa
MOVDS,AXLEASI,str1
MOVAX,SEGstr2
MOVES,AXMOVDI,OFFSETstr2
MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:\masm>DEBUGhello.exe-U:查看代碼段129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、-D129d:0l10;查看數(shù)據(jù)段1的內(nèi)容129D:000048656C6C6F210000-0000000000000000Hello!..........-D129e:0l10;查看數(shù)據(jù)段2的內(nèi)容129E:00000000000000000000-0000000000000000................-23二、段定義偽操作
格式
段名SEGMENT
、、、、、、段名ENDS
段定義由偽操作SEGMENT開始、ENDS結(jié)束。其中:SEGMENT和ENDS必須成對出現(xiàn),且語句前必須有段名,段名必須相同。
SEGMENT和ENDS語句之間可以有指令和其他偽操作,
表示存放在該段內(nèi)存的變量、指令或其他偽操作對該段內(nèi)存的處理程序中可以定義多個段。程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。24三、變量定義偽操作
格式
變量名類型助記符操作數(shù)[,操作數(shù),...]
用來定義程序中所用的內(nèi)存操作數(shù)。其中變量名指示內(nèi)存操作數(shù)的地址(符號地址)
類型助記符指示內(nèi)存操作數(shù)的類型(字節(jié)、字、雙字等)
操作數(shù)指示內(nèi)存操作數(shù)的內(nèi)容匯編程序?qū)⒍x的操作數(shù),按其類型分配內(nèi)存單元數(shù),
順序存入變量名指向的內(nèi)存單元中。常用的類型助記符有:DB
指示其后的操作數(shù)為字節(jié)類型DW
指示其后的操作數(shù)為字類型DD
指示其后的操作數(shù)為雙字類型25例1:定義賦初值的變量
dataSEGMENT
xxDB1,-1,0fcH
yyDW1,-1,0fcH
zzDD1,-1,0fcHdataENDS26例2:定義字符串變量(只能用DB定義)dataSEGMENT
str1DB'TsingHua'
str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3個及其以上的字符,只能用DB定義str1DW‘a(chǎn)bcd’str2DD‘a(chǎn)bcd’str1str25473696e67487561494e5055543a0d0a24‘T’‘s’‘i’‘n’‘g’‘H’‘u’‘a(chǎn)’‘I’‘N’‘P’‘U’‘T’‘:’0dH0aH‘$’27操作數(shù)可以是用常量、表達式和?表示。常量和表達式表示內(nèi)存操作數(shù)的初始值,
其值應(yīng)在其定義的類型范圍內(nèi),否則匯編出錯。例
aaDB270bbDW80000
用?
表示不置初始值的內(nèi)存操作數(shù)。
例
ccDB?
可用DUP復制操作符定義相同的操作數(shù),其格式為
重復次數(shù)DUP(操作數(shù))
例
eeDB3DUP(4)
等價于eeDB4,4,428dataSEGMENTxxDB1,-1,0FCHyyDW1,-1,0FCHzzDD1,-1,0FCHstrDB'TsingHua'bufDB4,?,4DUP(?)DB‘dataend’dataENDScodeSEGMENTASSUMECS:codeASSUMEDS:datastart:MOVAX,dataMOVDS,AXLEABX,xxLEASI,yyLEADI,zzMOVAH,4CHINT21HcodeENDSENDstart例4:
在DEBUG下查看變量存放情況。29四、ASSUME偽操作
格式
ASSUME段寄存器:段名[,段寄存器:段名,…]
其中段寄存器為CS、DS、ES、SS中的一個
段名為用偽操作SEGMENT定義過的段名例
ASSUMECS:cc,DS:aaASSUME偽操作的作用指示匯編程序指令中用到的標號、過程及變量所在的段。其中對標號、過程必須用CS段寄存器指示
對變量可用CS、DS、ES、SS段寄存器指示30
若未用ASSUME語句指示指令中用到的標號、過程和變量所在的段,匯編程序?qū)⒔o出錯誤信息。
ASSUME語句只起指示作用,并無實際的操作。在程序中引用定義的變量做內(nèi)存操作數(shù)時,需按尋址方式用傳送指令(如MOV)給相應(yīng)的段寄存器賦值。31例
用程序?qū)崿F(xiàn)1234H+5678H
dataSEGMENTvalueDW1234H,5678HresultDW?
dataENDS
codeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給DS賦值
MOVDS,AXMOVAX,value;取數(shù)
ADDAX,value+2;兩數(shù)相加
MOVresult,AX;保存結(jié)果
MOVAH,4CH;返回DOSINT21H
codeENDSENDstart32注釋掉ASSUME語句,其匯編結(jié)果:
dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENT;ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVAX,value
ADDAX,value+2
MOVresult,AXMOVAH,4CHINT
21HcodeENDSENDstartD:\MASM>MASMassume;Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.assume.ASM(8):MissingorunreachableCSassume.ASM(10):Cannotaddresswithsegmentregisterassume.ASM(11):Cannotaddresswithsegmentregisterassume.ASM(12):Cannotaddresswithsegmentregister49872+421341Bytessymbolspacefree0WarningErrors
4SevereErrorsD:\MASM>33結(jié)論:1.ASSUME語句只起指示作用,沒有賦值作用2.
程序中用到內(nèi)存操作數(shù)時,應(yīng)按操作數(shù)的尋址方式,給相應(yīng)的段寄存器賦值。34第四節(jié)匯編語言程序舉例匯編語言程序舉例一35例將BL寄存器的內(nèi)容按二進制形式顯示出來(BL)
MOVCX,8;顯示字符個數(shù)為8next:SHLBL,1;將顯示位移至CF中
JCone;CF=1?
MOVDL,30H
;CF=0,將0的ASCII放在DL中
JMPexitone:MOVDL,31H
;CF=1,將1的ASCII放在DL中exit:MOVAH,2INT21H;調(diào)用DOS功能顯示
DECCX;循環(huán)次數(shù)減1
JNZnext;判斷是否結(jié)束、、、313031303031313036codeSEGMENTASSUMECS:codestart:
............codeENDS
ENDstartMOVCX,8;顯示字符個數(shù)為8next:SHLBL,1;將顯示位移至CF中
JCone;CF=1?
MOVDL,30H
;CF=0,將0的ASCII放在DL中
JMPexitone:MOVDL,31H
;CF=1,將1的ASCII放在DL中exit:MOVAH,2INT21H;調(diào)用DOS功能顯示
DECCX;循環(huán)次數(shù)減1
JNZnext;判斷是否結(jié)束37data1SEGMENT;數(shù)據(jù)段1,(可據(jù)需要設(shè)定,也可無)……;變量定義data1ENDSdata2SEGMENT;數(shù)據(jù)段2(可據(jù)需要設(shè)定,也可無)……data2ENDScodeSEGMENT;程序段
ASSUMECS:code,DS:data1,ES:data2start:
、、、;程序主體部分、、、、、、、、、
MOVAH,4CH
;返回DOS
INT21HcodeENDS
ENDstart完整匯編語言程序框架:38五、表達式及表達式中的操作符
表達式由常量、標號、變量和一些操作符構(gòu)成。匯編程序?qū)Ρ磉_式進行運算后,得到一個確定的數(shù)值,再把這個數(shù)值匯編到指令中。據(jù)表達式所表示的內(nèi)容,分數(shù)字表達式、地址表達式。表達式是指令或偽操作的操作數(shù);
表達式中的操作符由匯編程序完成例
MOVAX,12-4;MOVAX,8;數(shù)字表達式
LEABX,[string+4];地址表達式
39表達式中的操作符有以下幾類:1.算術(shù)運算符(+、-、*、/、MOD)2.邏輯運算符(AND、OR、NOT、XOR)3.關(guān)系運算符(EQ、NE、GT、GE、LT、LE)
真:FFFFH;假:04.分析運算符(SEG、OFFSET)5.組合運算符(PTR)40例:
1.算術(shù)運算符(+、-、*、/、MOD(取余數(shù)))MOVAX,6*8←MOVAX,482.邏輯運算符(AND、OR、NOT、XOR)MOVAX,80hOR70h←MOVAX,0F0h3.關(guān)系運算符(EQ、NE、GT、GE、LT、LE)
真:FFFFH;假:0MOVAX,1GE2←MOVAX,041
4.分析運算符(SEG、OFFSET)SEG取符號地址的段地址例MOVAX,SEGyyOFFSET取符號地址的偏移地址例MOVBX,OFFSETyybb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 …….
cc ENDS
ENDstart42aa SEGMENTxx DB'Hello!’aa ENDSbb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,aa MOVDS,AX LEASI,xx MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 REPMOVSB MOVAH,4CH INT21H
cc ENDS
ENDstartD:\>DEBUGhello1.exe-U
;查看程序代碼
129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、MOVAX,bbLEADI,yy43注意:SEG、OFFSET只能對符號地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI]44匯編語言程序舉例二
編寫完整匯編語言程序,完成內(nèi)存數(shù)據(jù)塊傳送功能。將某段中的字符串“Hello!”傳送到另一段中。45例一編寫完整匯編語言程序,完成內(nèi)存數(shù)據(jù)塊傳送功能。將某段中的字符串“Hello!”傳送到另一段中。利用變量定義字符串和緩沖區(qū)46aa SEGMENT;數(shù)據(jù)段1xx DB'Hello!’;定義源串a(chǎn)a ENDSbb SEGMENT;數(shù)據(jù)段2yy DB6dup(?);定義目的緩沖區(qū)bb ENDScc SEGMENT;代碼段
ASSUMECS:cc,DS:aa,ES:bb;指示指令中標號,變量所在段start
: CLD;設(shè)置傳送方向
MOVAX,aa;DS:SI←
源串首地址
MOVDS,AX
LEASI,xx
MOVAX,SEGyy;ES:DI←
目的首地址
MOVES,AX MOVDI,OFFSETyy
MOVCX,6;CX←
串的長度
REPMOVSB;串傳送
MOVAH,4CH;調(diào)用4CH系統(tǒng)功能,返回DOS INT21Hcc ENDS
ENDstart
;指示程序結(jié)束和程序入口47D:\>EDIThello.asm;編寫源程序D:\>MASMhello;;匯編源程序
Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.49860+421241Bytessymbolspacefree0WarningErrors0SevereErrorsD:\>LINKhello;;連接程序Microsoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.LINK:warningL4021:nostacksegmentD:\>hello;執(zhí)行程序
D:\>48D:\>DEBUGhello.exe
;利用DEBUG查看結(jié)果-U
;查看程序代碼
129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、-D129D:0L20
;執(zhí)行程序前,查看源串內(nèi)容129D:000048656C6C6F210000-0000000000000000Hello!..........129D:00100000000000000000-0000000000000000................-D129E:0L20
;執(zhí)行程序前,查看目的串129E:00000000000000000000-0000000000000000................129E:0010FCB89D128ED88D36-0000B89E128EC0BF.......6........-CLDMOVAX,aaMOVDS,AXLEASI,xx
MOVAX,SEGyyMOVES,AXMOVDI,OFFSETyy
MOVCX,6REPMOVSBMOVAH,4CHINT21H49-G
;執(zhí)行程序Programterminatednormally-D129E:0L20
;查看目的串129E:000048656C6C6F210000-0000000000000000Hello!..........129E:0010FCB89D128ED88D36-0000B89E128EC0BF.......6........-D
129D:0L20
;從源串重新查看
129D:000048656C6C6F210000-0000000000000000
Hello!..........129D:00100000000000000000-0000000000000000
.................129D:0020FCB89D128ED88D36-0000B89E128EC0BF.......6........129D:00300000B90600F3A4B4-4CCD2109E8080003........L.!.....50-U
;查看程序代碼
129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、aa SEGMENTxx DB'Hello!’aa ENDSbb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENTASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,aa MOVDS,AX LEASI,xx MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 REPMOVSB MOVAH,4CH INT21H
cc ENDS
ENDstart51data1SEGMENT;數(shù)據(jù)段1,(可據(jù)需要設(shè)定,也可無)……;變量定義data1ENDSdata2SEGMENT;數(shù)據(jù)段2(可據(jù)需要設(shè)定,也可無)……data2ENDScodeSEGMENT;程序段
ASSUMECS:code,DS:data1,ES:data2start:
、、、;程序主體部分、、、、、、、、、
MOVAH,4CH
;返回DOS
INT21HcodeENDS
ENDstart完整匯編語言程序框架:52六、過程定義偽操作
格式
過程名PROC類型、、、過程名ENDP
過程定義由偽操作PROC開始、ENDP結(jié)束。其中:PROC和ENDP必須成對出現(xiàn),
且語句前必須有過程名,過程名必須相同。
PROC和ENDP語句之間為子程的指令序列。程序中可以定義多個過程。程序經(jīng)匯編、連接及裝入內(nèi)存后,
過程名為一具體的內(nèi)存地址,指示子程入口。53過程名常用作CALL調(diào)用指令的操作數(shù),
子程的最后安排RET返回指令,使執(zhí)行完子程后能返回調(diào)用處。過程有兩種類型:NEAR和FAR
無類型項時,默認為NEAR類型。當過程與調(diào)用指令不在同一段時,應(yīng)將過程定義為FAR類型。過程類型決定子程中RET的返回類型54例1displayPROC
、、、、C3H
、、
RET;NEAR屬性的過程對應(yīng)段內(nèi)返回
displayENDP例2displayPROCFAR
、、、、CBH
、、
RET;FAR屬性的過程對應(yīng)段間返回
displayENDP55七、等值定義偽操作
格式
符號名EQU需等值的表達式作用是用符號名等值指定的表達式其中表達式可以是任何有效的操作數(shù)匯編時用語句中的表達式代替程序中符號所在的地方。應(yīng)用:1.定義符號常量,方便修改程序。2.某表達式多次出現(xiàn)時,用等值偽操作可以方便編程。56八、其他分析運算符:TYPE,LENGTH,SIZE把一些特征或存貯器地址的一部分作為數(shù)值回送?!YPE格式:TYPEvariable變量則回送該變量的以字節(jié)數(shù)表示的類型(DB為1,DW為2,DD為4,DQ為8,DT為10)或label標號回送標號類型數(shù)值(NEAR為-1,F(xiàn)AR為-2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY匯編程序其形式:
ADDSI,257·LENGTH格式:LENGTHvariable
對于變量中使用DUP匯編回送分配給變量單元數(shù),其他情況回送1。例:FESSDW100DUP(0) 對于MOVCX,LENGTHFEES
匯編程序?qū)⑵湫问剑篗OVCX,100
其他情況例:ARRAYDW1,2,3
對于指令MOVCX,LENGTHARRAY
匯編程序?qū)⑹蛊湫问綖椋篗OVCX,1例:TABLEDB‘ABCD’
對于指令MOVCX,LENGTHTABLE匯編程序使其形式為:MOVCX,158·SIZE格式:SIZEvariable
回送分配給該變量的字節(jié)數(shù)LENGTH*TYPE例:FEESDW100DUP(0)
MOVCX,SIZEFEES
將形成:MOVCX,200例:TABLEDB‘ABCD’
MOVCX,SIZETABLE
將形成MOVCX,1例:ARRAYDW1,2,3
MOVCX,SIZEARRAY
形式MOVCX,2 LENGTH*TYPE=259總結(jié):
TYPE變量的返回值是類型的字節(jié)數(shù): DB為1,DW為2,DD為4,DQ為8,DT為10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黨章黨紀黨史黨建知識競賽多項選擇題庫及答案(共210道題)
- 2025年激光掃描繪圖機項目發(fā)展計劃
- 診所裝修環(huán)保保證金協(xié)議
- 農(nóng)業(yè)科技節(jié)水灌溉技術(shù)推廣應(yīng)用策略
- 公司可行性分析報告
- 廣汽充電樁 遠程
- 垃圾發(fā)電采購
- 高速電動汽車充電樁
- 保險行業(yè)保險科技創(chuàng)新與風險管理方案
- 智能家電產(chǎn)品開發(fā)與生產(chǎn)標準
- 江蘇省南京師范大學附屬中學樹人學校2023-2024學年九年級下學期3月月考數(shù)學試卷
- 阿拉伯國家聯(lián)盟課件
- 油氣管道視頻監(jiān)控系統(tǒng)總體設(shè)計方案
- 知識產(chǎn)權(quán)案件調(diào)解實務(wù)
- 毫米波集成電路詳述
- 打印設(shè)備維護服務(wù)投標方案
- JGT454-2014 建筑門窗、幕墻中空玻璃性能現(xiàn)場檢測方法
- 一定溶質(zhì)質(zhì)量分數(shù)的氯化鈉溶液的配制
- DB5301∕T 24-2019 園林綠化養(yǎng)護規(guī)范
- 地坪漆施工合同地坪漆施工合同范本
- 高風險供應(yīng)商管理程序(經(jīng)典-專業(yè)-建議收藏)
評論
0/150
提交評論