![模塊化程序設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/1ff868928b850f74f3f1277551a89a35/1ff868928b850f74f3f1277551a89a351.gif)
![模塊化程序設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/1ff868928b850f74f3f1277551a89a35/1ff868928b850f74f3f1277551a89a352.gif)
![模塊化程序設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/1ff868928b850f74f3f1277551a89a35/1ff868928b850f74f3f1277551a89a353.gif)
![模塊化程序設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/1ff868928b850f74f3f1277551a89a35/1ff868928b850f74f3f1277551a89a354.gif)
![模塊化程序設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/1ff868928b850f74f3f1277551a89a35/1ff868928b850f74f3f1277551a89a355.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
將程序分段、采用子程序或宏結(jié)構(gòu)都是進(jìn)行模塊化程序設(shè)計(jì)本節(jié)介紹開發(fā)大型程序時(shí)采用的方法:源程序文件的包含目標(biāo)模塊連接子程序庫(kù)第十章模塊化程序設(shè)計(jì)把源程序分放在幾個(gè)文本文件中,在匯編時(shí)通過(guò)包含偽指令I(lǐng)NCLUDE結(jié)合成一體INCLUDE
文件名可將常用的子程序形成.ASM匯編語(yǔ)言源文件可將常用的宏定義存放在.MAC宏庫(kù)文件中可將常量定義、聲明語(yǔ)句組織在.INC包含文件中例4.21a①宏庫(kù)文件lt421a.mac②主程序文件
lt421a.asm③子程序文件
sub421a.asm10.1源程序文件的包含1dispchar
macrochar ;顯示char字符
movdl,char
movah,2
int21h
endmdispmsg
macromessage ;顯示message字符串
mov
dx,offsetmessage
movah,9
int21h
endmLt421a.mac
includelt421a.mac
...
dispmsgmsg1 ;提示輸入數(shù)據(jù)
mov
bx,offset
buf
callinput ;數(shù)據(jù)輸入
cmpcx,0
jestart4 ;沒(méi)有輸入數(shù)據(jù)則退出
mov
count,cx ... ;顯示輸入的數(shù)據(jù)
... ;數(shù)據(jù)排序
... ;顯示經(jīng)排序后的數(shù)據(jù)start4: .exit0
includesub421a.asm
endLt421a.asm子程序源文件有3個(gè)子程序ALdisp ;顯示2位16進(jìn)制數(shù)子程序(例4.10)sorting ;排序子程序(例4.8)input ;鍵盤輸入子程序還包含一個(gè)宏convert ;;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)sub421a.asm讓我們重點(diǎn)分析鍵盤輸入子程序input;鍵盤輸入子程序;入口參數(shù):ds:bx=存放數(shù)據(jù)的緩沖區(qū);出口參數(shù):cx=數(shù)據(jù)個(gè)數(shù)input
proc pushax pushdx
xor
cx,cx ;數(shù)據(jù)個(gè)數(shù)清0input01: xor
dx,dx ;輸入字符清0input02: movah,1 ;鍵盤輸入一個(gè)字符
int21hinput之一繼續(xù):input之二input10: cmpal,0dh
jeinput30;是回車,結(jié)束整個(gè)數(shù)據(jù)的輸入
cmpal,’’
jeinput20;是空格和逗號(hào),確認(rèn)輸入了一個(gè)數(shù)據(jù)
cmpal,’,’
jeinput20
cmpal,08h
jeinput17;是退格,丟棄本次輸入的數(shù)據(jù),出錯(cuò)input之二繼續(xù):input之三
cmpal,’0’
;有效數(shù)字判斷(圖4.5b)
jbinput17 ;小于’0’,不是有效數(shù)字,出錯(cuò)
cmpal,’f’
jainput17
;大于’f’,不是有效數(shù)字
cmpal,’a’
jbinput11 subal,20h
;’a’~’f’轉(zhuǎn)換成大寫’A’~’F’
jmpinput12input11: cmpal,’F’
jainput17 ;字符小于’a’、大于’F’,出錯(cuò)
cmpal,’A’
jaeinput12
;是’A’~’F’,有效字符
cmpal,’9’
jainput17
;是’0’~’9’,有效字符input之三繼續(xù):input之四input12: cmpdl,0 ;有效字符的處理
jneinput13
movdl,al;dl=0,輸入了一個(gè)數(shù)據(jù)的低位,則dl←al
jmpinput02 ;轉(zhuǎn)到字符輸入input13: cmpdh,0
jneinput17;dl≠0,dh≠0輸入3位數(shù)據(jù),出錯(cuò)
mov
dh,dl;dl≠0,dh=0輸入了一個(gè)數(shù)據(jù)的高位
movdl,al ;dh←dl,dl←al
jmpinput02 ;轉(zhuǎn)到字符輸入input之四繼續(xù):input之五input17: movdl,7 ;輸入錯(cuò)誤處理
movah,2
int21h
movdl,'?'
movah,2
int21h
jmpinput01 ;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)input之五繼續(xù):input之六;轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖4.5c)input20: convert
jmpinput01 ;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)input30: convert
popdx popax ret ;返回,出口參數(shù)已設(shè)定input endpinput之六繼續(xù):convert之一;;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)(圖4.5c)convert macro localinput21,input22 localinput24,input25
cmpdl,0 ;;dl=0,沒(méi)有要轉(zhuǎn)換的數(shù)據(jù),退出
jeinput25convert之一繼續(xù):convert之二
cmpdl,'9'
jbeinput21 subdl,7 ;;字符A~F,則減7input21: anddl,0fh ;;轉(zhuǎn)換低位
cmpdh,0 ;;dh=0,沒(méi)有高位數(shù)據(jù)
jeinput24
cmpdh,'9'
jbeinput22 subdh,7input22: shldh,1
shldh,1
shldh,1
shldh,1 ;;轉(zhuǎn)換高位
ordl,dh ;;合并高、低位convert之二繼續(xù):convert之三源文件包含的操作步驟:①分別編輯生成各個(gè)文件②匯編、連接主程序文件input24: mov[bx],dl ;;存入緩沖區(qū)
incbx inccx ;;數(shù)據(jù)加1input25:
endmconvert之三把常用子程序?qū)懗瑟?dú)立的源程序文件,單獨(dú)匯編,形成子程序的目標(biāo)文件.OBJ主程序也經(jīng)過(guò)獨(dú)立匯編之后形成目標(biāo)文件連接程序?qū)⑺心繕?biāo)文件連接起來(lái),最終產(chǎn)生可執(zhí)行文件需要遵循的原則:①聲明共用的變量、過(guò)程等②實(shí)現(xiàn)正確的段組合③處理好參數(shù)傳遞問(wèn)題10.2目標(biāo)代碼文件的連接2聲明共用的變量、過(guò)程各個(gè)模塊間共用的變量、過(guò)程等要說(shuō)明PUBLIC
標(biāo)識(shí)符[,標(biāo)識(shí)符...] ;定義標(biāo)識(shí)符的模塊使用EXTERN
標(biāo)識(shí)符:類型[,標(biāo)識(shí)符:類型...] ;調(diào)用標(biāo)識(shí)符的模塊使用標(biāo)識(shí)符是變量名、過(guò)程名等類型是byte/word/dword(變量)或near/far(過(guò)程)在一個(gè)源程序中,public/extern語(yǔ)句可以有多條各模塊間的public/extern偽指令要互相配對(duì),并且指明的類型互相一致實(shí)現(xiàn)正確的段組合子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量采用簡(jiǎn)化段定義格式,只要采用相同的存儲(chǔ)模式,容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用(near類型),各自定義的段名、類別必須相同,組合類型都是public。實(shí)際的程序開發(fā)中,各個(gè)模塊往往由不同的程序員完成,不易實(shí)現(xiàn)段同名或類別相同,所以索性定義成遠(yuǎn)調(diào)用(far類型)定義數(shù)據(jù)段時(shí),同樣也要注意這個(gè)問(wèn)題。當(dāng)各個(gè)模塊的數(shù)據(jù)段不同時(shí),要正確設(shè)置數(shù)據(jù)段DS寄存器的段基地址處理好參數(shù)傳遞問(wèn)題少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲(chǔ)地址還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量這些也是子程序間的參數(shù)傳遞方法例4.21b主程序lt421b.asm并入宏定義子程序文件sub421b.asm,要加上段定義語(yǔ)句、聲明語(yǔ)句等,但不需要起始點(diǎn)和結(jié)束點(diǎn)模塊連接的操作步驟:①分別編輯生成各個(gè)文件②分別匯編各個(gè)文件③連接各個(gè)目標(biāo)文件,形成 可執(zhí)行文件
... ;宏定義
.code
publiccount ;定義count共用
externALdisp:near,sorting:near,input:far ;聲明其他模塊中的子程序
.startup ... .exit0 ;去掉(lt421a.asm中的)包含語(yǔ)句
endLt421b.asm
.modelsmall ;定義同樣的存儲(chǔ)模式
externcount:word ;在其他模塊定義了字變量count
.code ;子程序在代碼段中
publicaldisp,sorting,input ;3個(gè)子程序是共用的Aldisp proc ;仍然作為近調(diào)用sorting proc ;仍然作為近調(diào)用input procfar ;修改為遠(yuǎn)調(diào)用
...
mov
count,cx ;提供出口參數(shù)
...input endp
end ;結(jié)束匯編sub421b.asm把常用子程序?qū)懗瑟?dú)立的源文件,單獨(dú)匯編形成OBJ文件后,存入子程序庫(kù)主程序也單獨(dú)匯編形成OBJ文件主程序連接時(shí),調(diào)入子程序庫(kù)中的子程序模塊,產(chǎn)生最終的可執(zhí)行文件例①主程序文件lt421c.asm②子程序文件
sub421c1.asm③子程序文件
sub421c2.asm④子程序文件
sub421c3.asm10.3子程序庫(kù)的調(diào)入3子程序庫(kù)子程序庫(kù)文件(.LIB)是子程序模塊的集合,其中存放著各子程序的名稱、目標(biāo)代碼及有關(guān)定位信息存入庫(kù)的子程序的編寫與目標(biāo)文件連接方法中的要求一樣,只是為方便調(diào)用,更加嚴(yán)格子程序文件編寫完成后,匯編形成目標(biāo)文件;然后利用庫(kù)管理工具程序LIB.EXE,把子程序目標(biāo)模塊逐一加入到庫(kù)中
LIB
庫(kù)文件名
+子程序目標(biāo)文件名庫(kù)管理程序LIB幫助創(chuàng)建、組織和維護(hù)子程序模塊庫(kù),例如增加、刪除、替換、合并庫(kù)文件等第4章... ;宏定義.codeexternALdisp:near,sorting:near,input:near ;聲明其他模塊中的子程序.startup....exit0endLt421c.asm
.modelsmall .code publicaldispAldisp proc ...Aldisp
endp endsub421c1.asm
.modelsmall .code publicsortingsorting proc ...sorting endp endsub421c2.asm
.modelsmall .code publicinputinput proc ...input endp endsub421c3.asm庫(kù)文件調(diào)入的操作步驟:①分別編輯生成各個(gè)文件②分別匯編各個(gè)文件③用庫(kù)管理文件,將子程序模塊添加到庫(kù)文件(.LIB)中④連接主程序,提供庫(kù)文件, 形成可執(zhí)行文件補(bǔ)充例題將子程序補(bǔ)充例題1~3的子程序編寫成模塊,供主程序調(diào)用實(shí)現(xiàn)功能:從鍵盤輸入有符號(hào)10進(jìn)制數(shù),求它們的平均值,然后輸出源程序文件進(jìn)行簡(jiǎn)單修改主程序文件子程序文件利用目標(biāo)代碼文件的連接形成可執(zhí)行文件
.modelsmallexternread:near,write:near,mean:near
;外部子程序
publicwtemp
;變量共用
.stack
.data … ;數(shù)據(jù)定義
.code … ;輸入、計(jì)算和輸出
end主程序文件
.modelsmall
publicread,write,mean
;子程序共用
externwtemp:word
;外部變量
.code ;代碼段read proc …… ;輸入子程序readwrite proc …… ;輸出子程序writemean proc …… ;計(jì)算平均值子程序mean end子程序文件第一章基礎(chǔ)知識(shí)匯編語(yǔ)言和C語(yǔ)言編程
C/C++語(yǔ)言是一個(gè)被廣泛使用的程序設(shè)計(jì)語(yǔ)言,它不僅具有良好的高級(jí)語(yǔ)言特征,而且還具有一些低級(jí)語(yǔ)言的特點(diǎn),如:寄存器變量、位操作等。所以,C語(yǔ)言的程序與匯編語(yǔ)言程序之間能很平滑地銜接。另外,目前主要的C語(yǔ)言程序開發(fā)環(huán)境,如:TurboC/C++、BorlandC/C++等,也都提供了很好的混合編程手段。一、匯編指令的嵌入為了提高C語(yǔ)言程序內(nèi)某特殊功能段的處理效率,我們可以在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代科技在中藥植物油提取中的綠色環(huán)保策略
- 生活用紙?jiān)O(shè)計(jì)新趨勢(shì)創(chuàng)新驅(qū)動(dòng)的消費(fèi)者體驗(yàn)升級(jí)
- 生態(tài)保護(hù)與零碳公園規(guī)劃的融合實(shí)踐
- 國(guó)慶節(jié)活動(dòng)方案活動(dòng)內(nèi)容
- 現(xiàn)代服務(wù)業(yè)的綠色發(fā)展路徑探索
- 小學(xué)勞動(dòng)教育考核方案
- 2024年五年級(jí)英語(yǔ)下冊(cè) Unit 7 Chinese festivals第6課時(shí)說(shuō)課稿 譯林牛津版
- 2024年秋七年級(jí)歷史上冊(cè) 第14課 溝通中外文明的“絲綢之路”說(shuō)課稿 新人教版
- Unit 3 My friends Read and write(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)上冊(cè)
- 3 我不拖拉 第一課時(shí)(說(shuō)課稿)2023-2024學(xué)年統(tǒng)編版道德與法治一年級(jí)下冊(cè)
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體 標(biāo)準(zhǔn)
- JGJ106-建筑基樁檢測(cè)技術(shù)規(guī)范
- 山東德州市寧津縣2023-2024學(xué)年五年級(jí)下學(xué)期期末考試語(yǔ)文試題
- 高技能公共實(shí)訓(xùn)基地建設(shè)方案
- 市第一人民醫(yī)院“十四五”發(fā)展規(guī)劃(2020-2025)
- 2024年湖北孝達(dá)交通投資有限公司招聘筆試沖刺題(帶答案解析)
- 四年級(jí)上冊(cè)豎式計(jì)算100題及答案
- 小學(xué)英語(yǔ)跨學(xué)科案例設(shè)計(jì)
- 初中作業(yè)設(shè)計(jì)教師培訓(xùn)
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
- 高考滿分作文常見(jiàn)結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論