模塊化程序設計_第1頁
模塊化程序設計_第2頁
模塊化程序設計_第3頁
模塊化程序設計_第4頁
模塊化程序設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、匯編語言匯編語言程序設計程序設計 模塊化程序設計概述 段的定義 模塊間的通訊 模塊的連接 源程序綜合舉例 匯編語言匯編語言程序設計程序設計一、模塊化程序設計概念一、模塊化程序設計概念 在設計大型程序時,常常要將整個問題分解為若干在設計大型程序時,常常要將整個問題分解為若干個小問題,必要時還要將小問題再次分解為更小的若干個小問題,必要時還要將小問題再次分解為更小的若干問題,每個小問題編寫成獨立的源文件,最后將所有的問題,每個小問題編寫成獨立的源文件,最后將所有的源文件連接起來組合成一個大程序。也就是說,一個程源文件連接起來組合成一個大程序。也就是說,一個程序往往由多個源文件組成,那么構成一個程序

2、的各個相序往往由多個源文件組成,那么構成一個程序的各個相對獨立的源文件通常稱為模塊。這樣把一個程序分成多對獨立的源文件通常稱為模塊。這樣把一個程序分成多個功能相對獨立的程序模塊分別編制、調試后,再用連個功能相對獨立的程序模塊分別編制、調試后,再用連接程序把它們連接在一起生成一個完整的程序的設計的接程序把它們連接在一起生成一個完整的程序的設計的方法稱為模塊化程序設計。方法稱為模塊化程序設計。二、二、 模塊化程序設計的優(yōu)點模塊化程序設計的優(yōu)點 開發(fā)速度快 可維護性與可讀性強 可移埴性強匯編語言匯編語言程序設計程序設計三、三、 模塊劃分的原則和方法模塊劃分的原則和方法 模塊劃分是一個自上而下的過程。

3、主模塊是一個總模塊劃分是一個自上而下的過程。主模塊是一個總控模塊,首先確定主要的模塊,也就是說,要把總任務控模塊,首先確定主要的模塊,也就是說,要把總任務劃分成幾個主要的子任務。一般來說,可以分成輸入任劃分成幾個主要的子任務。一般來說,可以分成輸入任務、輸出任務和一個或多個進行處理或計算的子任務。務、輸出任務和一個或多個進行處理或計算的子任務。在劃分子模塊的過程中應該明確每個模塊的功能、數(shù)據(jù)在劃分子模塊的過程中應該明確每個模塊的功能、數(shù)據(jù)結構及相互之間的關系。第二步,對這些主要的子模塊結構及相互之間的關系。第二步,對這些主要的子模塊根據(jù)需要再劃分成下一層的子模塊。第三步,重復上述根據(jù)需要再劃分

4、成下一層的子模塊。第三步,重復上述過程,一直到程序分成易于理解和易于實現(xiàn)的小模塊為過程,一直到程序分成易于理解和易于實現(xiàn)的小模塊為止。止。匯編語言匯編語言程序設計程序設計 1. 模塊劃分的原則 (1) (1) 一個主模塊完成對各子模塊的調用,實現(xiàn)總體任務,一個主模塊完成對各子模塊的調用,實現(xiàn)總體任務,而每個子模塊完成相應的子任務,各模塊間除應在功能上分開,而每個子模塊完成相應的子任務,各模塊間除應在功能上分開,邏輯上獨立,減少橫向聯(lián)系外,不能使用轉移指令在模塊間轉邏輯上獨立,減少橫向聯(lián)系外,不能使用轉移指令在模塊間轉來轉去,避免邏輯上的混亂;來轉去,避免邏輯上的混亂; (2) (2) 子模塊大

5、小應適中,模塊過大就失去了模塊化的意子模塊大小應適中,模塊過大就失去了模塊化的意義,也會給編程和調試帶來一定困難;模塊過小,會在的時間義,也會給編程和調試帶來一定困難;模塊過小,會在的時間和空間上造成浪費;和空間上造成浪費; (3) (3) 差別很大的兩個程序段應作為兩個模塊;差別很大的兩個程序段應作為兩個模塊; (4) (4) 當一些數(shù)據(jù)被多個程序段所公用,那么這些數(shù)據(jù)所當一些數(shù)據(jù)被多個程序段所公用,那么這些數(shù)據(jù)所在的程序段應作為一個模塊;在的程序段應作為一個模塊; (5) (5) 當某些程序功能片段為多個模塊所公用時,應將它當某些程序功能片段為多個模塊所公用時,應將它們作為公用子程序模塊;

6、們作為公用子程序模塊; (6) (6) 各個模塊的結構最好能設計為單入口、單出口的形各個模塊的結構最好能設計為單入口、單出口的形式,各模塊間的接口應該簡單,要盡量減少公共標識符的個數(shù)。式,各模塊間的接口應該簡單,要盡量減少公共標識符的個數(shù)。匯編語言匯編語言程序設計程序設計2.2.模塊劃分的方法模塊劃分的方法 (1) (1) 層次圖層次圖 層次圖是表示模塊與模塊之間關系的方塊圖。層次圖的層次圖是表示模塊與模塊之間關系的方塊圖。層次圖的頂端是主模塊,即一個總控制塊,直接控制位于其下一層的頂端是主模塊,即一個總控制塊,直接控制位于其下一層的各個模塊的執(zhí)行,而各主要的子模塊再去控制其下一層的子各個模塊

7、的執(zhí)行,而各主要的子模塊再去控制其下一層的子模塊。模塊。 (2) (2) 模塊說明模塊說明 模塊說明是對模塊的功能、算法、模塊輸入和輸出以及模塊說明是對模塊的功能、算法、模塊輸入和輸出以及它們的數(shù)據(jù)結構的簡單說明。應該考慮程序中哪些數(shù)據(jù)應該它們的數(shù)據(jù)結構的簡單說明。應該考慮程序中哪些數(shù)據(jù)應該放在公共數(shù)據(jù)區(qū),供所有模塊訪問,哪些數(shù)據(jù)可在有直接從放在公共數(shù)據(jù)區(qū),供所有模塊訪問,哪些數(shù)據(jù)可在有直接從屬關系的模塊間傳送。屬關系的模塊間傳送。 匯編語言匯編語言程序設計程序設計 段的定義段的定義 SEGMENT偽指令的完整的格式為: 段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS1 1、

8、定位類型定位類型 定位類型用于指定該段的段起始地址的特性,也稱為定位屬性或對齊屬性。連接程序連接目標文件時,根據(jù)定位類型來確定段的開始地址。一共有5種選擇。 1 1PAGE(PAGE(頁頁) ) 段的起始地址從頁邊界開始,也就是說必須為256的倍數(shù),即該地址的最后8位二進制位應為0。 2 2PARA(PARA(節(jié)節(jié)) ) 段的起始地址必須從段邊界開始,也就是說必須為16的倍數(shù),即該地址的最后4位二進制位應為0。 3 3DWORD(DWORD(雙字雙字) ) 段的起始地址必須從雙字邊界開始,也就是說必須為4的倍數(shù),即該地址的最低兩位二進制位應為0。 4 4WORD(WORD(字字) ) 段的起始

9、地址必須從字邊界開始,也就是說必須為偶數(shù)地址,即該地址的最低一位二進制位應為0。 5BYTE(字節(jié)) 段的起始地址從字節(jié)邊界開始,也就是說可以從任意單元地址起,也就是說為下一個可用的字節(jié)地址開始。 當段定義中沒有指定段的定位類型時,定位類型的缺省方式為PARA。匯編語言匯編語言程序設計程序設計2 2、 組合類型組合類型 組合類型也稱為組合屬性,組合類型標明本段與其他模塊中同名段的組合連接關系,是用于控制本段與其他模塊中的同名、同類型段的組合連接方式,有五種可選的組合類型。 1 1PUBLICPUBLIC 連接程序將不同模塊中的具有PUBLIC屬性的同名段連接在一起,形成一個新的段,公用一個段基

10、址。 2STACK STACK與PLIBLIC的處理方式一樣,只是連接后的段為堆棧段,連接程序在連接過程中自動將新段的段基址送到堆棧段寄存器SS,新段的長度送到堆棧指針寄存器SP。當堆棧段定義時沒有說明為STACK類型,就要在程序中用指令給堆棧段寄存器SS和堆棧指針寄存器 SP賦值,不然連接程序時就會產(chǎn)生警告信息。 3COMMON COMMON類型會產(chǎn)生一個覆蓋段,連接程序把該類型的同名段指定相同的段地址,段的長度取決于最長的COMMON段的長度。匯編語言匯編語言程序設計程序設計 4MEMORY 連接程序不單獨區(qū)分MEMORY類型,把MEMORY與PUBLIC類型同等對待。MASM程序允許使用

11、它主要是為了與其他支持Intel MEMORY類型的連接程序兼容。 5AT表達式 連接程序將具有AT類型的段裝在表達式值所指定的段地址邊界上。這個類型可以為標號或變量賦予絕對地址,以便程序以標號或變量的形式存取這些存儲單元的內容。一般在AT類型的段中不定義指令或數(shù)據(jù),只說明一個地址結構。 6NONE NONE為默認值,表示該段是獨立的,與其他同名段無組合關系,每段都有自己的段起始地址。3、 類別 “類別”用于控制各段的存放順序,類別名相同的所有段要相鄰存放。類別名可以是用單引號括起來任何合法的名稱,若類別選擇項省略,則表明該段類別為空。典型的類別名有:用于代碼段的CODE、用于數(shù)據(jù)段的DATA

12、和用于堆棧段的STACK。 匯編語言匯編語言程序設計程序設計模塊間的通訊模塊間的通訊1、 各模塊之間的通信方式 當程序由幾個模塊組成時,勢必存在一個模塊使用另一個模塊中定義的變量、標號以及子程序等問題。由于子程序與調用它的語句,定義變量、標號及使用變量、標號的語句分別在不同的模塊中,匯編是分開進行的,匯編程序無法知道子程序入口地址及變量、標號的地址。因此,要由連接程序匯集各模塊送來的地址信息,綜合決定各個調用指令的轉移地址及變量、標號地址。因此,匯編語言提供了幾種偽指令來完成不同模塊間的通訊。 1 TITLE 格式:TITLE 標題 功能:給原程序指定一個標題,而后.LST文件每頁的頭都會出現(xiàn)

13、這個標題。 2NAME和END 在模塊化程序設計中,常要用到模塊定義偽指令。模塊定義使用NAME和END兩條偽指令。 模塊定義偽指令的一般格式為: 格式:NAME 模塊名 END 標號 模塊名為本模塊的名稱,是NAME的操作數(shù);END表示源程序到此結束,若程序包含多個模塊,則每個模塊的最后必須有END,如果是主模塊,其END語句中可以指定一個標號,這個標號表示程序的啟動地址,只有主模塊的END語句后有標號。 匯編語言匯編語言程序設計程序設計 3PUBLIC偽指令 格式:PUBLIC 標識符 ,標識符,. 功能:表明本模塊中所定義的標識符能夠提供給其他模塊引用。 在一模塊中,PUBLIC偽指令語

14、句一般放在程序的開頭,只能說明一次。PUBLIC偽指令其后的標識符是本模塊定義的可供其他模塊調用的標識符。這些標識符是在本模塊中定義的符號常量、標號、過程名或變量,各名字之間用逗號隔開。注意:寄存器名或其值為實數(shù)及其值超過兩個字節(jié)的整數(shù)的符號常量均不能作公共標識符使用。 一旦經(jīng)過PUBLIC偽指令定義,EXAM子程序就成為公共子程序,即可被多個不同模塊調用。 4EXTRN偽指令 格式:EXTRN標識符:類型,標識符:類型, 功能:用來說明本模塊中用到的標識符是由其它模塊定義的,即本模塊要引用其他模塊定義的標識符。 EXTRN是偽指令,其后的標識符就是本模塊中要引用的外部標識符。而且標識符必須指

15、出其類型。變量的類型可以是BYTE,WORD或DWORD,標號和過程名的類型可以是NEAR或FAR。所有的標識符類型必須與原定義時的類型一致;被EXTRN偽指令說明的標識符必須是在它所定義的模塊中被PUBLIC偽指令說明過的標識符。 匯編語言匯編語言程序設計程序設計模塊的連接模塊的連接 在模塊化程序設計中,一個大的程序分成了若干子模塊,每個模塊具有完整的結構和獨立的功能,并且能單獨匯編和調試。在實際使用時如何將這些具有獨立功能的模塊連接成一個完整的整體呢?一般分兩種情況:源程序級間的裝配連接和目標文件級間的裝配連接。1、 源程序級間的裝配連接源程序級間的裝配連接 將若干個源文件(*.ASM)連

16、成一個完整的文件,匯編后形成一個目標模塊( .OBJ)方式,稱為源程序裝配連接。源程序級間的裝配連接常常是被裝配的若干模塊分別以源文件的形式存在,當需要在源主程序中插入一個已存在的子程序文件,或是多個源文件要合成一塊的時候使用。匯編語言匯編語言程序設計程序設計2、 目標文件級間的裝配連接目標文件級間的裝配連接 目標模塊連接就是通常所說的模塊連接,是多模塊程序設計的主要形式。目標模塊連接是把被裝配的各個模塊分別匯編后生成各自的目標文件(.obj)經(jīng)連接成一個可執(zhí)行文件,它的實現(xiàn)比源文件連接復雜。 1 1目標模塊連接目標模塊連接 目標模塊的連接時要使用連接程序LINK,通過LINK將各模塊連接成一

17、個可執(zhí)行程序。命令格式如下: LINK 模塊l文件名十模塊2文件名十模塊3文件名十 在LINK執(zhí)行時,向使用者詢問可執(zhí)行文件名時,回答一個指定的文件名,則連接后的可執(zhí)行文件名就是回答中所指定的文件名;如果沒有回答指定文件名,則連接后可執(zhí)行文件名將取所提供的第一個目標文件名。假設MASM程序在D盤MASM目錄下,目標模塊為file_1.obj、file_2.obj和file_3.obj,則 D:MASMLINK file_1+file_2+file_3 ObjectModeles.obj: RunFilefile_1.exe:mainfile ListFilenul.map:mainfile L

18、ibraries.lib:匯編語言匯編語言程序設計程序設計2 2段的組合與定位段的組合與定位 連接程序在執(zhí)行時要對目標模塊做兩遍掃描,第一遍掃描是對所有段分配段地址,并建立一張外部符號表;第二遍掃描是確定與這些外部符號有關的指令機器碼值。連接完成后建立了裝入模塊,再由裝入程序把該模塊裝入內存等待執(zhí)行。 對所有段分配段地址,涉及到段定義中的屬性以及PC機的可重定位技術。匯編程序匯編成的目標模塊均是以浮動的零作為段起始地址,理論上講該模塊可以定位在主存中的任何地方。而連接程序可實現(xiàn)多個目標模塊的連接,并按各段的新定位地址修改有關的目標代碼,使之成為一個整體來運行。在用連接程序將多個目標模塊連接在一

19、起時,被連接模塊要向連接程序提供兩個方面的信息:各段之間的組合方式和各模塊之間的通信方式。各段之間的組合方式由段定義中的組合類型和類別確定。 LINK程序連接時,先處理組合類型,后處理定位類型,再處理類別,因此,各模塊中具有同一種組合形式的段,其定位類型不得相互矛盾,類別名或者省略,或者相同。L1NK程序連接時把類別名相同的所有段(段名未必相同)放在連續(xù)的存儲區(qū)內,但仍然是不同的段。類別名相同的各個段在連接時,先出現(xiàn)的在前,后出現(xiàn)的在后,每段都有自己的超始地址。沒有類別名的邏輯段,與其它沒有類別名的邏輯段一起連續(xù)裝入內存。 若多個模塊的段都為COMMON組合類型,連接后組合成一個互相覆蓋的段,

20、段的長度取二者的長者,這種連接方法只有當各模塊需要公共數(shù)據(jù)區(qū)時才使用,否則各數(shù)據(jù)段內容相互覆蓋便會出錯。若多個模塊的段都為PUBLIC組合類型,連接后組合成一個相鄰連接的段,互不覆蓋,連接順序由連接程序確定,組合后形成的段的長度約等于各個段長度之和。匯編語言匯編語言程序設計程序設計源程序綜合舉例源程序綜合舉例 例 從鍵盤輸入的一個長度不超過50個字符的字符串,將其中的小寫字母轉變?yōu)榇髮懽帜篙敵?,非字母字符不變?解:可按題意和前面講述的原則,把整個程序分成3個模塊: 模塊1是主程序,通過調用模塊2和模塊3定義的子程序實現(xiàn)接收字符串以及小寫字母轉換大寫字母的任務;模塊2定義子程序IN_SUB接收

21、輸入的字符串及子程序OUT_SUB輸出字符串;模塊3定義子程序TRANS將串中的大寫字母轉換成小寫字母。 應用例子層次圖應用例子層次圖 匯編語言匯編語言程序設計程序設計;主模塊;主模塊BLOCK_1BLOCK_1:NAME NAME BLOCK_1 BLOCK_1 ;模塊模塊1 1PUBLIC PUBLIC BUFBUF;本模塊緩沖區(qū),其它模塊要使用本模塊緩沖區(qū),其它模塊要使用EXTRN EXTRN IN_SUB:FAR,OUTSTR:FAR,TRANS:FARIN_SUB:FAR,OUTSTR:FAR,TRANS:FAR;使用其它模塊的子程序使用其它模塊的子程序STACK STACK SEG

22、MENT STACK STACKSEGMENT STACK STACKDW 32 DUP(0)DW 32 DUP(0)STACK STACK ENDSENDSDATA DATA SEGMENT SEGMENTBUF BUF DB 50 , ? , 50 DUP(?)DB 50 , ? , 50 DUP(?)DATA DATA ENDS ENDSCODESG CODESG SEGMENTSEGMENTMAIN MAIN PROC FARPROC FARASSUME ASSUME CS:CODE,DS:DATA,SS:STACKCS:CODE,DS:DATA,SS:STACKMOV AX, DAT

23、AMOV AX, DATAMOV DS, AXMOV DS, AXCALL FAR PTR IN_SUB CALL FAR PTR IN_SUB ;調輸入字符子程序調輸入字符子程序IN_SUBIN_SUBCALL FAR PTR TRANSCALL FAR PTR TRANS;調轉換字符子程序調轉換字符子程序TRANSTRANSCALL FAR PTR OUT_SUBCALL FAR PTR OUT_SUB;調輸入字符子程序調輸入字符子程序OUT _SUBOUT _SUBMOV AX, 4C00HMOV AX, 4C00H;返回返回INT 21HINT 21HMAIN MAIN ENDPEND

24、PCODESG CODESG ENDSENDS END MAIN END MAIN ; ;主模塊結束主模塊結束 匯編語言匯編語言程序設計程序設計;子模塊;子模塊2 2 BLOCK_2BLOCK_2NAME NAME BLOCK_2BLOCK_2;命名模塊命名模塊2 2EXTRN EXTRN BUF:BYTE BUF:BYTE ;使用其它模塊的緩沖區(qū)使用其它模塊的緩沖區(qū)PUBLIC PUBLIC IN_SUB,OUT_SUBIN_SUB,OUT_SUB;其它模塊要使用其它模塊要使用CODE CODE SEGMENTSEGMENTASSUME ASSUME CS:CODECS:CODEIN_SUB

25、IN_SUBPROC FARPROC FAR ;輸入子程序輸入子程序PUSH DXPUSH DXPUSH AXPUSH AXLEA DX,BUFLEA DX,BUFMOV AH,10MOV AH,10INT 21HINT 21H;輸入字符輸入字符POP AXPOP AXPOP DXPOP DXRETRETIN_SUB IN_SUB ENDPENDPOUT_SUB OUT_SUB PROC FARPROC FARPUSH DXPUSH DXPUSH AXPUSH AXLEA DX,BUF+2LEA DX,BUF+2MOV AH,9MOV AH,9INT 21HINT 21H;輸出字符輸出字符POP AXPOP AXPOP DXPOP DXRET

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論