




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、,將程序分段、采用子程序或宏結(jié)構(gòu)都是進(jìn)行模塊化程序設(shè)計 本節(jié)介紹開發(fā)大型程序時采用的方法: 源程序文件的包含 目標(biāo)模塊連接 子程序庫,第十章 模塊化程序設(shè)計,把源程序分放在幾個文本文件中,在匯編時通過包含偽指令I(lǐng)NCLUDE結(jié)合成一體 INCLUDE 文件名 可將常用的子程序形成.ASM匯編語言源文件 可將常用的宏定義存放在.MAC宏庫文件中 可將常量定義、聲明語句組織在.INC包含文件中 例4.21a 宏庫文件 lt421a.mac 主程序文件 lt421a.asm 子程序文件 sub421a.asm,10.1 源程序文件的包含,dispcharmacro char;顯示char字符 mov
2、 dl,char mov ah,2 int 21h endm dispmsgmacro message;顯示message字符串 mov dx,offset message mov ah,9 int 21h endm,Lt421a.mac,include lt421a.mac . dispmsg msg1;提示輸入數(shù)據(jù) mov bx,offset buf call input;數(shù)據(jù)輸入 cmp cx,0 je start4;沒有輸入數(shù)據(jù)則退出 mov count,cx .;顯示輸入的數(shù)據(jù) .;數(shù)據(jù)排序 .;顯示經(jīng)排序后的數(shù)據(jù) start4:.exit 0 include sub421a.asm
3、 end,Lt421a.asm,子程序源文件有3個子程序 ALdisp;顯示2位16進(jìn)制數(shù)子程序(例4.10) sorting;排序子程序(例4.8) input;鍵盤輸入子程序 還包含一個宏 convert;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù),sub421a.asm,讓我們重點分析鍵盤輸入子程序 input,;鍵盤輸入子程序 ;入口參數(shù):ds:bx=存放數(shù)據(jù)的緩沖區(qū) ;出口參數(shù):cx=數(shù)據(jù)個數(shù) inputproc push ax push dx xor cx,cx;數(shù)據(jù)個數(shù)清0 input01:xor dx,dx;輸入字符清0 input02:mov ah,1;鍵盤輸入一個字符 in
4、t 21h,input之一,input10:cmp al,0dh je input30 ;是回車,結(jié)束整個數(shù)據(jù)的輸入 cmp al, je input20 ;是空格和逗號,確認(rèn)輸入了一個數(shù)據(jù) cmp al, je input20 cmp al,08h je input17 ;是退格,丟棄本次輸入的數(shù)據(jù),出錯,input之二,cmp al,0;有效數(shù)字判斷(圖4.5b) jb input17;小于0,不是有效數(shù)字,出錯 cmp al,f ja input17;大于f,不是有效數(shù)字 cmp al,a jb input11 sub al,20h;af轉(zhuǎn)換成大寫AF jmp input12 input
5、11:cmp al,F ja input17;字符小于a、大于F,出錯 cmp al,A jae input12;是AF,有效字符 cmp al,9 ja input17;是09,有效字符,input之三,input12:cmp dl,0;有效字符的處理 jne input13 mov dl,al ;dl=0,輸入了一個數(shù)據(jù)的低位,則dlal jmp input02;轉(zhuǎn)到字符輸入 input13:cmp dh,0 jne input17 ;dl0,dh0輸入3位數(shù)據(jù),出錯 mov dh,dl ;dl0,dh0輸入了一個數(shù)據(jù)的高位 mov dl,al;dhdl,dlal jmp input02;
6、轉(zhuǎn)到字符輸入,input之四,input17:mov dl,7;輸入錯誤處理 mov ah,2 int 21h mov dl,? mov ah,2 int 21h jmp input01;轉(zhuǎn)到輸入一個數(shù)據(jù),input之五,;轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖4.5c) input20:convert jmp input01;轉(zhuǎn)到輸入一個數(shù)據(jù) input30:convert pop dx pop ax ret;返回,出口參數(shù)已設(shè)定 inputendp,input之六,;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)(圖4.5c) convertmacro local input21,input22 local
7、input24,input25 cmp dl,0 ;dl=0,沒有要轉(zhuǎn)換的數(shù)據(jù),退出 je input25,convert之一,cmp dl,9 jbe input21 sub dl,7;字符AF,則減7 input21:and dl,0fh;轉(zhuǎn)換低位 cmp dh,0;dh=0,沒有高位數(shù)據(jù) je input24 cmp dh,9 jbe input22 sub dh,7 input22:shl dh,1 shl dh,1 shl dh,1 shl dh,1;轉(zhuǎn)換高位 or dl,dh;合并高、低位,convert之二,源文件包含的操作步驟: 分別編輯生成各個文件 匯編、連接主程序文件,in
8、put24:mov bx,dl;存入緩沖區(qū) inc bx inc cx;數(shù)據(jù)加1 input25: endm,convert之三,把常用子程序?qū)懗瑟毩⒌脑闯绦蛭募瑔为殔R編,形成子程序的目標(biāo)文件.OBJ 主程序也經(jīng)過獨立匯編之后形成目標(biāo)文件 連接程序?qū)⑺心繕?biāo)文件連接起來,最終產(chǎn)生可執(zhí)行文件 需要遵循的原則: 聲明共用的變量、過程等 實現(xiàn)正確的段組合 處理好參數(shù)傳遞問題,10.2 目標(biāo)代碼文件的連接,聲明共用的變量、過程,各個模塊間共用的變量、過程等要說明 PUBLIC 標(biāo)識符 ,標(biāo)識符. ;定義標(biāo)識符的模塊使用 EXTERN 標(biāo)識符:類型 ,標(biāo)識符:類型. ;調(diào)用標(biāo)識符的模塊使用 標(biāo)識符是變
9、量名、過程名等 類型是byte / word / dword(變量)或near / far(過程) 在一個源程序中,public/extern語句可以有多條 各模塊間的public/extern偽指令要互相配對,并且指明的類型互相一致,實現(xiàn)正確的段組合,子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量 采用簡化段定義格式,只要采用相同的存儲模式,容易實現(xiàn)正確的近或遠(yuǎn)調(diào)用 完整段定義格式中,為了實現(xiàn)模塊間的段內(nèi)近調(diào)用(near類型),各自定義的段名、類別必須相同,組合類型都是public。實際的程序開發(fā)中,各個模塊往往由不同的程序員完成,不易實現(xiàn)段同名或類別相同,所以索性定義成遠(yuǎn)調(diào)用(fa
10、r類型) 定義數(shù)據(jù)段時,同樣也要注意這個問題。當(dāng)各個模塊的數(shù)據(jù)段不同時,要正確設(shè)置數(shù)據(jù)段DS寄存器的段基地址,處理好參數(shù)傳遞問題,少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身 大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲地址 還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量 這些也是子程序間的參數(shù)傳遞方法,例4.21b,主程序lt421b.asm并入宏定義 子程序文件sub421b.asm,要加上段定義語句、聲明語句等,但不需要起始點和結(jié)束點,模塊連接的操作步驟: 分別編輯生成各個文件 分別匯編各個文件 連接各個目標(biāo)文件,形成 可執(zhí)行文件,.;宏定義 .c
11、ode public count;定義count共用 extern ALdisp:near,sorting:near,input:far ;聲明其他模塊中的子程序 .startup . .exit 0 ;去掉(lt421a.asm中的)包含語句 end,Lt421b.asm,.model small;定義同樣的存儲模式 extern count:word ;在其他模塊定義了字變量count .code;子程序在代碼段中 public aldisp,sorting,input ;3個子程序是共用的 Aldispproc;仍然作為近調(diào)用 sortingproc;仍然作為近調(diào)用 inputproc
12、far;修改為遠(yuǎn)調(diào)用 . mov count,cx;提供出口參數(shù) . inputendp end;結(jié)束匯編,sub421b.asm,把常用子程序?qū)懗瑟毩⒌脑次募?,單獨匯編形成OBJ文件后,存入子程序庫 主程序也單獨匯編形成OBJ文件 主程序連接時,調(diào)入子程序庫中的子程序模塊,產(chǎn)生最終的可執(zhí)行文件 例 主程序文件 lt421c.asm 子程序文件 sub421c1.asm 子程序文件 sub421c2.asm 子程序文件 sub421c3.asm,10.3 子程序庫的調(diào)入,子程序庫,子程序庫文件(.LIB)是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信息 存入庫的子程序的編寫
13、與目標(biāo)文件連接方法中的要求一樣,只是為方便調(diào)用,更加嚴(yán)格 子程序文件編寫完成后,匯編形成目標(biāo)文件;然后利用庫管理工具程序LIB.EXE,把子程序目標(biāo)模塊逐一加入到庫中 LIB 庫文件名 + 子程序目標(biāo)文件名 庫管理程序LIB幫助創(chuàng)建、組織和維護(hù)子程序模塊庫,例如增加、刪除、替換、合并庫文件等,.;宏定義 .code extern ALdisp:near,sorting:near,input:near ;聲明其他模塊中的子程序 .startup . .exit 0 end,Lt421c.asm,.model small .code public aldisp Aldispproc . Aldis
14、pendp end,sub421c1.asm,.model small .code public sorting sortingproc . sortingendp end,sub421c2.asm,.model small .code public input inputproc . inputendp end,sub421c3.asm,庫文件調(diào)入的操作步驟: 分別編輯生成各個文件 分別匯編各個文件 用庫管理文件,將子程序模塊添加 到庫文件(.LIB)中 連接主程序,提供庫文件, 形成可執(zhí)行文件,補(bǔ)充例題,將子程序補(bǔ)充例題13的子程序編寫成模塊,供主程序調(diào)用 實現(xiàn)功能:從鍵盤輸入有符號10進(jìn)
15、制數(shù),求它們的平均值,然后輸出 源程序文件進(jìn)行簡單修改 主程序文件 子程序文件 利用目標(biāo)代碼文件的連接形成可執(zhí)行文件,.model small extern read:near,write:near,mean:near ;外部子程序 public wtemp;變量共用 .stack .data ;數(shù)據(jù)定義 .code ;輸入、計算和輸出 end,主程序文件,.model small public read,write,mean;子程序共用 extern wtemp:word;外部變量 .code;代碼段 readproc ;輸入子程序read writeproc ;輸出子程序write mea
16、nproc ;計算平均值子程序mean end,子程序文件,第一章 基礎(chǔ)知識,匯編語言和C語言編程,C/C+語言是一個被廣泛使用的程序設(shè)計語言,它不僅具有良好的高級語言特征,而且還具有一些低級語言的特點,如:寄存器變量、位操作等。所以,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
溫馨提示
- 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至2030轉(zhuǎn)向臂起重機(jī)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國自穿孔鉚釘行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國自助秤行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國自動視覺檢測系統(tǒng)行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國腕帶高爾夫GPS行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國腳輪上的患者升降平臺行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國胃腸病學(xué)設(shè)備行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國腸內(nèi)飼管行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國聚苯醚(PPE)混合物和合金行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國聚丙烯蜂窩行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 建設(shè)工程廣聯(lián)達(dá)算量標(biāo)準(zhǔn)化要求(內(nèi)部標(biāo)準(zhǔn))
- 路燈安裝考試試題及答案
- 赤峰市翁牛特旗招聘社區(qū)工作者筆試真題2024
- 線上游戲賬號及虛擬物品交易合同
- 2025至2030全球及中國家用濕巾行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 市場監(jiān)管培訓(xùn)
- 2025至2030中國電鍍鋅鋼行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 山西省2025年中考語文真題(含答案)
- 企業(yè)研發(fā)人員管理制度
- 黑吉遼蒙2025年高考政治真題含解析
- 滬教七年級 (下) Unit 7 Role models of our time 重點復(fù)習(xí)課件
評論
0/150
提交評論