版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算機接口技術(shù)
(匯編與接口)第四章匯編語言程序設(shè)計4主要內(nèi)容:匯編語言源程序的結(jié)構(gòu)匯編語言語句格式偽指令功能調(diào)用匯編語言程序設(shè)計第4章:4.6子程序設(shè)計把功能相對獨立的程序段單獨編寫和調(diào)試,作為一個相對獨立的模塊供程序使用,就形成子程序子程序可以實現(xiàn)源程序的模塊化,可簡化源程序結(jié)構(gòu),可以提高編程效率主程序(調(diào)用程序)需要利用CALL指令調(diào)用子程序(被調(diào)用程序)子程序需要利用RET指令返回主程序第4章:4.6.1過程定義和子程序編寫匯編語言中,子程序要用一對過程偽指令PROC和ENDP聲明,格式如下:
過程名
PROC[NEAR|FAR]
……
;過程體
過程名
ENDP可選的參數(shù)指定過程的調(diào)用屬性。沒有指定過程屬性,則采用默認(rèn)屬性NEAR屬性(段內(nèi)近調(diào)用)的過程只能被相同代碼段的其他程序調(diào)用FAR屬性(段間遠(yuǎn)調(diào)用)的過程可以被相同或不同代碼段的程序調(diào)用第4章:子程序編寫注意事項⑴子程序要利用過程定義偽指令聲明⑵子程序最后利用RET指令返回主程序,主程序執(zhí)行CALL指令調(diào)用子程序⑶子程序中對堆棧的壓入和彈出操作要成對使用,保持堆棧的平衡⑷子程序開始應(yīng)該保護(hù)使用到的寄存器內(nèi)容,子程序返回前相應(yīng)進(jìn)行恢復(fù)⑸子程序應(yīng)安排在代碼段的主程序之外,最好放在主程序執(zhí)行終止后的位置(返回DOS后、匯編結(jié)束END偽指令前),也可以放在主程序開始執(zhí)行之前的位置第4章:例4.15用dos功能調(diào)用輸出一個字符的子程序
;主程序
movdl,‘?’
;主程序提供顯示字符
calldpchar
;調(diào)用子程序
;子程序:顯示AL中的字符dpchar proc
;過程定義,過程名為dpchar
pushax
;順序入棧,保護(hù)寄存器
pushbx movah,02h ;輸出一個字符功能
int21h
popbx
;逆序出棧,恢復(fù)寄存器
popax
ret
;子程序返回dpchar endp
;過程結(jié)束第4章:例4.15源程序SsesegmentstackDb30dup(?)SseendsCodesegmentAssumecs:code,ss:ssestart:movax,23h
movdl,‘?’;主程序提供顯示字符
calldpchar
;調(diào)用子程序
movax,4c00h int21h主程序部分本程序不需要數(shù)據(jù)段第4章:例4.15源程序(續(xù))dpchar proc
;過程定義,過程名為dpchar pushax ;順序入棧,保護(hù)寄存器
movah,02h ;輸出一個字符功能
int21h
popax;逆序出棧,恢復(fù)寄存器
ret
;子程序返回dpchar endp
;過程結(jié)束
endstart子程序安排在主程序執(zhí)行終止后的位置入口參數(shù):寄存器DL,傳數(shù)值出口參數(shù):無第4章:子程序編寫注意事項(續(xù))⑹子程序允許嵌套和遞歸⑺子程序可以與主程序共用一個數(shù)據(jù)段,也可以使用不同的數(shù)據(jù)段(注意修改DS),還可以在子程序最后設(shè)置數(shù)據(jù)區(qū)(利用CS尋址)⑻子程序的編寫可以很靈活,例如具有多個出口(多個RET指令)和入口,但一定要保證堆棧操作的正確性⑼處理好子程序與主程序間的參數(shù)傳遞問題⑽提供必要的子程序說明信息(子程序名,入口參數(shù),出口參數(shù),功能,程序)第4章:例4.16顯示以“0”結(jié)尾字符串的嵌套子程序
;數(shù)據(jù)段msg db'Well,Imadeit!',0
;代碼段(主程序)
movsi,offsetmsg
;主程序提供顯示字符串
calldpstri
;調(diào)用子程序第4章:例4.16子程序;子程序dpstri:顯示DS:SI指向的字符串(以0結(jié)尾)
dpstri proc pushaxdps1: movdl,[si] ;取顯示字符
incsi cmpdl,0 ;是結(jié)尾,則顯示結(jié)束
jzdps2
calldpchar
;調(diào)用字符顯示子程序
jmpdps1dps2: popax
retdpstri endp;子程序dpchar:入口參數(shù):寄存器DS:SI,傳地址出口參數(shù):無第4章:含數(shù)據(jù)區(qū)的子程序;子程序HTOASC:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼HTOASC proc pushbx movbx,offsetASCII andal,0fh xlatCS:ASCII;換碼:AL←CS:[BX+AL] popbx
ret;數(shù)據(jù)區(qū)ASCII db30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db41h,42h,43h,44h,45h,46hHTOASC endp入口參數(shù):寄存器AL,傳數(shù)值出口參數(shù):寄存器AL,傳數(shù)值第4章:多出口子程序;子程序HTOASC:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼HTOASC proc andal,0fh cmpal,9 jbehtoasc1 addal,37h ;是A~F,加37H ret ;子程序返回htoasc1: addal,30h ;是0~9,加30H
ret ;子程序返回HTOASC endp第4章:參數(shù)傳遞主程序與子程序間一個主要問題是參數(shù)傳遞入口參數(shù)(輸入?yún)?shù)):主程序調(diào)用子程序時,提供給子程序的參數(shù)出口參數(shù)(輸出參數(shù)):子程序執(zhí)行結(jié)束返回給主程序的參數(shù)參數(shù)的具體內(nèi)容傳數(shù)值:傳送數(shù)據(jù)本身傳地址:傳送數(shù)據(jù)的主存地址常用的參數(shù)傳遞方法寄存器共享變量(存儲單元)堆棧第4章:4.6.2用寄存器傳遞參數(shù)最簡單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳遞數(shù)值,而對大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致dpchardpstriHTOASC第4章:4.6.3用共享變量傳遞參數(shù)子程序和主程序使用同一個變量名存取數(shù)據(jù)就是利用共享變量進(jìn)行參數(shù)傳遞如果主程序還要利用原來的變量值,則需要保護(hù)和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)第4章:4.6.4用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個臨時存儲區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級語言混合編程時的常規(guī)方法第4章:4.7宏(Macro)匯編宏是具有宏名的一段匯編語句序列宏需要先定義,然后在程序中進(jìn)行宏調(diào)用由于形式上類似其他指令,所以常稱其為宏指令宏指令實際上是一段代碼序列的縮寫;在匯編時,匯編程序用對應(yīng)的代碼序列替代宏指令因為是在匯編過程中實現(xiàn)的宏展開,所以常稱為宏匯編第4章:1.宏定義宏定義由一對宏匯編偽指令MACRO和ENDM來完成,格式如下:
宏名
MACRO[形參表]
……
;宏定義體
ENDM其中宏名是符合語法的標(biāo)識符,同一源程序中該名字定義唯一。宏定義體中不僅可以是硬指令序列,還可以是偽指令語句序列可選的形參表給出了宏定義中用到的形式參數(shù),每個形式參數(shù)之間用逗號分隔第4章:2.宏調(diào)用宏定義之后就可以使用它,即宏調(diào)用:
宏名
[實參表]宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實體參數(shù);如果有多個參數(shù),應(yīng)按形參順序填入實參,也用逗號分隔在匯編時,宏指令被匯編程序用對應(yīng)的代碼序列替代,這就是宏展開宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時,即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時用位置匹配的實參對形參進(jìn)行取代第4章:宏的實例1dispchar macrochar ;;宏定義
movah,2 ;;宏定義體
movdl,char int21h
endm
… dispchar‘?’ ;宏調(diào)用(宏指令)
…
1
movah,2 ;宏展開
1
movdl,’?’1 int21h第4章:宏的實例2dispmsg macromessage ;;宏定義
movah,9 ;;宏定義體
leadx,message int21h
endm
… dispmsgstring ;宏調(diào)用(宏指令)
…
1
movah,9 ;宏展開
1
leadx,string1 int21h第4章:宏與子程序的比較比較僅是源程序級的簡化:宏調(diào)用在匯編時進(jìn)行程序語句的展開,不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒有改變通過形參、實參結(jié)合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變還是目標(biāo)程序級的簡化:子程序調(diào)用在執(zhí)行時由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù)宏子程序第4章:宏與子程序的比較結(jié)論宏與子程序具有各自的特點,程序員應(yīng)該根據(jù)具體問題選擇使用那種方法通常,當(dāng)程序段較短或要求較快執(zhí)行時,應(yīng)選用宏;當(dāng)程序段較長或為減小目標(biāo)代碼時,要選用子程序比較
結(jié)論宏子程序第4章:教學(xué)要求掌握常量表達(dá)、變量定義及應(yīng)用、變量和標(biāo)號的屬性及操作符掌握匯編語言源程序的編輯、匯編、連接和調(diào)試的開發(fā)方法掌握基本偽指令和操作符:EQU/=;+-*/;DB/DW/DD、?/DUP;ORG/$、OFFSET/SEG/PTR;END;PROC/ENDP第4章:教學(xué)要求(續(xù))掌握基本的順序、分支、循環(huán)和子程序設(shè)計方法熟悉常見程序設(shè)計問題:多精度運算,查表(查代碼、特定值等)、ASCII和BCD代碼轉(zhuǎn)換;數(shù)據(jù)范圍判斷(0~9、A~Z、a~z)、字母大小寫轉(zhuǎn)換;字符串傳送、比較等操作、求最小最大值、數(shù)據(jù)求和、統(tǒng)計字符個數(shù)XLAT指令的功能大小寫字母的比較和轉(zhuǎn)換‘A’=41H=01000001B‘B’=42H…
‘Z’=5AH=0101100
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025民用航空貨運代理合同樣本
- 2025代理工商注冊合同范本
- 2025HR與勞動合同法應(yīng)對
- 2025外包保潔公司合同
- 2025加工制作合同模板
- 2025關(guān)于無紙化的合同管理信息系統(tǒng)
- 2025配送站合同范文
- 2025老廠中心學(xué)校廉租房租賃合同
- 建筑行業(yè)房地產(chǎn)開發(fā)有限公司綜合樓空調(diào)施工組織計劃
- occke抖音協(xié)議號模板
- 工程項目管理(三控三管一協(xié)調(diào))
- 初三家長會語文教師發(fā)言
- 游戲機策劃方案
- 2024消防安全基礎(chǔ)知識培訓(xùn)課件
- 《小兒留置導(dǎo)尿管》課件
- 粵教版科學(xué)四年級上冊全冊試卷(含答案)
- 宮腔鏡診治規(guī)范
- 安全管理計劃指標(biāo)和指標(biāo)體系
- 倉庫物料盤點作業(yè)規(guī)范培訓(xùn)課件
- 六年級《牽手兩代-第二講-乖孩子為什么會厭學(xué)》家長課程培訓(xùn)
- 水稻全生育期營養(yǎng)管理
評論
0/150
提交評論