微機(jī)原理第04章4子程序課件_第1頁
微機(jī)原理第04章4子程序課件_第2頁
微機(jī)原理第04章4子程序課件_第3頁
微機(jī)原理第04章4子程序課件_第4頁
微機(jī)原理第04章4子程序課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)接口技術(shù)

(匯編與接口)第四章匯編語言程序設(shè)計(jì)4主要內(nèi)容:匯編語言源程序的結(jié)構(gòu)匯編語言語句格式偽指令功能調(diào)用匯編語言程序設(shè)計(jì)第4章:4.6子程序設(shè)計(jì)把功能相對(duì)獨(dú)立的程序段單獨(dú)編寫和調(diào)試,作為一個(gè)相對(duì)獨(dú)立的模塊供程序使用,就形成子程序子程序可以實(shí)現(xiàn)源程序的模塊化,可簡化源程序結(jié)構(gòu),可以提高編程效率主程序(調(diào)用程序)需要利用CALL指令調(diào)用子程序(被調(diào)用程序)子程序需要利用RET指令返回主程序第4章:子程序編寫注意事項(xiàng)⑴子程序要利用過程定義偽指令聲明⑵子程序最后利用RET指令返回主程序,主程序執(zhí)行CALL指令調(diào)用子程序⑶子程序中對(duì)堆棧的壓入和彈出操作要成對(duì)使用,保持堆棧的平衡⑷子程序開始應(yīng)該保護(hù)使用到的寄存器內(nèi)容,子程序返回前相應(yīng)進(jìn)行恢復(fù)⑸子程序應(yīng)安排在代碼段的主程序之外,最好放在主程序執(zhí)行終止后的位置(返回DOS后、匯編結(jié)束END偽指令前),也可以放在主程序開始執(zhí)行之前的位置第4章:例4.15用dos功能調(diào)用輸出一個(gè)字符的子程序

;主程序

movdl,‘?’

;主程序提供顯示字符

calldpchar

;調(diào)用子程序

;子程序:顯示AL中的字符dpchar proc

;過程定義,過程名為dpchar

pushax

;順序入棧,保護(hù)寄存器

pushbx movah,02h ;輸出一個(gè)字符功能

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章:子程序編寫注意事項(xiàng)(續(xù))⑹子程序允許嵌套和遞歸⑺子程序可以與主程序共用一個(gè)數(shù)據(jù)段,也可以使用不同的數(shù)據(jù)段(注意修改DS),還可以在子程序最后設(shè)置數(shù)據(jù)區(qū)(利用CS尋址)⑻子程序的編寫可以很靈活,例如具有多個(gè)出口(多個(gè)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章:多出口子程序;子程序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ù)傳遞主程序與子程序間一個(gè)主要問題是參數(shù)傳遞入口參數(shù)(輸入?yún)?shù)):主程序調(diào)用子程序時(shí),提供給子程序的參數(shù)出口參數(shù)(輸出參數(shù)):子程序執(zhí)行結(jié)束返回給主程序的參數(shù)參數(shù)的具體內(nèi)容傳數(shù)值:傳送數(shù)據(jù)本身傳地址:傳送數(shù)據(jù)的主存地址常用的參數(shù)傳遞方法寄存器共享變量(存儲(chǔ)單元)堆棧第4章:4.6.2用寄存器傳遞參數(shù)最簡單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個(gè)數(shù)有限,這種方法對(duì)少量數(shù)據(jù)可以直接傳遞數(shù)值,而對(duì)大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致dpchardpstriHTOASC第4章:4.6.4用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個(gè)臨時(shí)存儲(chǔ)區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級(jí)語言混合編程時(shí)的常規(guī)方法第4章:4.7宏(Macro)匯編宏是具有宏名的一段匯編語句序列宏需要先定義,然后在程序中進(jìn)行宏調(diào)用由于形式上類似其他指令,所以常稱其為宏指令宏指令實(shí)際上是一段代碼序列的縮寫;在匯編時(shí),匯編程序用對(duì)應(yīng)的代碼序列替代宏指令因?yàn)槭窃趨R編過程中實(shí)現(xiàn)的宏展開,所以常稱為宏匯編第4章:1.宏定義宏定義由一對(duì)宏匯編偽指令MACRO和ENDM來完成,格式如下:

宏名

MACRO[形參表]

……

;宏定義體

ENDM其中宏名是符合語法的標(biāo)識(shí)符,同一源程序中該名字定義唯一。宏定義體中不僅可以是硬指令序列,還可以是偽指令語句序列可選的形參表給出了宏定義中用到的形式參數(shù),每個(gè)形式參數(shù)之間用逗號(hào)分隔第4章:宏的實(shí)例1dispchar macrochar ;;宏定義

movah,2 ;;宏定義體

movdl,char int21h

endm

… dispchar‘?’ ;宏調(diào)用(宏指令)

1

movah,2 ;宏展開

1

movdl,’?’1 int21h第4章:宏的實(shí)例2dispmsg macromessage ;;宏定義

movah,9 ;;宏定義體

leadx,message int21h

endm

… dispmsgstring ;宏調(diào)用(宏指令)

1

movah,9 ;宏展開

1

leadx,string1 int21h第4章:宏與子程序的比較比較僅是源程序級(jí)的簡化:宏調(diào)用在匯編時(shí)進(jìn)行程序語句的展開,不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒有改變通過形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變還是目標(biāo)程序級(jí)的簡化:子程序調(diào)用在執(zhí)行時(shí)由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞參數(shù)宏子程序第4章:教學(xué)要求掌握常量表達(dá)、變量定義及應(yīng)用、變量和標(biāo)號(hào)的屬性及操作符掌握匯編語言源程序的編輯、匯編、連接和調(diào)試的開發(fā)方法掌握基本偽指令和操作符:EQU/=;+-*/;DB/DW/DD、?/DUP;ORG/$、OFFSET/SEG/P

溫馨提示

  • 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)論