




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
匯編語言第十章:模塊化程序設計第一頁,共33頁。把源程序分放在幾個文本文件中,在匯編時通過包含偽指令INCLUDE結合成一體INCLUDE
文件名可將常用的子程序形成.ASM匯編語言源文件可將常用的宏定義存放在.MAC宏庫文件中可將常量定義、聲明語句組織在.INC包含文件中例4.21a①宏庫文件lt421a.mac②主程序文件lt421a.asm③子程序文件sub421a.asm10.1源程序文件的包含1第二頁,共33頁。dispchar
macrochar ;顯示char字符
movdl,char movah,2 int21h endmdispmsg
macromessage ;顯示message字符串
movdx,offsetmessage movah,9 int21h endmLt421a.mac第三頁,共33頁。
includelt421a.mac
...
dispmsgmsg1 ;提示輸入數據
movbx,offsetbuf
callinput ;數據輸入
cmpcx,0 jestart4 ;沒有輸入數據則退出
movcount,cx ... ;顯示輸入的數據 ... ;數據排序 ... ;顯示經排序后的數據start4: .exit0
includesub421a.asm
endLt421a.asm第四頁,共33頁。子程序源文件有3個子程序ALdisp ;顯示2位16進制數子程序(例4.10)sorting ;排序子程序(例4.8)input ;鍵盤輸入子程序還包含一個宏convert ;;將DX兩位ASCII碼轉換為兩位16進制數sub421a.asm讓我們重點分析鍵盤輸入子程序input第五頁,共33頁。;鍵盤輸入子程序;入口參數:ds:bx=存放數據的緩沖區;出口參數:cx=數據個數input
proc pushax pushdx xorcx,cx ;數據個數清0input01: xordx,dx ;輸入字符清0input02: movah,1 ;鍵盤輸入一個字符 int21hinput之一繼續:input之二第六頁,共33頁。input10: cmpal,0dh jeinput30;是回車,結束整個數據的輸入
cmpal,’’ jeinput20;是空格和逗號,確認輸入了一個數據
cmpal,’,’ jeinput20 cmpal,08h jeinput17;是退格,丟棄本次輸入的數據,出錯input之二繼續:input之三第七頁,共33頁。
cmpal,’0’
;有效數字判斷(圖4.5b)
jbinput17 ;小于’0’,不是有效數字,出錯
cmpal,’f’ jainput17
;大于’f’,不是有效數字
cmpal,’a’ jbinput11 subal,20h
;’a’~’f’轉換成大寫’A’~’F’
jmpinput12input11: cmpal,’F’ jainput17 ;字符小于’a’、大于’F’,出錯
cmpal,’A’ jaeinput12
;是’A’~’F’,有效字符
cmpal,’9’ jainput17
;是’0’~’9’,有效字符input之三繼續:input之四第八頁,共33頁。input12: cmpdl,0 ;有效字符的處理
jneinput13 movdl,al;dl=0,輸入了一個數據的低位,則dl←al
jmpinput02 ;轉到字符輸入input13: cmpdh,0 jneinput17;dl≠0,dh≠0輸入3位數據,出錯
movdh,dl;dl≠0,dh=0輸入了一個數據的高位
movdl,al ;dh←dl,dl←al
jmpinput02 ;轉到字符輸入input之四繼續:input之五第九頁,共33頁。input17: movdl,7 ;輸入錯誤處理
movah,2 int21h movdl,'?' movah,2 int21h jmpinput01 ;轉到輸入一個數據input之五繼續:input之六第十頁,共33頁。;轉換正確的輸入數據(圖4.5c)input20: convert
jmpinput01 ;轉到輸入一個數據input30: convert
popdx popax ret ;返回,出口參數已設定input endpinput之六繼續:convert之一第十一頁,共33頁。;;將DX兩位ASCII碼轉換為兩位16進制數(圖4.5c)convert macro localinput21,input22 localinput24,input25 cmpdl,0 ;;dl=0,沒有要轉換的數據,退出
jeinput25convert之一繼續:convert之二第十二頁,共33頁。
cmpdl,'9' jbeinput21 subdl,7 ;;字符A~F,則減7input21: anddl,0fh ;;轉換低位
cmpdh,0 ;;dh=0,沒有高位數據
jeinput24
cmpdh,'9' jbeinput22 subdh,7input22: shldh,1 shldh,1 shldh,1 shldh,1 ;;轉換高位
ordl,dh ;;合并高、低位convert之二繼續:convert之三第十三頁,共33頁。源文件包含的操作步驟:①分別編輯生成各個文件②匯編、連接主程序文件input24: mov[bx],dl ;;存入緩沖區
incbx inccx ;;數據加1input25: endmconvert之三第十四頁,共33頁。把常用子程序寫成獨立的源程序文件,單獨匯編,形成子程序的目標文件.OBJ主程序也經過獨立匯編之后形成目標文件連接程序將所有目標文件連接起來,最終產生可執行文件需要遵循的原則:①聲明共用的變量、過程等②實現正確的段組合③處理好參數傳遞問題10.2目標代碼文件的連接2第十五頁,共33頁。聲明共用的變量、過程各個模塊間共用的變量、過程等要說明PUBLIC
標識符[,標識符...] ;定義標識符的模塊使用EXTERN
標識符:類型[,標識符:類型...] ;調用標識符的模塊使用標識符是變量名、過程名等類型是byte/word/dword(變量)或near/far(過程)在一個源程序中,public/extern語句可以有多條各模塊間的public/extern偽指令要互相配對,并且指明的類型互相一致第十六頁,共33頁。實現正確的段組合子程序文件必須定義在代碼段中,也可以具有局部的數據變量采用簡化段定義格式,只要采用相同的存儲模式,容易實現正確的近或遠調用完整段定義格式中,為了實現模塊間的段內近調用(near類型),各自定義的段名、類別必須相同,組合類型都是public。實際的程序開發中,各個模塊往往由不同的程序員完成,不易實現段同名或類別相同,所以索性定義成遠調用(far類型)定義數據段時,同樣也要注意這個問題。當各個模塊的數據段不同時,要正確設置數據段DS寄存器的段基地址第十七頁,共33頁。處理好參數傳遞問題少量參數可用寄存器或堆棧直接傳送數據本身大量數據可以安排在緩沖區,用寄存器或堆棧傳送數據的存儲地址還可利用變量傳遞參數,但是要采用public/extern聲明為公共(全局)變量這些也是子程序間的參數傳遞方法第十八頁,共33頁。例4.21b主程序lt421b.asm并入宏定義子程序文件sub421b.asm,要加上段定義語句、聲明語句等,但不需要起始點和結束點模塊連接的操作步驟:①分別編輯生成各個文件②分別匯編各個文件③連接各個目標文件,形成 可執行文件第十九頁,共33頁。 ... ;宏定義 .code
publiccount ;定義count共用
externALdisp:near,sorting:near,input:far ;聲明其他模塊中的子程序 .startup ... .exit0 ;去掉(lt421a.asm中的)包含語句 endLt421b.asm第二十頁,共33頁。
.modelsmall ;定義同樣的存儲模式
externcount:word ;在其他模塊定義了字變量count
.code ;子程序在代碼段中
publicaldisp,sorting,input ;3個子程序是共用的Aldisp proc ;仍然作為近調用sorting proc ;仍然作為近調用input procfar ;修改為遠調用 ...
movcount,cx ;提供出口參數 ...input endp
end ;結束匯編sub421b.asm第二十一頁,共33頁。把常用子程序寫成獨立的源文件,單獨匯編形成OBJ文件后,存入子程序庫主程序也單獨匯編形成OBJ文件主程序連接時,調入子程序庫中的子程序模塊,產生最終的可執行文件例①主程序文件lt421c.asm②子程序文件sub421c1.asm③子程序文件sub421c2.asm④子程序文件sub421c3.asm10.3子程序庫的調入3第二十二頁,共33頁。子程序庫子程序庫文件(.LIB)是子程序模塊的集合,其中存放著各子程序的名稱、目標代碼及有關定位信息存入庫的子程序的編寫與目標文件連接方法中的要求一樣,只是為方便調用,更加嚴格子程序文件編寫完成后,匯編形成目標文件;然后利用庫管理工具程序LIB.EXE,把子程序目標模塊逐一加入到庫中
LIB
庫文件名+子程序目標文件名庫管理程序LIB幫助創建、組織和維護子程序模塊庫,例如增加、刪除、替換、合并庫文件等第4章第二十三頁,共33頁。... ;宏定義.codeexternALdisp:near,sorting:near,input:near ;聲明其他模塊中的子程序.startup....exit0endLt421c.asm第二十四頁,共33頁。
.modelsmall .code publicaldispAldisp proc ...Aldisp endp endsub421c1.asm第二十五頁,共33頁。
.modelsmall .code publicsortingsorting proc ...sorting endp endsub421c2.asm第二十六頁,共33頁。
.modelsmall .code publicinputinput proc ...input endp endsub421c3.asm庫文件調入的操作步驟:①分別編輯生成各個文件②分別匯編各個文件③用庫管理文件,將子程序模塊添加到庫文件(.LIB)中④連接主程序,提供庫文件, 形成可執行文件第二十七頁,共33頁。補充例題將子程序補充例題1~3的子程序編寫成模塊,供主程序調用實現功能:從鍵盤輸入有符號10進制數,求它們的平均值,然后輸出源程序文件進行簡單修改主程序文件子程序文件利用目標代碼文件的連接形成可執行文件第二十八頁,共33頁。 .modelsmallexternread:near,write:near,mean:near
;外部子程序
publicwtemp
;變量共用 .stack
.data … ;數據定義 .code … ;輸入、計算和輸出 end主程序文件第二十九頁,共33頁。 .modelsmall
publicread,write,mean
;子程序共用
externwtemp:word
;外部變量 .code ;代碼段read proc …… ;輸入子程序readwrite proc …… ;輸出子程序writemean proc …… ;計算平均值子程序mean end子程序文件第三十頁,共33頁。第一章基礎知識匯編語言和C語言編程C/C++語言是一個被廣泛使用的程序設計語言,它不僅具有良好的高級語言特征,而且還具有一些低級語言的特點,如:寄存器變量、位操作等。所以,C語言的程序與匯編語言程序之間能很平滑地銜接。另外,目前主要的C語言程序開發環境,如:TurboC/C++、BorlandC/C++等,也都提供了很好的混合編程手段。一、匯編指令的嵌入為了提高C語言程序內某
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCMA 0188-2024純電動裝載機動態噪聲試驗方法
- T/CCMA 0074-2019挖掘機載荷譜試驗方法
- T/CAS 512-2021個人理財在線培訓服務要求
- T/CAQI 10-2021新風凈化機
- 調研素材面試題及答案
- 帶頭致富面試題及答案
- 工大博士面試題及答案
- 華潤集團合規管理制度
- T/CAEPI 38-2021通風隔聲窗技術要求
- 園區建設調度會會議講話發言稿模版
- 調機品管理規定
- 福建省醫學會專科分會管理辦法
- DB63∕T 1683-2018 青海省農牧區公共廁所工程建設標準
- 我們的互聯網時代課件PPT模板
- 維修電工高級技師論文(6篇推薦范文)
- 人民幣教具正反面完美打印版
- 新編簡明英語語言學教程第二版課后參考答案
- 最新房地產開發預算表
- 最新零售藥店GSP認證條款
- 家庭住房情況查詢申請表
- 2019年甘肅省天水市中考生物試題(word版,含答案)
評論
0/150
提交評論