版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、教學(xué)(jio xu)重點(diǎn)在掌握基本的匯編語言程序設(shè)計(jì)方法之后,進(jìn)一步學(xué)習(xí)如何提高編程效率的各種( zhn)實(shí)用方法:高級語言特性宏結(jié)構(gòu)模塊化第1頁/共65頁第一頁,共66頁。5.1 高級(goj)語言特性 MASM 6.0引入高級語言的程序設(shè)計(jì)特性 條件控制(kngzh)偽指令 .IF .ELSE .ENDIF 循環(huán)控制(kngzh)偽指令 .WHILE .ENDW .REPEAT .UNTIL 過程聲明和過程調(diào)用偽指令 .PROTO .INVOKE第2頁/共65頁第二頁,共66頁。要調(diào)用帶參數(shù)過程定義的過程,不應(yīng)采用CALL指令,因?yàn)楸容^煩瑣應(yīng)該采用過程調(diào)用偽指令I(lǐng)NVOKE使用INVOKE
2、偽指令的前提(qint)是需要用PROTO偽指令對過程進(jìn)行聲明5.1.3 過程聲明(shngmng)和過程調(diào)用偽指令過程名 PROC調(diào)用距離 語言類型 作用(zuyng)范圍 USES 寄存器列表, 參數(shù):類型LOCAL 參數(shù)表;匯編語言語句過程名 ENDP第5章過程聲明偽指令:用于事先聲明過程的結(jié)構(gòu)過程名PROTO 調(diào)用距離 語言類型, 參數(shù):類型過程調(diào)用偽指令I(lǐng)NVOKE 過程名,參數(shù),.如何調(diào)用如何調(diào)用第3頁/共65頁第三頁,共66頁。;匯編語言程序:lt503.asm.model smallchecksumd PROTO c,:word,:word;聲明過程.stack.dataarr
3、aydb 12h,25h,0f0h,0a3h,3db 68h,71h,0cah,0ffh,90hcountequ $-array;數(shù)組的元素個(gè)數(shù)resultdb ?;校驗(yàn)(xio yn)和.code.startupINVOKE checksumd,count,offset array;調(diào)用過程mov result,al;保存校驗(yàn)(xio yn)和.exit 0例5 5. .3 31/21/2列表列表(li bio)文件文件第4頁/共65頁第四頁,共66頁。checksumd PROC c USES bx cx,countp:word,arrayp:wordmov bx,arrayp ;BX數(shù)組
4、的偏移地址(dzh)mov cx,countp ;CX數(shù)組的元素個(gè)數(shù)xor al,alsumd: add al,bx;求和:ALAL+DS:BXinc bxloop sumdretchecksumd endpend例5 5. .3 32/22/2列表列表(li bio)文件文件第5頁/共65頁第五頁,共66頁。;lt503.asm的列表(li bio)文件(lt503.lst).INVOKE checksumd,count,offset array *mov ax,word ptr OFFSET array *push ax *mov ax,+000Ah *push ax *call chec
5、ksumd *add sp,04hmov result,al.例5 5. .3 31/21/2指示該語句由匯編程序自動生成指示該語句由匯編程序自動生成第6頁/共65頁第六頁,共66頁。checksumd PROC c USES bx cx,countp:word,arrayp:word *push bp;起始(q sh)代碼 *mov bp,sp *push bx;保護(hù)bx和cx *push cxmov bx,arrayp;arrayp=BP+6mov cx,countp;cuontp=BP+4.ret *pop cx;結(jié)尾代碼 *pop bx *pop bp *ret 0000hchecks
6、umc endp例5 5. .3 32/22/2進(jìn)入調(diào)試程序觀察進(jìn)入調(diào)試程序觀察第7頁/共65頁第七頁,共66頁。5.2 宏結(jié)構(gòu)(jigu)程序設(shè)計(jì)宏匯編(hubin)重復(fù)匯編(hubin)條件匯編(hubin)統(tǒng)稱宏結(jié)構(gòu)宏(Macro)是匯編語言的一個(gè)特點(diǎn),它是與子程序類似又獨(dú)具特色的另一種簡化(jinhu)源程序的方法第8頁/共65頁第八頁,共66頁。宏具有宏名的一段匯編語句序列宏定義時(shí)書寫宏指令這段匯編語句序列的縮寫宏調(diào)用時(shí)書寫宏展開宏指令處用這段宏代替的過程宏匯編時(shí)實(shí)現(xiàn)宏的參數(shù)(cnsh)功能強(qiáng)大,頗具特色配合宏,還有宏操作符和有關(guān)偽指令5.2.1 宏匯編(hubin)第5章第9頁/共
7、65頁第九頁,共66頁。宏名macro 形參表宏定義(dngy)體endmmainbeginMACRO ;定義名為mainbegin的宏,無參數(shù)(cnsh)mov ax,data;宏定義體mov ds,axENDM;宏定義結(jié)束mainendMACRO retnum;帶有形參retnummov al,retnum;宏定義中使用參數(shù)(cnsh)mov ah,4chint 21hENDM宏注釋符第10頁/共65頁第十頁,共66頁。宏名實(shí)參表start:mainbegin;宏調(diào)用,建立DS內(nèi)容dispmsg string;宏調(diào)用,顯示字符串mainend 0;宏調(diào)用,返回DOSend start 宏調(diào)
8、用的實(shí)質(zhì)是在匯編過程中進(jìn)行宏展開(zhn ki) 宏展開(zhn ki)的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體取代源程序的宏指令,同時(shí)用位置匹配的實(shí)參對形參進(jìn)行取代第11頁/共65頁第十一頁,共66頁。宏展開在匯編時(shí),用宏定義體的代碼序列替代宏指令(zhlng)的過程。start: mainbegin;宏指令(zhlng) 1mov ax,data ;宏展開 1mov ds,axmainend 0;宏指令(zhlng) 1mov al,0;宏展開 1mov ah,4ch 1int 21h第12頁/共65頁第十二頁,共66頁。宏的參數(shù)(cnsh)使用非常靈活
9、宏定義時(shí),可以(ky)無參數(shù),例如5.4a的mainbegin可以(ky)帶有一個(gè)參數(shù),例如5.4a的mainend也可以(ky)具有多個(gè)參數(shù);例如5.5a的shlext參數(shù)可以(ky)是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以(ky)是表達(dá)式;例如5.5b的shift和shrot宏定義體可以(ky)是任何合法的匯編語句,既可以(ky)是硬指令序列,又可以(ky)是偽指令序列;例如5.6的dstring第13頁/共65頁第十三頁,共66頁。;宏定義(dngy)shlextmacro shloprand,shlnumpush cxmov cl,shlnumshl shlopra
10、nd,clpop cxendm;宏指令shlext ax,6;宏展開 1push cx 1mov cl,06 1shl ax,cl 1pop cx例5.5a5.5a第14頁/共65頁第十四頁,共66頁。;統(tǒng)一4條移位指令(zhlng)的宏指令(zhlng)shiftmacro soprand,snum,sopcodepush cxmov cl,snums&sopcode& soprand,clpop cxendm;統(tǒng)一移位和循環(huán)移位8條指令(zhlng)的宏指令(zhlng)shrotmacro sroprand,srnum,sropcodepush cxmov cl,srnu
11、msropcode sroprand,clpop cxendm例5.5b5.5b替換(t hun)操作符第15頁/共65頁第十五頁,共66頁。;宏定義(dngy)dstring macro stringdb &string&,0dh,0ah,$endm;宏調(diào)用dstring dstring 0 ! Number !;宏展開 1db This is a example., 0dh,0ah,$ 1db 0 Number 10, 0dh,0ah, $例5.65.6轉(zhuǎn)義(zhun y)注釋符傳遞(chund)注釋符第16頁/共65頁第十六頁,共66頁。宏操作符 ;宏注釋符,用于表示(b
12、iosh)在宏定義中的注釋。采用這個(gè)符號的注釋,在宏展開時(shí)不出現(xiàn) &替換操作符,用于將參數(shù)與其他字符分開。如果參數(shù)緊接在其他字符之前或之后,或者參數(shù)出現(xiàn)在帶引號的字符串中,就必須使用該偽操作符第5章第17頁/共65頁第十七頁,共66頁。宏操作符 字符串傳遞操作符,用于括起字符串。在宏調(diào)用中,如果傳遞的字符串實(shí)參數(shù)含有逗號、空格等間隔符號,則必須用這對操作符,以保證(bozhng)字符串的完整 !轉(zhuǎn)義操作符,用于指示其后的一個(gè)字符作為一般字符,不含特殊意義 %表達(dá)式操作符,用在宏調(diào)用中,表示將后跟的一個(gè)表達(dá)式的值作為實(shí)參,而不是將表達(dá)式本身作為參數(shù)第5章第18頁/共65頁第十八頁,共66
13、頁。與宏有關(guān)(yugun)(yugun)的偽指令局部標(biāo)號偽指令LOCAL 標(biāo)號列表宏定義體采用(ciyng)了標(biāo)號,應(yīng)使用LOCAL加以說明它必須是宏定義MACRO語句之后的第一條語句宏定義刪除偽指令PURGE 宏名表不需要某個(gè)宏定義時(shí),可以把它刪除宏定義退出偽指令EXITM偽指令EXITM表示結(jié)束當(dāng)前宏調(diào)用的展開第5章第19頁/共65頁第十九頁,共66頁。;宏定義(dngy)absol macro oprdlocal nextcmp oprd,0jge nextneg oprdnext:endm例5.75.7;宏調(diào)用(dioyng)(dioyng)absol word ptr bxabsol
14、 word ptr bxabsol bxabsol bx;宏展開 1 1cmp word ptr bx,0cmp word ptr bx,0 1 1jge ?0000jge ?0000 1 1neg word ptr bxneg word ptr bx 1 1?0000:?0000: 1 1cmp bx,0cmp bx,0 1 1jge ?0001jge ?0001 1 1neg bxneg bx 1 1?0001:?0001:單獨(dú)占一行第20頁/共65頁第二十頁,共66頁。比較(bjio)僅是源程序級的簡化:宏調(diào)用在匯編時(shí)進(jìn)行程序語句的展開,不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒有改變通過形
15、參、實(shí)參結(jié)合實(shí)現(xiàn)(shxin)參數(shù)傳遞,簡捷直觀、靈活多變還是目標(biāo)程序級的簡化:子程序調(diào)用在執(zhí)行時(shí)由CALLCALL指令轉(zhuǎn)向、RETRET指令返回;形成的目標(biāo)代碼 較 短 , 執(zhí) 行 速 度(sd)(sd)減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù)宏宏子程序子程序第21頁/共65頁第二十一頁,共66頁。 宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問題選擇(xunz)使用那種方法 通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序比較(bjio)結(jié)論宏宏子程序子程序第22頁/共65頁第二十二頁,共66頁。5.2.2 重復(fù)(chngf)匯編 重復(fù)匯編指在
16、匯編過程中,重復(fù)展開一段(基本)相同的語句 重復(fù)匯編沒有名字,不能被調(diào)用 重復(fù)匯編常用在宏定義體中,也可以在一般(ybn)匯編語句中使用 重復(fù)匯編偽指令有三個(gè): REPEAT按參數(shù)值重復(fù) FOR按參數(shù)個(gè)數(shù)重復(fù) FORC按參數(shù)的字符個(gè)數(shù)重復(fù) 最后,用ENDM結(jié)束第5章第23頁/共65頁第二十三頁,共66頁。REPEAT REPEAT 重復(fù)(chngf)(chngf)次數(shù) 重復(fù)(chngf)(chngf)體ENDMENDMchar = Achar = AREPEAT 26REPEAT 26 db char db char char = char +1 char = char +1ENDMENDM
17、1 1db chardb char ; ;等效于db Adb A 1 1char = char +1char = char +1 1 1db chardb char; ;等效于db Bdb B 1 1char = char +1char = char +1. 1 1db chardb char ; ;等效于db Zdb Z 1 1char = char +1char = char +1第24頁/共65頁第二十四頁,共66頁。FOR FOR 形參, ,實(shí)參表 重復(fù)(chngf)(chngf)體ENDMENDMFOR regad, FOR regad, push regad push regadE
18、NDMENDM 1 1push axpush ax 1 1push bxpush bx 1 1push cxpush cx 1 1push dxpush dx第25頁/共65頁第二十五頁,共66頁。FORC FORC 形參, , 字符串 重復(fù)(chngf)(chngf)體ENDMENDMFORC regad,dcbaFORC regad,dcba pop ®ad&x pop ®ad&xENDMENDM 1 1pop dxpop dx 1 1pop cxpop cx 1 1pop bxpop bx 1 1pop axpop ax第26頁/共65頁第二十
19、六頁,共66頁。5.2.3 條件(tiojin)匯編 條件匯編偽指令在匯編過程中,根據(jù)條件決定匯編的語句(yj) IFxx 表達(dá)式 ;滿足,匯編分支語句(yj)體1分支語句(yj)體1 ELSE;不滿足,匯編分支語句(yj)體2分支語句(yj)體2 ENDIF;條件匯編結(jié)束第5章第27頁/共65頁第二十七頁,共66頁。pdatamacro num IF num lt 100;如果num 100,則匯編(hubin)如下語句db num dup (?) ELSE;否則,匯編(hubin)如下語句db 100 dup (?) ENDIFendmpdata 12 ;宏調(diào)用db 12 dup(?) ;
20、宏匯編(hubin)結(jié)果pdata 102 ;宏調(diào)用db 100 dup(?) ;宏匯編(hubin)結(jié)果例5.105.10第28頁/共65頁第二十八頁,共66頁。宏結(jié)構(gòu)的作用宏匯編、重復(fù)匯編和條件(tiojin)匯編為源程序的編寫提供了很多方便,靈活運(yùn)用它們可以編寫出非常良好的源程序來匯編系統(tǒng)中有些以圓點(diǎn)起始的 偽指令(如.startup、.exit等)實(shí)際上是一種宏結(jié)構(gòu)第29頁/共65頁第二十九頁,共66頁。dstringMACRO string;定義字符串db &string&,0dh,0ah,$ENDMmainbeginMACRO dsseg;設(shè)置(shzh)數(shù)據(jù)段地址
21、mov ax,dssegmov ds,axENDMdispmsgMACRO messagemov dx,offset messagemov ah,09hint 21hENDM第30頁/共65頁第三十頁,共66頁。mainendMACRO retnum;返回(fnhu)DOS,可不帶參數(shù)ifb mov ah,4ch;沒有參數(shù)else mov ax,4c00h+(retnum AND 0ffh); 有參數(shù)endifint 21hENDM第31頁/共65頁第三十一頁,共66頁。.model small.stack 256.datamsg1equ this bytedstringmsg2equ thi
22、s bytedstring.codestart:mainbegin data;建立DS內(nèi)容dispmsg msg1;顯示(xinsh)msg1字符串dispmsg msg2;顯示(xinsh)msg2字符串mainend;返回DOSend start第32頁/共65頁第三十二頁,共66頁。將程序分段、采用(ciyng)子程序或宏結(jié)構(gòu)都是進(jìn)行模塊化程序設(shè)計(jì)本節(jié)介紹開發(fā)大型程序時(shí)采用(ciyng)的方法:源程序文件的包含目標(biāo)模塊連接子程序庫5.3 模塊化程序設(shè)計(jì)(chn x sh j)例題例題(lt) 5.12(lt) 5.12將鍵盤輸入的數(shù)據(jù)按升序輸出將鍵盤輸入的數(shù)據(jù)按升序輸出第33頁/共65頁
23、第三十三頁,共66頁。把源程序分放在幾個(gè)文本文件中,在匯編時(shí)通過包含偽指令I(lǐng)NCLUDE結(jié)合成一體INCLUDE 文件名可將常用的子程序形成.ASM匯編語言源文件可將常用的宏定義存放在.MAC宏庫文件中可將常量定義、聲明語句(yj)組織在.INC包含文件中例5.12a 宏庫文件 lt512a.mac 主程序文件 lt512a.asm 子程序文件 sub512a.asm5.3.1 源程序文件(wnjin)的包含1第34頁/共65頁第三十四頁,共66頁。dispcharmacro char;顯示(xinsh)char字符mov dl,charmov ah,2int 21hendmdispmsgma
24、cro message;顯示(xinsh)message字符串mov dx,offset messagemov ah,9int 21hendmLt512a.maLt512a.mac c第35頁/共65頁第三十五頁,共66頁。include lt512a.mac.dispmsg msg1;提示輸入數(shù)據(jù)(shj)mov bx,offset bufcall input;數(shù)據(jù)(shj)輸入cmp cx,0je start4;沒有輸入數(shù)據(jù)(shj)則退出mov count,cx.;顯示輸入的數(shù)據(jù)(shj).;數(shù)據(jù)(shj)排序.;顯示經(jīng)排序后的數(shù)據(jù)(shj)start4: .exit 0include
25、sub512a.asmendLt512a.asmLt512a.asm第36頁/共65頁第三十六頁,共66頁。子程序源文件有3個(gè)子(g zi)程序ALdisp;顯示2位16進(jìn)制數(shù)子程序(例4.10)sorting ;排序子程序(例4.8)input;鍵盤輸入子程序還包含一個(gè)宏convert ;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)sub512a.asub512a.asmsm讓我們(w men)(w men)重點(diǎn)分析鍵盤輸入子程序 input input第37頁/共65頁第三十七頁,共66頁。;鍵盤輸入子程序;入口(r ku)參數(shù):ds:bx=存放數(shù)據(jù)的緩沖區(qū);出口參數(shù):cx=數(shù)據(jù)個(gè)數(shù)inpu
26、tprocpush axpush dxxor cx,cx;數(shù)據(jù)個(gè)數(shù)清0input01: xor dx,dx;輸入字符清0input02: mov ah,1;鍵盤輸入一個(gè)字符int 21hinputinput之一繼續(xù):繼續(xù):inputinput之二之二第38頁/共65頁第三十八頁,共66頁。input10: cmp al,0dhje input30;是回車,結(jié)束整個(gè)數(shù)據(jù)的輸入cmp al, je input20;是空格和逗號,確認(rèn)輸入了一個(gè)(y )數(shù)據(jù)cmp al,je input20cmp al,08hje input17;是退格,丟棄本次輸入的數(shù)據(jù),出錯(cuò)inputinput之二繼續(xù):繼續(xù):i
27、nputinput之三之三第39頁/共65頁第三十九頁,共66頁。cmp al,0;有效數(shù)字(yu xio sh z)判斷(圖5.2b)jb input17 ;小于0,不是有效數(shù)字(yu xio sh z),出錯(cuò)cmp al,fja input17 ;大于f,不是有效數(shù)字(yu xio sh z)cmp al,ajb input11sub al,20h ;af轉(zhuǎn)換成大寫AFjmp input12input11:cmp al,Fja input17 ;字符小于a、大于F,出錯(cuò)cmp al,Ajae input12;是AF,有效字符cmp al,9ja input17 ;是09,有效字符input
28、input之三繼續(xù):繼續(xù):inputinput之四之四第40頁/共65頁第四十頁,共66頁。input12: cmp dl,0;有效(yuxio)字符的處理jne input13mov dl,al;dl=0,輸入了一個(gè)數(shù)據(jù)的低位,則dlaljmp input02;轉(zhuǎn)到字符輸入input13: cmp dh,0jne input17;dl0,dh0輸入3位數(shù)據(jù),出錯(cuò)mov dh,dl;dl0,dh0輸入了一個(gè)數(shù)據(jù)的高位mov dl,al;dhdl,dlaljmp input02;轉(zhuǎn)到字符輸入inputinput之四繼續(xù):繼續(xù):inputinput之五之五第41頁/共65頁第四十一頁,共66頁。i
29、nput17:mov dl,7;輸入錯(cuò)誤處理mov ah,2int 21hmov dl,?mov ah,2int 21hjmp input01;轉(zhuǎn)到輸入一個(gè)(y )數(shù)據(jù)inputinput之五繼續(xù):繼續(xù):inputinput之六之六第42頁/共65頁第四十二頁,共66頁。;轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖5.2c)input20: convertjmp input01 ;轉(zhuǎn)到輸入一個(gè)(y )數(shù)據(jù)input30:convertpop dxpop axret;返回,出口參數(shù)已設(shè)定inputendpinputinput之六繼續(xù):繼續(xù):convertconvert之一之一第43頁/共65頁第四十三頁,共66頁。
30、;將DX兩位ASCII碼轉(zhuǎn)換(zhunhun)為兩位16進(jìn)制數(shù)(圖5.2c)convert macrolocal input21,input22local input24,input25cmp dl,0;dl=0,沒有要轉(zhuǎn)換(zhunhun)的數(shù)據(jù),退出je input25convertconvert之一繼續(xù):繼續(xù):convertconvert之二之二第44頁/共65頁第四十四頁,共66頁。cmp dl,9jbe input21sub dl,7;字符(z f)AF,則減7input21: and dl,0fh;轉(zhuǎn)換低位cmp dh,0;dh=0,沒有高位數(shù)據(jù)je input24cmp dh,9
31、jbe input22sub dh,7input22: shl dh,1shl dh,1shl dh,1shl dh,1;轉(zhuǎn)換高位or dl,dh;合并高、低位convertconvert之二繼續(xù):繼續(xù):convertconvert之三之三第45頁/共65頁第四十五頁,共66頁。源文件包含的操作步驟:源文件包含的操作步驟: 分別編輯生成各個(gè)文件分別編輯生成各個(gè)文件 匯編匯編(hubin)(hubin)、連接主程序、連接主程序文件文件input24: mov bx,dl;存入(cn r)緩沖區(qū)inc bxinc cx;數(shù)據(jù)加1input25:endmconvertconvert之三第46頁/共6
32、5頁第四十六頁,共66頁。把常用子程序?qū)懗瑟?dú)立的源程序文件,單獨(dú)匯編,形成子程序的目標(biāo)文件.OBJ主程序也經(jīng)過獨(dú)立匯編之后形成目標(biāo)文件連接程序?qū)⑺心繕?biāo)文件連接起來,最終產(chǎn)生可執(zhí)行文件需要遵循的原則: 聲明共用的變量、過程等 實(shí)現(xiàn)正確(zhngqu)的段組合 處理好參數(shù)傳遞問題5.3.2 目標(biāo)代碼(di m)文件的連接2第47頁/共65頁第四十七頁,共66頁。聲明共用的變量(binling)、過程 各個(gè)(gg)模塊間共用的變量、過程等要說明 PUBLIC 標(biāo)識符 ,標(biāo)識符.;定義標(biāo)識符的模塊使用 EXTERN 標(biāo)識符:類型 ,標(biāo)識符:類型.;調(diào)用標(biāo)識符的模塊使用 標(biāo)識符是變量名、過程名等 類型
33、是byte / word / dword(變量)或near / far(過程) 在一個(gè)源程序中,public/extern語句可以有多條 各模塊間的public/extern偽指令要互相配對,并且指明的類型互相一致第5章第48頁/共65頁第四十八頁,共66頁。實(shí)現(xiàn)正確(zhngqu)的段組合 子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量 采用簡化段定義格式,只要采用相同的存儲模式,容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用 完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用(near類型),各自定義的段名、類別必須相同,組合類型都是public。實(shí)際的程序開發(fā)中,各個(gè)模塊往往由不同的程序員完成,不易實(shí)現(xiàn)段同
34、名或類別相同,所以索性定義成遠(yuǎn)調(diào)用(far類型) 定義數(shù)據(jù)段時(shí),同樣也要注意(zh y)這個(gè)問題。當(dāng)各個(gè)模塊的數(shù)據(jù)段不同時(shí),要正確設(shè)置數(shù)據(jù)段DS寄存器的段基地址第5章第49頁/共65頁第四十九頁,共66頁。處理(chl)好參數(shù)傳遞問題 少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身 大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲地址 還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量 這些也是子程序間的參數(shù)傳遞方法(fngf) 另外,第7章混合編程介紹了更好的堆棧傳遞參數(shù)方法(fngf),可以采用第5章第50頁/共65頁第五十頁,共66頁。例5.12b 主程序l
35、t512b.asm并入宏定義(dngy) 子程序文件sub512b.asm,要加上段定義(dngy)語句、聲明語句等,但不需要起始點(diǎn)和結(jié)束點(diǎn)模塊連接模塊連接(linji)(linji)的操作步驟:的操作步驟: 分別編輯生成各個(gè)文件分別編輯生成各個(gè)文件 分別匯編各個(gè)文件分別匯編各個(gè)文件 連接連接(linji)(linji)各個(gè)目標(biāo)文件,各個(gè)目標(biāo)文件,形成形成可執(zhí)行文件可執(zhí)行文件第51頁/共65頁第五十一頁,共66頁。.;宏定義(dngy).codepublic count;定義(dngy)count共用extern ALdisp:near,sorting:near,input:far;聲明其他模
36、塊中的子程序.startup.exit 0;去掉(lt512a.asm中的)包含語句endLt512b.asLt512b.asm m第52頁/共65頁第五十二頁,共66頁。.model small;定義同樣的存儲模式extern count:word;在其他模塊定義了字變量count.code;子程序在代碼段中public aldisp,sorting,input;3個(gè)子程序是共用(n yn)的Aldispproc;仍然作為近調(diào)用sorting proc;仍然作為近調(diào)用inputproc far;修改為遠(yuǎn)調(diào)用.mov count,cx;提供出口參數(shù).inputendpend;結(jié)束匯編sub51
37、2b.asub512b.asmsm第53頁/共65頁第五十三頁,共66頁。把常用子程序?qū)懗瑟?dú)立的源文件,單獨(dú)匯編形成OBJ文件后,存入(cn r)子程序庫主程序也單獨(dú)匯編形成OBJ文件主程序連接時(shí),調(diào)入子程序庫中的子程序模塊,產(chǎn)生最終的可執(zhí)行文件例5.12c 主程序文件 lt512c.asm 子程序文件 sub512c1.asm 子程序文件 sub512c2.asm 子程序文件 sub512c3.asm5.3.3 子程序庫的調(diào)入3第54頁/共65頁第五十四頁,共66頁。子程序庫 子程序庫文件(.LIB)是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信息 存入庫的子程序的編寫與
38、目標(biāo)文件連接方法中的要求一樣,只是為方便調(diào)用,更加嚴(yán)格 子程序文件編寫完成后,匯編形成目標(biāo)文件;然后利用庫管理工具程序LIB.EXE,把子程序目標(biāo)模塊逐一(zhy)加入到庫中LIB 庫文件名 + 子程序目標(biāo)文件名 庫管理程序LIB幫助創(chuàng)建、組織和維護(hù)子程序模塊庫,例如增加、刪除、替換、合并庫文件等第5章第55頁/共65頁第五十五頁,共66頁。.;宏定義.codeextern ALdisp:near,sorting:near,input:near;聲明(shngmng)其他模塊中的子程序.startup.exit 0endLt512c.asmLt512c.asm第56頁/共65頁第五十六頁,共66頁。.model small.codepublic aldispAldispproc.Aldisp endpendsub512c1.asmsub512c1.asm第57頁/共65頁第五十七頁,共66頁。.model small.codepublic sortings
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級數(shù)學(xué)第二學(xué)期滬教版-期末試卷(滬版)
- 一年級數(shù)學(xué)第一學(xué)期滬教版- 期末試卷 3
- 生活安全 課件
- 2024年湖北省中考數(shù)學(xué)真題卷及答案解析
- 課件 頁面大小
- 西京學(xué)院《網(wǎng)絡(luò)數(shù)據(jù)庫》2022-2023學(xué)年期末試卷
- 西京學(xué)院《建筑信息模型》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《機(jī)械原理》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《高等混凝土結(jié)構(gòu)學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《單片機(jī)原理及應(yīng)用實(shí)驗(yàn)》2021-2022學(xué)年期末試卷
- 采煤教學(xué)課件
- 湖北省荊門市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 少兒美術(shù)畫畫課件6-8歲《一盆生機(jī)盎然的綠籮》
- 醫(yī)院對口支援月度工作統(tǒng)計(jì)表
- 物業(yè)環(huán)境因素識別評價(jià)表
- 材料進(jìn)場檢驗(yàn)項(xiàng)目清單
- 淺析因俄羅斯社會變革產(chǎn)生的俄語新詞
- 《日語古典文法》課程教學(xué)大綱
- 肢體離斷傷的護(hù)理查房
- 初中生不可不讀的經(jīng)典英語美文范文
- 藍(lán)海華騰變頻器說明書
評論
0/150
提交評論