




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)接口技術(shù)計(jì)算機(jī)接口技術(shù)匯編與接口匯編與接口第四章第四章 匯編言語程序設(shè)計(jì)匯編言語程序設(shè)計(jì)4主要內(nèi)容:主要內(nèi)容:u匯編言語源程序的構(gòu)造匯編言語源程序的構(gòu)造u匯編言語語句格式匯編言語語句格式u偽指令偽指令u功能調(diào)用功能調(diào)用u匯編言語程序設(shè)計(jì)匯編言語程序設(shè)計(jì)第第4 4章:章:4.6 4.6 子程序設(shè)計(jì)子程序設(shè)計(jì) u把功能相對獨(dú)立的程序段單獨(dú)編寫和調(diào)把功能相對獨(dú)立的程序段單獨(dú)編寫和調(diào)試,作為一個相對獨(dú)立的模塊供程序運(yùn)試,作為一個相對獨(dú)立的模塊供程序運(yùn)用,就構(gòu)成子程序用,就構(gòu)成子程序u子程序可以實(shí)現(xiàn)源程序的模塊化,可簡子程序可以實(shí)現(xiàn)源程序的模塊化,可簡化源程序構(gòu)造,可以提高編程效率化源程序構(gòu)造,可
2、以提高編程效率u主程序調(diào)用程序需求利用主程序調(diào)用程序需求利用CALL指令指令調(diào)用子程序被調(diào)用程序調(diào)用子程序被調(diào)用程序u子程序需求利用子程序需求利用RET指令前往主程序指令前往主程序第第4 4章:章:4.6.1 4.6.1 過程定義和過程定義和子程序編寫子程序編寫u匯編言語中,子程序要用一對過程偽指令匯編言語中,子程序要用一對過程偽指令PROC和和ENDP聲明,格式如下:聲明,格式如下:u過程名過程名PROC NEAR|FARu;過程體;過程體u過程名過程名ENDPu可選的參數(shù)指定過程的調(diào)用屬性。沒有指定過可選的參數(shù)指定過程的調(diào)用屬性。沒有指定過程屬性,那么采用默許屬性程屬性,那么采用默許屬性u
3、NEAR屬性段內(nèi)近調(diào)用的過程只能被一樣屬性段內(nèi)近調(diào)用的過程只能被一樣代碼段的其他程序調(diào)用代碼段的其他程序調(diào)用uFAR屬性段間遠(yuǎn)調(diào)用的過程可以被一樣或?qū)傩远伍g遠(yuǎn)調(diào)用的過程可以被一樣或不同代碼段的程序調(diào)用不同代碼段的程序調(diào)用第第4 4章:子程序編寫本卷須知章:子程序編寫本卷須知子程序要利用過程定義偽指令聲明子程序要利用過程定義偽指令聲明子程序最后利用子程序最后利用RET指令前往主程序,主程序指令前往主程序,主程序執(zhí)行執(zhí)行CALL指令調(diào)用子程序指令調(diào)用子程序子程序中對堆棧的壓入和彈出操作要成對運(yùn)用,子程序中對堆棧的壓入和彈出操作要成對運(yùn)用,堅(jiān)持堆棧的平衡堅(jiān)持堆棧的平衡子程序開場應(yīng)該維護(hù)運(yùn)用到的存放器
4、內(nèi)容,子子程序開場應(yīng)該維護(hù)運(yùn)用到的存放器內(nèi)容,子程序前往前相應(yīng)進(jìn)展恢復(fù)程序前往前相應(yīng)進(jìn)展恢復(fù)子程序應(yīng)安排在代碼段的主程序之外,最好放子程序應(yīng)安排在代碼段的主程序之外,最好放在主程序執(zhí)行終止后的位置前往在主程序執(zhí)行終止后的位置前往DOS后、匯后、匯編終了編終了END偽指令前,也可以放在主程序開偽指令前,也可以放在主程序開場執(zhí)行之前的位置場執(zhí)行之前的位置第第4 4章:例章:例4.15 4.15 用用dosdos功能調(diào)功能調(diào)用輸出一個字符的子程序用輸出一個字符的子程序;主程序;主程序mov dl,?;主程序提供顯示字符;主程序提供顯示字符call dpchar;調(diào)用子程序;調(diào)用子程序;子程序:顯示;
5、子程序:顯示AL中的字符中的字符dpchar proc;過程定義,過程名為;過程定義,過程名為dpcharpush ax;順序入棧,維護(hù)存放器;順序入棧,維護(hù)存放器push bxmov ah,02h ;輸出一個字符功能;輸出一個字符功能int 21hpop bx;逆序出棧,恢復(fù)存放器;逆序出棧,恢復(fù)存放器pop axret;子程序前往;子程序前往dpchar endp;過程終了;過程終了第第4 4章:例章:例4.154.15源程序源程序Sse segment stackDb 30 dup(?)Sse endsCode segmentAssume cs:code,ss:ssestart: mov
6、 ax,23hmov dl,? ;主程序提供顯示字符;主程序提供顯示字符call dpchar;調(diào)用子程序;調(diào)用子程序mov ax,4c00hint 21h主程序部分主程序部分本程序不需求數(shù)據(jù)段本程序不需求數(shù)據(jù)段第第4 4章:例章:例4.154.15源程序續(xù)源程序續(xù)dpchar proc;過程定義,過程名為;過程定義,過程名為dpcharpush ax;順序入棧,維護(hù)存放器;順序入棧,維護(hù)存放器mov ah,02h;輸出一個字符功能;輸出一個字符功能int 21hpop ax ;逆序出棧,恢復(fù)存放器;逆序出棧,恢復(fù)存放器ret;子程序前往;子程序前往dpchar endp;過程終了;過程終了e
7、nd start子程序安排在主程序執(zhí)行終止后的位置子程序安排在主程序執(zhí)行終止后的位置入口參數(shù):存放器入口參數(shù):存放器DL,傳數(shù)值,傳數(shù)值出口參數(shù):無出口參數(shù):無第第4 4章:子程序編寫本卷須知續(xù)章:子程序編寫本卷須知續(xù)子程序允許嵌套和遞歸子程序允許嵌套和遞歸子程序可以與主程序共用一個數(shù)據(jù)段,也可以子程序可以與主程序共用一個數(shù)據(jù)段,也可以運(yùn)用不同的數(shù)據(jù)段留意修正運(yùn)用不同的數(shù)據(jù)段留意修正DS,還可以在,還可以在子程序最后設(shè)置數(shù)據(jù)區(qū)利用子程序最后設(shè)置數(shù)據(jù)區(qū)利用CS尋址尋址子程序的編寫可以很靈敏,例如具有多個出口子程序的編寫可以很靈敏,例如具有多個出口多個多個RET指令和入口,但一定要保證堆棧指令和入
8、口,但一定要保證堆棧操作的正確性操作的正確性處置好子程序與主程序間的參數(shù)傳送問題處置好子程序與主程序間的參數(shù)傳送問題提供必要的子程序闡明信息子程序名,入口提供必要的子程序闡明信息子程序名,入口參數(shù),出口參數(shù),功能,程序參數(shù),出口參數(shù),功能,程序第第4 4章:例章:例4.16 4.16 顯示以顯示以“0 0結(jié)尾字符串的嵌套子程序結(jié)尾字符串的嵌套子程序;數(shù)據(jù)段;數(shù)據(jù)段msgdb Well, I made it !,0;代碼段主程序;代碼段主程序mov si,offset msg;主程序提供顯示字符串;主程序提供顯示字符串call dpstri;調(diào)用子程序;調(diào)用子程序第第4 4章:例章:例4.16
9、4.16 子程序子程序;子程序;子程序dpstri:顯示:顯示DS:SI指向的字符串以指向的字符串以0結(jié)尾結(jié)尾 dpstri procpush axdps1:mov dl,si;取顯示字符;取顯示字符inc sicmp dl,0;是結(jié)尾,那么顯示終了;是結(jié)尾,那么顯示終了jz dps2call dpchar;調(diào)用字符顯示子程序;調(diào)用字符顯示子程序jmp dps1dps2:pop axretdpstri endp;子程序;子程序dpchar:入口參數(shù):存放器入口參數(shù):存放器DS:SI,傳地址,傳地址出口參數(shù):無出口參數(shù):無第第4 4章:含數(shù)據(jù)區(qū)的子程序章:含數(shù)據(jù)區(qū)的子程序;子程序;子程序HTOA
10、SC:十六進(jìn)制數(shù)轉(zhuǎn)換為:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼碼 HTOASCprocpush bxmov bx,offset ASCIIand al,0fhxlat CS:ASCII;換碼:;換碼:ALCS:BXALpop bxret;數(shù)據(jù)區(qū);數(shù)據(jù)區(qū)ASCIIdb 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hHTOASCendp入口參數(shù):存放器入口參數(shù):存放器AL,傳數(shù)值,傳數(shù)值出口參數(shù):存放器出口參數(shù):存放器AL,傳數(shù)值,傳數(shù)值第第4 4章:多出口子程序章:多出口子程序;子程序;子程序HTOASC:十六進(jìn)制數(shù)轉(zhuǎn)換為
11、:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼碼 HTOASCprocand al,0fhcmp al,9jbe htoasc1add al,37h;是;是A F,加,加37Hret;子程序前往;子程序前往htoasc1:add al,30h;是;是0 9,加,加30Hret;子程序前往;子程序前往HTOASCendp第第4 4章:參數(shù)傳送章:參數(shù)傳送u主程序與子程序間一個主要問題是參數(shù)傳送主程序與子程序間一個主要問題是參數(shù)傳送u入口參數(shù)輸入?yún)?shù)入口參數(shù)輸入?yún)?shù) :主程序調(diào)用子程序:主程序調(diào)用子程序時,提供應(yīng)子程序的參數(shù)時,提供應(yīng)子程序的參數(shù)u出口參數(shù)輸出參數(shù)出口參數(shù)輸出參數(shù) :子程序執(zhí)行終了前:子程序執(zhí)行終
12、了前往給主程序的參數(shù)往給主程序的參數(shù)u參數(shù)的詳細(xì)內(nèi)容參數(shù)的詳細(xì)內(nèi)容u傳數(shù)值:傳送數(shù)據(jù)本身傳數(shù)值:傳送數(shù)據(jù)本身u傳地址:傳送數(shù)據(jù)的主存地址傳地址:傳送數(shù)據(jù)的主存地址u常用的參數(shù)傳送方法常用的參數(shù)傳送方法u存放器存放器u共享變量共享變量(存儲單元存儲單元)u堆棧堆棧第第4 4章:章:4.6.2 4.6.2 用存放器傳送參數(shù)用存放器傳送參數(shù)u最簡單和常用的參數(shù)傳送方法是經(jīng)過存放器,最簡單和常用的參數(shù)傳送方法是經(jīng)過存放器,只需把參數(shù)存于商定的存放器中就可以了只需把參數(shù)存于商定的存放器中就可以了u由于通用存放器個數(shù)有限,這種方法對少量數(shù)由于通用存放器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳送數(shù)值,而對大量
13、數(shù)據(jù)只能傳送據(jù)可以直接傳送數(shù)值,而對大量數(shù)據(jù)只能傳送地址地址u采用存放器傳送參數(shù),留意帶有出口參數(shù)的存采用存放器傳送參數(shù),留意帶有出口參數(shù)的存放器不能維護(hù)和恢復(fù),帶有入口參數(shù)的存放器放器不能維護(hù)和恢復(fù),帶有入口參數(shù)的存放器可以維護(hù)、也可以不維護(hù),但最好可以堅(jiān)持一可以維護(hù)、也可以不維護(hù),但最好可以堅(jiān)持一致致dpchardpstriHTOASC第第4 4章:章:4.6.3 4.6.3 用共享變量傳送參數(shù)用共享變量傳送參數(shù)u子程序和主程序運(yùn)用同一個變量名子程序和主程序運(yùn)用同一個變量名存取數(shù)據(jù)就是利用共享變量進(jìn)展參存取數(shù)據(jù)就是利用共享變量進(jìn)展參數(shù)傳送數(shù)傳送u假設(shè)主程序還要利用原來的變量值,假設(shè)主程序還
14、要利用原來的變量值,那么需求維護(hù)和恢復(fù)那么需求維護(hù)和恢復(fù)u利用共享變量傳送參數(shù),子程序的利用共享變量傳送參數(shù),子程序的通用性較差,但特別適宜在多個程通用性較差,但特別適宜在多個程序段間、尤其在不同的程序模塊間序段間、尤其在不同的程序模塊間傳送數(shù)據(jù)傳送數(shù)據(jù)第第4 4章:章:4.6.4 4.6.4 用堆棧傳送參數(shù)用堆棧傳送參數(shù)u參數(shù)傳送還可以經(jīng)過堆棧這個暫時存儲參數(shù)傳送還可以經(jīng)過堆棧這個暫時存儲區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨⑿驈亩褩V腥〕鰠?shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧獲得它們數(shù)壓入堆棧,主程序彈出堆棧獲得它們u
15、采用堆棧傳送參數(shù)是程式化的,它是編采用堆棧傳送參數(shù)是程式化的,它是編譯程序處置參數(shù)傳送、以及匯編言語與譯程序處置參數(shù)傳送、以及匯編言語與高級言語混合編程時的常規(guī)方法高級言語混合編程時的常規(guī)方法第第4 4章:章:4.7 4.7 宏宏MacroMacro匯編匯編u宏是具有宏名的一段匯編語句序列宏是具有宏名的一段匯編語句序列u宏需求先定義,然后在程序中進(jìn)展宏調(diào)用宏需求先定義,然后在程序中進(jìn)展宏調(diào)用u由于方式上類似其他指令,所以常稱其為宏指由于方式上類似其他指令,所以常稱其為宏指令令u宏指令實(shí)踐上是一段代碼序列的縮寫;在匯編宏指令實(shí)踐上是一段代碼序列的縮寫;在匯編時,匯編程序用對應(yīng)的代碼序列替代宏指令
16、時,匯編程序用對應(yīng)的代碼序列替代宏指令u由于是在匯編過程中實(shí)現(xiàn)的宏展開,所以常稱由于是在匯編過程中實(shí)現(xiàn)的宏展開,所以常稱為宏匯編為宏匯編第第4 4章:章:1. 1. 宏定義宏定義 u宏定義由一對宏匯編偽指令宏定義由一對宏匯編偽指令MACRO和和ENDM來完成,格式如下:來完成,格式如下:u宏名宏名MACRO 形參表形參表u ;宏定義體;宏定義體uENDMu其中宏名是符合語法的標(biāo)識符,同一源程序中其中宏名是符合語法的標(biāo)識符,同一源程序中該名字定義獨(dú)一。宏定義體中不僅可以是硬指該名字定義獨(dú)一。宏定義體中不僅可以是硬指令序列,還可以是偽指令語句序列令序列,還可以是偽指令語句序列u可選的形參表給出了宏
17、定義中用到的方式參數(shù),可選的形參表給出了宏定義中用到的方式參數(shù),每個方式參數(shù)之間用逗號分隔每個方式參數(shù)之間用逗號分隔第第4 4章:章:2. 2. 宏調(diào)用宏調(diào)用u宏定義之后就可以運(yùn)用它,即宏調(diào)用:宏定義之后就可以運(yùn)用它,即宏調(diào)用:u宏名宏名 實(shí)參表實(shí)參表u宏調(diào)用的格式同普通指令一樣:在運(yùn)用宏指令宏調(diào)用的格式同普通指令一樣:在運(yùn)用宏指令的位置寫下宏名,后跟實(shí)體參數(shù);假設(shè)有多個的位置寫下宏名,后跟實(shí)體參數(shù);假設(shè)有多個參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號分隔參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號分隔u在匯編時,宏指令被匯編程序用對應(yīng)的代碼序在匯編時,宏指令被匯編程序用對應(yīng)的代碼序列替代,這就是宏展開列替
18、代,這就是宏展開u宏展開的詳細(xì)過程是:當(dāng)匯編程序掃描源程序宏展開的詳細(xì)過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時,即用相應(yīng)的宏定義遇到已有定義的宏調(diào)用時,即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時用位置匹配體完全替代源程序的宏指令,同時用位置匹配的實(shí)參對形參進(jìn)展取代的實(shí)參對形參進(jìn)展取代第第4 4章:宏的實(shí)例章:宏的實(shí)例1 1dispchar macro char;宏定義宏定義mov ah,2;宏定義體宏定義體mov dl,charint 21hendmdispchar ?;宏調(diào)用宏指令宏調(diào)用宏指令 1mov ah,2;宏展開宏展開 1mov dl,? 1int 21h第第4 4章:
19、宏的實(shí)例章:宏的實(shí)例2 2dispmsg macro message ;宏定義宏定義mov ah,9;宏定義體宏定義體lea dx,messageint 21hendmdispmsg string ;宏調(diào)用宏指令宏調(diào)用宏指令 1mov ah,9;宏展開宏展開 1lea dx,string 1int 21h第第4 4章:宏與子程序的比較章:宏與子程序的比較比比較較u僅是源程序級的簡化:宏調(diào)用在匯編時進(jìn)展程序語句的展開,不需求前往;不減小目的程序,執(zhí)行速度沒有改動u經(jīng)過形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳送,簡捷直觀、靈敏多變u還是目的程序級的簡還是目的程序級的簡化:子程序調(diào)用在執(zhí)化:子程序調(diào)用在執(zhí)行時由行時
20、由CALLCALL指令轉(zhuǎn)向、指令轉(zhuǎn)向、RETRET指令前往;構(gòu)成的指令前往;構(gòu)成的目的代碼較短,執(zhí)行目的代碼較短,執(zhí)行速度減慢速度減慢u需求利用存放器、存需求利用存放器、存儲單元或堆棧等傳送儲單元或堆棧等傳送參數(shù)參數(shù)宏宏子程序子程序第第4 4章:宏與子程序的比較章:宏與子程序的比較結(jié)論結(jié)論u宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)詳細(xì)問題選擇運(yùn)用那種方法u通常,當(dāng)程序段較短或要求較快執(zhí)行時,應(yīng)選用宏;當(dāng)程序段較長或?yàn)闇p小目的代碼時,要選用子程序比比較較結(jié)結(jié)論論宏宏子程序子程序第第4 4章:教學(xué)要求章:教學(xué)要求u掌握常量表達(dá)、變量定義及運(yùn)用、變量掌握常量表達(dá)、變量定義及運(yùn)用、變量和標(biāo)號的屬性及操作
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術(shù)課題申報(bào)書項(xiàng)目類型
- 合建房屋合同范本
- 廠房清潔報(bào)價(jià)合同范本
- 課題立項(xiàng)申報(bào)計(jì)劃書范文
- 合同權(quán)益轉(zhuǎn)讓合同范例
- 合同范本押金退回
- 課題申報(bào)書哪里有
- 品牌宣傳服務(wù)合同范本
- 理療課題申報(bào)書格式范文
- 哪里醫(yī)學(xué)課題申報(bào)書
- 醫(yī)學(xué)影像檢查技術(shù)復(fù)習(xí)題(含參考答案)
- 意外保險(xiǎn)理賠申請書
- 2025春季學(xué)期信息科技開學(xué)第一課 課件
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑構(gòu)造》模擬練習(xí)試題庫(含答案)
- 撤銷失信名單申請書
- 2024年泰州職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 2024年05月青海青海省農(nóng)商銀行(農(nóng)信社)系統(tǒng)招考專業(yè)人才筆試歷年參考題庫附帶答案詳解
- 貴州黔源電力股份有限公司招聘筆試沖刺題2025
- 2025年江蘇省環(huán)保集團(tuán)招聘筆試參考題庫含答案解析
- 新修訂中華人民共和國畜牧法全文解讀學(xué)習(xí)
- 主題活動一《我調(diào)查》(教學(xué)實(shí)錄)-2023-2024學(xué)年二年級下冊綜合實(shí)踐活動內(nèi)蒙古版
評論
0/150
提交評論