




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語言第十章模塊化程序設(shè)計第1頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四把源程序分放在幾個文本文件中,在匯編時通過包含偽指令I(lǐng)NCLUDE結(jié)合成一體INCLUDE 文件名可將常用的子程序形成.ASM匯編語言源文件可將常用的宏定義存放在.MAC宏庫文件中可將常量定義、聲明語句組織在.INC包含文件中例4.21a 宏庫文件 lt421a.mac 主程序文件 lt421a.asm 子程序文件 sub421a.asm10.1 源程序文件的包含1第2頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四dispcharmacro char;顯示char字符mov dl,charmov
2、ah,2int 21hendmdispmsgmacro message;顯示message字符串mov dx,offset messagemov ah,9int 21hendmLt421a.mac第3頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四include lt421a.mac.dispmsg msg1;提示輸入數(shù)據(jù)mov bx,offset bufcall input;數(shù)據(jù)輸入cmp cx,0je start4;沒有輸入數(shù)據(jù)則退出mov count,cx.;顯示輸入的數(shù)據(jù).;數(shù)據(jù)排序.;顯示經(jīng)排序后的數(shù)據(jù)start4:.exit 0include sub421a.asmendL
3、t421a.asm第4頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四子程序源文件有3個子程序ALdisp;顯示2位16進(jìn)制數(shù)子程序(例4.10)sorting;排序子程序(例4.8)input;鍵盤輸入子程序還包含一個宏convert;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)sub421a.asm讓我們重點(diǎn)分析鍵盤輸入子程序 input第5頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四;鍵盤輸入子程序;入口參數(shù):ds:bx=存放數(shù)據(jù)的緩沖區(qū);出口參數(shù):cx=數(shù)據(jù)個數(shù)inputprocpush axpush dxxor cx,cx;數(shù)據(jù)個數(shù)清0input01:xor dx,
4、dx;輸入字符清0input02:mov ah,1;鍵盤輸入一個字符int 21hinput之一繼續(xù):input之二第6頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四input10:cmp al,0dhje input30;是回車,結(jié)束整個數(shù)據(jù)的輸入cmp al, je input20;是空格和逗號,確認(rèn)輸入了一個數(shù)據(jù)cmp al,je input20cmp al,08hje input17;是退格,丟棄本次輸入的數(shù)據(jù),出錯input之二繼續(xù):input之三第7頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四cmp al,0;有效數(shù)字判斷(圖4.5b)jb input17;小
5、于0,不是有效數(shù)字,出錯cmp al,fja input17;大于f,不是有效數(shù)字cmp al,ajb input11sub al,20h;af轉(zhuǎn)換成大寫AFjmp input12input11:cmp al,Fja input17;字符小于a、大于F,出錯cmp al,Ajae input12;是AF,有效字符cmp al,9ja input17;是09,有效字符input之三繼續(xù):input之四第8頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四input12:cmp dl,0;有效字符的處理jne input13mov dl,al;dl=0,輸入了一個數(shù)據(jù)的低位,則dlaljmp
6、 input02;轉(zhuǎn)到字符輸入input13:cmp dh,0jne input17;dl0,dh0輸入3位數(shù)據(jù),出錯mov dh,dl;dl0,dh0輸入了一個數(shù)據(jù)的高位mov dl,al;dhdl,dlaljmp input02;轉(zhuǎn)到字符輸入input之四繼續(xù):input之五第9頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四input17:mov dl,7;輸入錯誤處理mov ah,2int 21hmov dl,?mov ah,2int 21hjmp input01;轉(zhuǎn)到輸入一個數(shù)據(jù)input之五繼續(xù):input之六第10頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四;
7、轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖4.5c)input20:convertjmp input01;轉(zhuǎn)到輸入一個數(shù)據(jù)input30:convertpop dxpop axret;返回,出口參數(shù)已設(shè)定inputendpinput之六繼續(xù):convert之一第11頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)(圖4.5c)convertmacrolocal input21,input22local input24,input25cmp dl,0;dl=0,沒有要轉(zhuǎn)換的數(shù)據(jù),退出je input25convert之一繼續(xù):convert之二第12頁,共32頁,
8、2022年,5月20日,8點(diǎn)49分,星期四cmp dl,9jbe input21sub dl,7;字符AF,則減7input21:and dl,0fh;轉(zhuǎn)換低位cmp dh,0;dh=0,沒有高位數(shù)據(jù)je input24cmp dh,9jbe input22sub dh,7input22:shl dh,1shl dh,1shl dh,1shl dh,1;轉(zhuǎn)換高位or dl,dh;合并高、低位convert之二繼續(xù):convert之三第13頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四源文件包含的操作步驟: 分別編輯生成各個文件 匯編、連接主程序文件input24:mov bx,dl;
9、存入緩沖區(qū)inc bxinc cx;數(shù)據(jù)加1input25:endmconvert之三第14頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四把常用子程序?qū)懗瑟?dú)立的源程序文件,單獨(dú)匯編,形成子程序的目標(biāo)文件.OBJ主程序也經(jīng)過獨(dú)立匯編之后形成目標(biāo)文件連接程序?qū)⑺心繕?biāo)文件連接起來,最終產(chǎn)生可執(zhí)行文件需要遵循的原則: 聲明共用的變量、過程等 實(shí)現(xiàn)正確的段組合 處理好參數(shù)傳遞問題10.2 目標(biāo)代碼文件的連接2第15頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四聲明共用的變量、過程各個模塊間共用的變量、過程等要說明PUBLIC 標(biāo)識符 ,標(biāo)識符.;定義標(biāo)識符的模塊使用EXTERN 標(biāo)
10、識符:類型 ,標(biāo)識符:類型.;調(diào)用標(biāo)識符的模塊使用標(biāo)識符是變量名、過程名等類型是byte / word / dword(變量)或near / far(過程)在一個源程序中,public/extern語句可以有多條各模塊間的public/extern偽指令要互相配對,并且指明的類型互相一致第16頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四實(shí)現(xiàn)正確的段組合子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量采用簡化段定義格式,只要采用相同的存儲模式,容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用(near類型),各自定義的段名、類別必須相同,組合類型都是publ
11、ic。實(shí)際的程序開發(fā)中,各個模塊往往由不同的程序員完成,不易實(shí)現(xiàn)段同名或類別相同,所以索性定義成遠(yuǎn)調(diào)用(far類型)定義數(shù)據(jù)段時,同樣也要注意這個問題。當(dāng)各個模塊的數(shù)據(jù)段不同時,要正確設(shè)置數(shù)據(jù)段DS寄存器的段基地址第17頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四處理好參數(shù)傳遞問題少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲地址還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量這些也是子程序間的參數(shù)傳遞方法第18頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四例4.21b主程序lt421b.as
12、m并入宏定義子程序文件sub421b.asm,要加上段定義語句、聲明語句等,但不需要起始點(diǎn)和結(jié)束點(diǎn)模塊連接的操作步驟: 分別編輯生成各個文件 分別匯編各個文件 連接各個目標(biāo)文件,形成可執(zhí)行文件第19頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.;宏定義.codepublic count;定義count共用extern ALdisp:near,sorting:near,input:far;聲明其他模塊中的子程序.startup.exit 0;去掉(lt421a.asm中的)包含語句endLt421b.asm第20頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model s
13、mall;定義同樣的存儲模式extern count:word;在其他模塊定義了字變量count.code;子程序在代碼段中public aldisp,sorting,input;3個子程序是共用的Aldispproc;仍然作為近調(diào)用sortingproc;仍然作為近調(diào)用inputproc far;修改為遠(yuǎn)調(diào)用.mov count,cx;提供出口參數(shù).inputendpend;結(jié)束匯編sub421b.asm第21頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四把常用子程序?qū)懗瑟?dú)立的源文件,單獨(dú)匯編形成OBJ文件后,存入子程序庫主程序也單獨(dú)匯編形成OBJ文件主程序連接時,調(diào)入子程序庫中的
14、子程序模塊,產(chǎn)生最終的可執(zhí)行文件例 主程序文件 lt421c.asm 子程序文件 sub421c1.asm 子程序文件 sub421c2.asm 子程序文件 sub421c3.asm10.3 子程序庫的調(diào)入3第22頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四子程序庫子程序庫文件(.LIB)是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信息存入庫的子程序的編寫與目標(biāo)文件連接方法中的要求一樣,只是為方便調(diào)用,更加嚴(yán)格子程序文件編寫完成后,匯編形成目標(biāo)文件;然后利用庫管理工具程序LIB.EXE,把子程序目標(biāo)模塊逐一加入到庫中LIB 庫文件名 + 子程序目標(biāo)文件名庫管理程
15、序LIB幫助創(chuàng)建、組織和維護(hù)子程序模塊庫,例如增加、刪除、替換、合并庫文件等第4章第23頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.;宏定義.codeextern ALdisp:near,sorting:near,input:near;聲明其他模塊中的子程序.startup.exit 0endLt421c.asm第24頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model small.codepublic aldispAldispproc.Aldispendpendsub421c1.asm第25頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model s
16、mall.codepublic sortingsortingproc.sortingendpendsub421c2.asm第26頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model small.codepublic inputinputproc.inputendpendsub421c3.asm庫文件調(diào)入的操作步驟: 分別編輯生成各個文件 分別匯編各個文件 用庫管理文件,將子程序模塊添加到庫文件(.LIB)中 連接主程序,提供庫文件,形成可執(zhí)行文件第27頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四補(bǔ)充例題將子程序補(bǔ)充例題13的子程序編寫成模塊,供主程序調(diào)用實(shí)現(xiàn)功能:從
17、鍵盤輸入有符號10進(jìn)制數(shù),求它們的平均值,然后輸出源程序文件進(jìn)行簡單修改主程序文件子程序文件利用目標(biāo)代碼文件的連接形成可執(zhí)行文件第28頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model smallextern read:near,write:near,mean:near;外部子程序public wtemp;變量共用.stack.data;數(shù)據(jù)定義.code;輸入、計算和輸出end主程序文件第29頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四.model smallpublic read,write,mean;子程序共用extern wtemp:word;外部變量.c
18、ode;代碼段readproc;輸入子程序readwriteproc;輸出子程序writemeanproc;計算平均值子程序meanend子程序文件第30頁,共32頁,2022年,5月20日,8點(diǎn)49分,星期四第一章 基礎(chǔ)知識匯編語言和C語言編程 C/C+語言是一個被廣泛使用的程序設(shè)計語言,它不僅具有良好的高級語言特征,而且還具有一些低級語言的特點(diǎn),如:寄存器變量、位操作等。所以,C語言的程序與匯編語言程序之間能很平滑地銜接。另外,目前主要的C語言程序開發(fā)環(huán)境,如:Turbo C/C+、Borland C/C+等,也都提供了很好的混合編程手段。一、匯編指令的嵌入 為了提高C語言程序內(nèi)某特殊功能段的處理效率,我們可以在其源程序中嵌入一段匯編語言程序段。這樣做,雖然能達(dá)到提高了程序處理效率的目的,但它無疑以喪失源程序的可移植性為代價。所以,當(dāng)想用C語言和匯編語言混合編程時,程序員需要權(quán)衡采用這種方法的利與弊。 在C語言中,嵌入?yún)R編語言的語法如下(*): asm 注意:這里的分號;不是匯編語言中起注釋作用的分號,而是作為語句的分隔符。 若C語言源程序中嵌入一條匯編語句,則可按下列方式來做: asm mov ax, data 若要嵌入一組匯編
溫馨提示
- 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年度智能制造行業(yè)勞動合同解除及保密協(xié)議模板
- 2025年度購物中心店面轉(zhuǎn)租與租賃期滿續(xù)約合同
- 天津市2025年度租賃房屋裝修與維修責(zé)任協(xié)議
- 二零二五年度美容院轉(zhuǎn)讓合同附帶技術(shù)培訓(xùn)與售后服務(wù)
- 二零二五年度專業(yè)培訓(xùn)機(jī)構(gòu)教師團(tuán)隊建設(shè)與培養(yǎng)合同
- 2025年遂寧考從業(yè)資格證貨運(yùn)試題
- 2025年銀川貨運(yùn)從業(yè)資格證考試題目及答案解析
- 2025年商洛b2貨運(yùn)資格證全題
- 2025年太原貨運(yùn)從業(yè)資格考試模擬考試題及答案大全
- 2025年十堰a2駕駛證貨運(yùn)從業(yè)資格證模擬考試
- Adobe-Illustrator-(Ai)基礎(chǔ)教程
- 沒頭腦和不高興-竇桂梅.精選優(yōu)秀PPT課件
- 鋼棧橋計算書(excel版)
- 租賃合同審批表
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 巖石堅固性和穩(wěn)定性分級表
- 譯林初中英語教材目錄
- 律師事務(wù)所函[]第號
- 物業(yè)交付后工程維修工作機(jī)制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- 新形勢下如何做一名合格的鄉(xiāng)鎮(zhèn)干部之我見
評論
0/150
提交評論