匯編語言第十章模塊化程序設(shè)計.ppt_第1頁
匯編語言第十章模塊化程序設(shè)計.ppt_第2頁
匯編語言第十章模塊化程序設(shè)計.ppt_第3頁
匯編語言第十章模塊化程序設(shè)計.ppt_第4頁
匯編語言第十章模塊化程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論