




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1介紹 P139子程序又叫過(guò)程,相當(dāng)與高級(jí)語(yǔ)言的過(guò)程和函數(shù)。子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的基礎(chǔ)。結(jié)構(gòu):procnamePROCAttribute…..procnameENDPAttribute為 NEAR(段內(nèi)調(diào)用) FAR(段間調(diào)用)1介紹 P139子程序又叫過(guò)程,相當(dāng)與高級(jí)語(yǔ)言的過(guò)2一.子程序的設(shè)計(jì)方法2一.子程序的設(shè)計(jì)方法31.子程序的調(diào)用和返回 P140call
格式:CALL目標(biāo)地址功能:暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行相應(yīng)的子程序,目標(biāo)地址給出調(diào)用于程序的入口地址。在子程序執(zhí)行完后,由子程序中的RET指令返回至CALL指令的下一條指令繼續(xù)執(zhí)行。為此,CALL指令同時(shí)需要把斷點(diǎn)地址(即CALL指令的下—條指令的CS和IP)入棧保護(hù)CALL指令不影響標(biāo)志位,但應(yīng)特別注意在于程序中對(duì)相關(guān)寄存器的保護(hù)。CALL指令實(shí)質(zhì)上是一條特殊的、帶返回的無(wú)條件轉(zhuǎn)移指令。31.子程序的調(diào)用和返回 P1404 CALL指令目標(biāo)地址的形成方式與JMP指令完全類似,即有段內(nèi)直接調(diào)用、段內(nèi)間接調(diào)用、段間直接調(diào)用與段間間接調(diào)用四種方式。直接調(diào)用其目標(biāo)地址直接出現(xiàn)在CALL指令中,間接調(diào)用其目標(biāo)地址存放在指令所指向的寄存器或內(nèi)存單元中。4 CALL指令目標(biāo)地址的形成方式與JMP指令完全類似,即有5(1)段內(nèi)直接接調(diào)用格式:CALLNEARPTR標(biāo)號(hào)功能:首先將斷點(diǎn)的IP值壓入推棧,再將從指令中得到的子程序相對(duì)偏移量加到IP,然后根據(jù)IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。如:CALLOUTPUT ;段內(nèi)直接調(diào)用子程序output5(1)段內(nèi)直接接調(diào)用格式:CALLNEARPTR標(biāo)號(hào)6(2)段內(nèi)間接調(diào)用格式:CALLREG|MEM功能:首先將斷點(diǎn)的IP值壓入堆棧,再將子程序的地址偏移量送入IP,然后根據(jù)IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。子程序的地址偏移量為指令中指定的16位通用寄存器或存儲(chǔ)單元值。如:
CALLBX CALLWORDPTR[BX]6(2)段內(nèi)間接調(diào)用格式:CALLREG|MEM7(3)段間直接調(diào)用格式:CALLFARPTR標(biāo)號(hào)功能:首先把斷點(diǎn)的CS值壓入堆棧,并將于程序的段地址送入CS再把斷點(diǎn)的IP值壓入堆棧,把子程序的地址偏移量送入IP。然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)于程序執(zhí)行。如:CALLFARPTROUTPUT ;段間直接調(diào)用子程序OUTPUT7(3)段間直接調(diào)用格式:CALLFARPTR標(biāo)號(hào)8(4)段間間接調(diào)用格式:CALLDWORDPTRMEM功能:首先把斷點(diǎn)的CS壓入堆棧,并將指令中指定的雙字存儲(chǔ)器的第二個(gè)字的內(nèi)容送入CS;再把斷點(diǎn)的IP壓入堆棧,再將雙字指針的第一個(gè)字的內(nèi)容送入IP。然后根據(jù)CS:IP轉(zhuǎn)相應(yīng)子程序執(zhí)行。如:
CALLDWORDPTR[BX] CALLDWRODPTRMEM328(4)段間間接調(diào)用格式:CALLDWORDPTRME92.返回指令RET P141返回指令RET通常作為一個(gè)子程序的最后一條指令,用以返回到調(diào)用這個(gè)于程序的主程序斷點(diǎn)處繼續(xù)執(zhí)行。與調(diào)用指令相對(duì)應(yīng),返回指令RET也有段內(nèi)返回與段間返回兩種形式。是段內(nèi)返回,還是段間返回,匯編程序能自動(dòng)確定,并形成相應(yīng)的返回指令。返回指令有兩種格式:92.返回指令RET P141返回指令RET通常作為一10格式一:RET
格式一為不帶偏移量的返回。若是段內(nèi)的RET指令(機(jī)器碼為C3H/C2H),只返回主程序斷點(diǎn)處的IP值。即從堆棧彈出一個(gè)字送入IP,且SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時(shí)的返回也稱近返回。若為段間的RET指令(機(jī)器碼為CBH/CAH),則要返回主程序斷點(diǎn)處的段地址和IP值。將從堆棧彈出一個(gè)字送CS,SP+2→SP,再?gòu)亩褩棾鲆粋€(gè)字送Cs,同時(shí)SP加2。然后返回CS:IP處繼續(xù)執(zhí)行程序。此時(shí)RET也稱遠(yuǎn)返回。10格式一:RET11格式二:RETn格式二為帶偏移量的返回,與格式一完全類似,只是在修改堆棧指針時(shí)需增加SP←SP+n處理。n一般為偶數(shù),格式二適合主程序向于程序利用堆棧傳遞參數(shù)的情況。在利用堆棧傳遞參數(shù)時(shí),主程序先將參數(shù)壓入堆棧,在于程序中將參數(shù)取出,為找到正確的返回地址,保持堆棧平衡,應(yīng)將堆棧指針修正。返回指令RET對(duì)標(biāo)志位無(wú)影響。11格式二:RETn12例7-3求兩個(gè)數(shù)的最大公約數(shù) P144用展轉(zhuǎn)相除法
在我們編程中用的最多方法就是展轉(zhuǎn)相除法了,展轉(zhuǎn)相除法是古希臘求兩個(gè)正整數(shù)的最大公約數(shù)的也叫歐幾里德算法,用較大的數(shù)除以較小的數(shù),結(jié)果的余數(shù)和被除數(shù)構(gòu)成新的一對(duì)數(shù),繼續(xù)做上面的除法,直到大數(shù)被小數(shù)求盡。12例7-3求兩個(gè)數(shù)的最大公約數(shù) P144用展轉(zhuǎn)相除法13GYS PROCPUSH AXPUSH BXPUSH DXG1: XOR DX,DXDIV BXCMP DX,0JZ EXITMOV AX,BXMOV BX,DXJMP G1EXIT: MOV CX,BXPOP DXPOP BXPOP AXRETGYS ENDP13GYS PROC14
調(diào)用程序和子程序之間的信息傳送叫參數(shù)傳送。a.通過(guò)寄存器傳送參數(shù)(約定寄存器法)P104
例1:十進(jìn)制到十六進(jìn)制數(shù)的轉(zhuǎn)換(BX)。 流程圖開(kāi)始調(diào)用DECIBIN調(diào)用crlf調(diào)用binihex調(diào)用CRLF結(jié)束從鍵盤(pán)取得十進(jìn)制數(shù),保存在BX中顯示回車和換行用十六進(jìn)制形式顯示BX中的數(shù)3.子程序的參數(shù)傳送14調(diào)用程序和子程序之間的信息傳送叫參數(shù)傳送。開(kāi)始調(diào)用D15;從鍵盤(pán)輸入十進(jìn)制數(shù),然后按十六進(jìn)制顯示DATASEGMENTDATAENDS;同學(xué)們掌握各段的結(jié)構(gòu)STACKSEGMENTPARASTACK'STACK'DB100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK ;分配段址,但不會(huì)給段寄存器付值15;從鍵盤(pán)輸入十進(jìn)制數(shù),然后按十六進(jìn)制顯示16START:MOVAX,DATAMOVDS,AX ;給段寄存器DS付值
callDECIBINcallbinihex ;子程序調(diào)用
callcrlfMOVAH,4CHINT21H ;主程序的返回方式一(DOS 功能調(diào)用返回)16START:17DECIBINprocnearpushaxpushcxpushfmovbx,0newchar:movah,1;鍵盤(pán)輸入
int21hsubal,30hjlexit;<0退出
cmpal,9jgexit;>9退出
cbwxchgax,bxmovcx,10mulcxxchgax,bxaddbx,axjmpnewcharexit:popfpopcxpopaxretDECIBINendp17DECIBINprocnear cbw18binihexprocnearpushaxpushcxpushdxpushfmovch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30h;’0’~’9’cmpal,3ahjlprintitaddal,7h;’A’~’F’printit:movdl,almovah,2int21hdecchjnzrotatemovdl,'H'movah,2int21hpopfpopdxpopcxpopaxretbinihexendp18binihexprocnearprintit19crlfPROCNEAR pushax pushdx pushf movdl,0dh movah,2 int21h movdl,0ah movah,2 int21h popf popdx popax retcrlfENDPCODEENDSENDSTART19crlfPROCNEAR20b.如果過(guò)程和調(diào)用程序在同一模塊中,則過(guò)程可直接訪問(wèn)模塊中的變量。(約定變量法)Datasegmentarydw100dup(?)countdw100sumdw?Dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,ax20b.如果過(guò)程和調(diào)用程序在同一模塊中,則過(guò)程可直接訪問(wèn)模塊21…callnearptrproadd…retmainendpProaddprocnearpushax….ProaddendpCodeendsendstart21…22c.通過(guò)地址表傳送參數(shù)地址(約定存儲(chǔ)器法)建立一個(gè)地址表,把要傳送的參數(shù)存在地址表中,然后把地址表的首地址通過(guò)寄存器BX傳送到子程序。
movtable,offsetnummovtable+2,offsetnmovtable+4,offsettotalmovbx,offsettablecallproadd22c.通過(guò)地址表傳送參數(shù)地址(約定存儲(chǔ)器法)23d.通過(guò)堆棧傳送參數(shù)或參數(shù)地址(堆棧法)采用在主程序里把參數(shù)地址保存到堆棧中,在子程序里從堆棧中取出參數(shù)以達(dá)到傳送參數(shù)的目的。注:用BP保存原來(lái)的SP的值,以便取得堆棧中的地址.23d.通過(guò)堆棧傳送參數(shù)或參數(shù)地址(堆棧法)24e.多個(gè)模塊之間的參數(shù)傳送問(wèn)題
(1)外部符號(hào)
PUBLICsymbol[,…]
在一個(gè)模塊中定義的符號(hào)在提供給其他模塊使用時(shí),必須用PUBLIC定義.EXTRNsymbolname:type[,…]
在另一模塊中定義而在本模塊中使用的符號(hào)必須用EXTERN偽操作。如符號(hào)為變量,則類型為BYTE/WORD/DWORD;如符號(hào)為標(biāo)號(hào)或過(guò)程名,則類型為NEAR/FAR24e.多個(gè)模塊之間的參數(shù)傳送問(wèn)題25二.子程序的嵌套
P153主程序CALLPROC-A子程序AProc_a…Callproc_b…ret子程序BProc-b…ret25二.子程序的嵌套 P153主程序子程序A子程26三、子程序的結(jié)構(gòu)子程序的代碼部分通常有如下結(jié)構(gòu):
(1)保護(hù)現(xiàn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年基金從業(yè)資格證之基金法律法規(guī)、職業(yè)道德與業(yè)務(wù)規(guī)范題庫(kù)檢測(cè)試卷B卷附答案
- 2025獨(dú)家代理合同范本版
- 關(guān)于鋁合金合同樣本
- 2025工程承包合同協(xié)議模板
- 南平鋼結(jié)構(gòu)安裝施工方案
- 倉(cāng)庫(kù)代管物資合同樣本
- 農(nóng)田整治施工合同標(biāo)準(zhǔn)文本
- 沙石地基處理方案范本
- 個(gè)人裝修吊頂合同樣本
- 組織架構(gòu)重構(gòu)方案范本
- 紅綠燈控制系統(tǒng)的設(shè)計(jì)與制作
- DPP-4抑制劑的同與異-課件
- 高中物理19章原子核測(cè)試題人教新課標(biāo)3
- 勞務(wù)分包隊(duì)伍考核評(píng)價(jià)管理辦法
- 不負(fù)食光 拒絕浪費(fèi)-主題班會(huì)課件
- wagner假體專題知識(shí)培訓(xùn)
- 太原市修繕土建工程預(yù)算定額
- 市政工程質(zhì)量標(biāo)準(zhǔn)化實(shí)施指南(61頁(yè))
- 北大中國(guó)通史課件之——從大蒙古國(guó)到元朝
- 市政工程安全工作手冊(cè)(全套)(共44頁(yè))
- 湖北環(huán)境監(jiān)測(cè)服務(wù)收費(fèi)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論