




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章匯編語言程序設計5.1匯編語言的程序與語句5.2匯編語言的偽指令5.3匯編語言程序設計基礎5.4中斷服務程序設計5.5模塊化程序設計
5.1匯編語言的程序與語句5.1.1 匯編語言源程序的格式一個匯編語言源程序由若干個邏輯段組成,每個邏輯段都有一個段名,由段定義語句SEGMENT來定義,以ENDS語句結束。通常,源程序中有代碼段、數據段、堆棧段和附加數據段。一般來講,代碼段是必不可少的。數據段和附加數據段用來在內存中建立一個適當容量的工作區以存放常量和變量,并作為算術運算或I/O接口傳送數據的工作區;堆棧段則是在內存區中建立的一個堆棧區,用以在中斷和過程(或子程序)調用、各模塊之間傳遞參數時使用。返回下一頁5.1匯編語言的程序與語句5.1.2 匯編語言的語句1.語句的種類與格式(1)語句的種類匯編語言的語句有3種基本類型:①指令語句:是可執行語句,由CPU指令組成。匯編時,匯編程序將指令語句翻譯成相應的機器目標代碼。②偽指令語句:在匯編過程中告訴匯編程序如何進行匯編,如定義數據、分配存儲空間、定義段以及定義過程等,但不會產生機器目標代碼。只有通過偽指令的組織,指令序列才能夠在內存中正確地放置和執行。上一頁返回下一頁5.1匯編語言的程序與語句③宏指令語句:將需多次使用的程序段以某個宏名進行定義(稱為宏定義)即可得到一條宏指令語句。每次需要該程序段時,可用宏指令名來代替(稱為宏調用)。當匯編程序對這條宏指令語句進行匯編時,會將該程序段中的指令序列翻譯成相應的機器目標代碼序列(稱為宏展開)。使用宏指令語句可避免重復書寫,使源程序更加簡潔。(2)語句的格式匯編語言的語句可以由1~4部分組成:上一頁返回下一頁5.1匯編語言的程序與語句2.語句中的操作數(1)常量操作數常量是指令中出現的固定值,常量可分為數值常量和字符串常量,無屬性。數值常量:有十進制、二進制、八進制、十六進制等幾種表示形式。匯編語言中的數值常量的首位是數字,如B7H應寫成0B7H;否則,匯編時其將被視為符號。 字符串常量:是由單引號括起來的一個或幾個字符,如‘AB’、‘About’。字符的值為其ASCII碼值。由于在匯編時,字符都以ASCII碼形式存放在內存單元中,因此,字符串‘AB’與4142H等價。上一頁返回下一頁5.1匯編語言的程序與語句(2)寄存器操作數操作數部分是寄存器名,如AX、SI、DS、CL等。(3)存儲器操作數存儲器操作數分為標號和變量兩種:標號代表一條指令的符號地址,這個地址一定在代碼段內。標號可作為轉移、過程調用或循環控制指令的操作數,如指令JMPNEXT中的NEXT。變量實質上是存放在內存單元中的數據。為了便于訪問,變量都有變量名,變量名為存儲單元中某個數據區的名字,即數據區的符號地址。在指令中,變量名可作為存儲器操作數,其通常都位于數據段或堆棧段中。上一頁返回下一頁5.1匯編語言的程序與語句(4)表達式操作數匯編語言中的表達式可由各種操作數、運算符和操作符組成。按其性質來分,表達式可以有兩種:數值表達式:是指用運算符將數值常量、字符串常量等連接而成的表達式。匯編時,由匯編程序計算出數值表達式的數值結果,其只有大小,沒有屬性。地址表達式:是指用運算符或操作符將常量、變量、標號或寄存器的內容連接而成的表達式。它的值表示存儲器地址(偏移地址),其具有3種屬性:段、偏移量、類型。例如:BYTEPTR[AX+5];指定DS段內的存儲單元[AX+5]中的內容為字節屬性。上一頁返回下一頁5.1匯編語言的程序與語句3.運算符
MASM宏匯編中有3種運算符,如表5-1所示。運算符用以實現對操作數的運算。4.操作符操作符用以完成對操作數屬性的獲取、定義或修改等。操作符可分為分析操作符和合成操作符,如表5-2所示。5.操作符的優先級在匯編語言中,當各種運算符或操作符同時出現在一個地址表達式或數值表達式中時,它們具有不同的優先級,見表5-3。對于具有相同優先級別的操作,按從左到右的順序進行運算。上一頁返回5.2 匯編語言的偽指令5.2.1 符號定義偽指令在匯編語言中,變量名、標號、過程名、指令名、指令助記符、寄存器名等統稱為符號。符號定義偽指令可以為一個符號重新命名。1.表達式賦值偽操作EQU
指令格式:符號名EQU 表達式
EQU用來給表達式賦予一個符號名(可以是變量或標號,這取決于表達式的類型),但并不申請分配存儲空間;另外,還可以賦予表達式新的類型屬性。此后,程序中凡需要用到該表達式之處就可以用表達式名來代替了。指令格式中的表達式可以是任何有效的操作數格式,既可以是數值常量、變量或標號,也可以是數值表達式、地址表達式。返回下一頁5.2 匯編語言的偽指令2.等號偽操作“=”
指令格式:符號名=表達式“=”與EQU的功能類似,也可作為賦值偽操作使用。它們之間的區別是EQU偽操作不允許在同一個源程序中對同一個符號重復定義,而用“=”定義的符號則允許被重復定義。由此可見,EQU與“=”不能同時使用。上一頁返回下一頁5.2 匯編語言的偽指令5.2.2 數據定義偽指令數據定義偽指令可用來為一個數據項預置初值(即初始化存儲單元)、為該數據項分配存儲單元,并可給這個存儲單元指定一個“符號名”,即變量名;另外,數據定義偽指令還可以指定變量的類型。匯編時,匯編程序會把初始值裝入所定義的存儲單元中。指令格式:[變量名]數據定義符操作數[,操作數,…]
其中,變量名是可選項;操作數是賦給變量的初值,多個相同類型的變量可以在一條語句中定義。常用的數據定義符如下:上一頁返回下一頁5.2 匯編語言的偽指令
DB:定義字節變量(變量類型為BYTE),每個字節變量占一個字節存儲單元。
DW:定義字變量(變量類型為WORD),每個變量占兩個字節存儲單元。變量在內存中存放時,遵循“低字節在前,高字節在后”的內存存放原則。
DD:定義雙字變量(變量類型為DWORD),每個變量占四個字節存儲單元。變量在內存中存放時,同樣遵循內存存放原則。上一頁返回下一頁5.2 匯編語言的偽指令5.2.3 段定義偽指令程序存儲器的物理地址是由段地址和偏移地址組合而成。匯編程序在把源程序轉換為目標文件(.OBJ)后,還必須確定標號或變量的偏移地址,并且要把有關信息通過目標模塊傳送給連接程序LINK,以便連接程序把不同的段和模塊連接在一起,形成一個可執行文件。SEGMENT和ENDS偽指令用來把程序模塊中的語句分成若干個邏輯段。指令格式:上一頁返回下一頁5.2 匯編語言的偽指令指令功能:指出段名及段的各種屬性格,并指示段的起始位置和結束位置。(1)定位類型定位類型有以下4種: BYTE:表明本段以字節方式定位,即段可以從任何地址開始。此時,本段的起始地址緊接在前一個段的后面。 WORD:表明本段以字方式定位,即段地址必須為偶數。 PARA:表明本段的起始地址必須以節(1節為16個字節)方式定位,即段起始地址的最低的16進制數位必須為0(即XXXX0H)。該定位類型為隱含類型,可缺省。 PAGE:表明本段必須以頁(1頁為256個字節)方式定位,即段起始地址的最低兩個16進制數位必須為0(即XXX00H)。上一頁返回下一頁5.2 匯編語言的偽指令(2)組合類型組合類型又稱連接類型。它指示連接程序LINK,如何將本模塊與其它模塊中的同名段連接起來。組合類型有以下6種:① NONE:表明本段與其它段無邏輯關系,具有自己獨立的段起始地址。該組合類型為隱含類型,可缺省。②PUBLIC:表明連接程序LINK將本段與其它模塊中類型為PUBLIC的同名段,按順序連接成一個大的邏輯段(共用同一段地址),連接順序由連接命令指定。采用PUBLIC組合類型,可將不同模塊中相同段名的若干小段拼裝成一個大的、具有相同段起始地址的物理段。上一頁返回下一頁5.2 匯編語言的偽指令③STACK:與PUBLIC的含義相同。但連接時,僅將具有STACK類型的同名段,按順序連接成一個大的堆棧段,由各模塊共享,并將SS初始化為這個堆棧段的首地址,將SP初始化為段內最大偏移地址。如果在定義堆棧段時沒有將其說明為STACK類型(此時,LINK程序會給出一個警告信息:NOSTACKSEGMENT,但該警告并不影響程序的運行),則需要在程序中用指令設置SS和SP的值。④ MEMORY:表明連接程序將該段指定在所有其它段的后面(在高地址區)。如果有多個MEMORY類型的邏輯段,則匯編程序將遇到的第一個段作為MEMORY段,其它段則被當做COMMON段。⑤ AT表達式:可使段的起始地址為由表達式所計算出來的16位段地址,連接程序將把該段裝在由此段基址所指定的內存中。上一頁返回下一頁5.2 匯編語言的偽指令(3)類別名在連接幾個程序模塊時,連接程序會將類別名相同的所有邏輯段,依次存放在連續的內存區中,但它們仍然是不同的段;若本邏輯段沒有類別名,則將它與其它無類別名的邏輯段放在一起。類別名必須放在單引號,典型的類別名為‘DATA’,‘CODE’和‘STACK’,也可由用戶任意指定,但不能與程序中其它符號名或標號相重。上一頁返回下一頁5.2 匯編語言的偽指令2.段寄存器說明偽指令ASSUME
通常,ASSUME偽指令位于代碼段中,用來指示匯編程序,哪個段寄存器是其所對應邏輯段的段地址寄存器。當在程序中使用了該語句后,匯編程序就能將所設定的段作為當前可訪問的段來處理。使用ASSUMENOTHING則可取消前面由ASSUME所指定的段寄存器。應注意,ASSUME只是指定了某個段寄存器,而并未將段地址裝入相應的段寄存器,段寄存器的內容還需由MOV指令來完成;同樣,如果程序中有堆棧段,也需要把段地址裝入SS中。然而,代碼段則不需要這樣做,代碼段的這一操作是在程序初始化時完成的。但是,若在堆棧段定義時使用了組合類型STACK,則連接時,系統會自動初始化SS和SP,因而,源程序代碼段中可省去ASSUME語句中的對SS的說明部分。上一頁返回下一頁5.2 匯編語言的偽指令3.組定義偽指令GROUP
偽指令GROUP用于將程序中若干個不同名的段集合成一組,使它們都裝在一個物理段中,并賦予這個段集合一個組名。同一段組內的段的數目不受限制,且同一段組內的各段的組合類型和類別可以不同,但段組的總字節數不能超過64KB。這時,當程序在組內不同類型的段間運行時,可共用一個段寄存器,組內各段間的轉移都可視為段內轉移。指令格式:組名GROUP[段名,段名,…]上一頁返回下一頁5.2 匯編語言的偽指令4.定位偽指令ORG
定位偽指令ORG強行指定地址指針計數器的當前值,以改變數據或代碼在段中的偏移地址。指令格式1:ORG 表達式指令格式2:ORG $+表達式功能:格式1可直接將表達式的值(0~65535)置入地址計數器;格式2將語句ORG前程序計數器的現行值$加上表達式的值后置入地址計數器。上一頁返回下一頁5.2 匯編語言的偽指令5.2.4 過程定義偽指令過程也稱子程序,在程序中任何地方都可以調用它??刂茝闹鞒绦蜣D移到過程被稱為“調用”。過程結束后返回主程序。使用過程可以簡化源程序,并節省存儲空間及程序設計所花的時間,使程序結構簡潔清晰、減少編程工作量。過程定義偽指令格式:上一頁返回5.3 匯編語言程序設計基礎5.3.1 程序設計的一般步驟1.分析問題并建立相應的建立數學模型分析問題就是全面理解問題的意義和任務,把解決問題所需條件、原始數據、輸入和輸出信息、運行速度要求、運算精度要求和結果形式等搞清楚。建立數學模型是把問題數學化、公式化,這是把問題向計算機處理方式轉化的第一步驟。解決同一個問題可以有不同的算法,但它們的效率可能有很大的差別。有些問題比較直觀,可不去討論數學模型問題;有些問題符合某些公式或某些數學模型,可以直接利用;但有些問題沒有對應的數學模型可以利用,需要建立一些近似的數學模型去模擬問題。返回下一頁5.3 匯編語言程序設計基礎2.確定數學模型的算法在許多情況下,建立了數學模型后,并不能直接進行程序設計,還需要進一步確定符合計算機運算的算法。計算機的算法比較靈活,一般應優選一些邏輯簡單、運算速度快、精度高的算法用于程序設計;此外,還要考慮占用內存空間小、編程容易等特點。算法可由計算機語言、日常生活語言、表格、自定義關系圖或流程圖等按計算機能夠接受的方法進行描述。至于采用哪一種方式描述算法,有時還取決于習慣。本書將主要采用流程圖來描述數學模型。上一頁返回下一頁5.3 匯編語言程序設計基礎3.編制程序編制程序就是計算機語言的語法規定,書寫計算機程序以解決問題的過程。采用匯編語言編寫源程序時,應注意以下幾個問題:⑴詳細了解所用CPU的編程模型、指令系統、尋址方式和有關偽指令。匯編語言編程應按指令系統和偽指令的語法規則進行。⑵須考慮存儲空間分配問題,即在程序設計時要考慮分段結構。待執行的程序段應設在當前段(活動段)中;程序在運行時所需要的工作單元應盡可能設在CPU寄存器中,這樣存取速度快,而且操作方便。⑶程序結構問題。程序的結構應具有層次簡單、清晰、易讀、易維護等特點;程序結構可采用模塊化、通用子程序或宏指令結構。若程序運行時還伴隨著人機對話過程,此時還應考慮用戶在操作時的便捷性問題,并應給用戶一些提示性指導。⑷盡可能使用標號和變量來代替絕對地址和常數。上一頁返回下一頁5.3 匯編語言程序設計基礎4.程序調試程序調試是為了糾正程序中的錯誤,是程序設計的最后一步。程序調試之前,應進行靜態檢查,以盡可能地減少程序調試時的麻煩。程序調試的方法很多,如在編輯、匯編、連接過程中,或在進行調試軟件(如DEBUG)調試時都可以發現錯誤并設法修改源程序。5.編寫說明文件一個完整的軟件必須有相應的說明文件,這不僅方便用戶使用,也便于對程序的維護和擴充。說明文件主要包括程序的功能和使用方法、程序的基本結構和所采用的主要算法以及程序的必要說明和注意事項等。上一頁返回下一頁5.3 匯編語言程序設計基礎5.3.2 程序設計的基本方法1.順序結構程序這種程序的形式是程序的最基本形式,任何程序都離不開這種形式。計算機執行該類程序的方式是完全按照指令在內存中的存放順序,逐條執行指令語句,即在程序執行過程中不轉移、不循環,直到程序結束。對熟悉指令的編程人員來說,一般不必嚴格按前面講述的五個步驟設計這類簡單程序,而可以直接對給出的題目寫出源程序清單。上一頁返回下一頁5.3 匯編語言程序設計基礎2.分支結構程序分支程序是利用條件轉移指令,使程序執行到某一指令后,根據條件是否滿足,來決定程序的流向。這類程序使計算機有了判斷功能。常見的分支程序有以下三種形式,前兩種也稱為簡單分支結構,后一種稱為多分支結構。
IF-THEN型:也稱單純分支結構。滿足條件則轉向執行程序段1;否則,順序執行。
IF-THEN-ELSE型:也稱并行分支結構。滿足條件則執行程序段1;否則執行程序段2。然后,再順序執行后續的程序。
DO-CASE型:也稱選擇分支結構。該結構可視為多個并行分支的組合,依據程序的轉向開關——所設置的分支條件選擇轉向相應的程序段。上一頁返回下一頁5.3 匯編語言程序設計基礎3.循環結構程序(1)循環程序結構一般來講,循環程序有兩種基本結構:DO-WHILE結構(循環次數已知)和DO-UNTIL結構(循環次數未知)。每種結構均包含有三個基本部分:循環程序初始化、循環體和循環控制。(2)循環控制方式常用的循環控制方式有以下3種:計數控制:事先已知循環次數,通過加/減1計數來控制循環。條件控制:事先不知循環次數,通過判定某種條件真假來控制循環。狀態控制:通過實時測得的狀態或事先設定的二進制位狀態來控制循環。上一頁返回下一頁5.3 匯編語言程序設計基礎5.3.3 子程序設計與調用技術1.子程序設計與應用時應注意的問題(1)子程序的調用與返回子程序調用與返回通過CALL和RET指令來實現的。子程序的調用方式有近程調用、遠程調用、直接調用和間接調用。子程序調用實際是程序的轉移,但它與轉移指令有所不同:子程序調用指令CALL執行時要保護返回地址(每個子程序都必須用RET返回指令將壓入堆棧區的返回地址彈出送到IP或CS:IP中),而轉移指令則不考慮返回問題。上一頁返回下一頁5.3 匯編語言程序設計基礎(2)現場的保護與恢復若子程序中要用到主程序正在使用的某些寄存器或存儲器單元,而其中的內容在子程序運行后主程序還要繼續使用,則必須將它們壓入堆棧加以保護,在子程序結束后再將這些內容恢復。這種操作通常稱為現場的保護與恢復。上一頁返回下一頁5.3 匯編語言程序設計基礎(3)主程序與子程序之間的參數傳遞參數可以是數據或地址,它是主程序與子程序之間的數據通道。通常,將子程序需要從主程序中獲得的參數稱為入口參數,而將子程序需要返回給主程序的參數稱為出口參數,二者統稱為接口參數。傳遞參數需要主程序與子程序默契配合,否則,會產生錯誤結果或造成死機。參數傳遞的方式一般有以下三種方式:①寄存器傳遞②存儲單元傳遞③堆棧傳遞上一頁返回下一頁5.3 匯編語言程序設計基礎(4)子程序說明文件由于子程序有共享性,可被其它程序調用。因此,常為每個子程序編寫相應的說明文件。說明文件的內容大致如下:子程序名;功能描述,包括功能、技術指標(如執行時間)等;占用的寄存器和存儲單元;子程序的入口、出口參數及其傳送方式;嵌套哪些子程序;調用實例(可略)。上一頁返回下一頁5.3 匯編語言程序設計基礎2.子程序調用技巧子程序調用比較靈活,常用的調用技巧有:①子程序嵌套:子程序調用其它子程序的過程稱為子程序嵌套,嵌套的層次不限;②子程序遞歸:子程序調用子程序自身的過程稱為子程序遞歸;③可重入子程序:子程序被調用后沒有執行完,而又被另一個程序重復調用稱為可重入。這種形式一般用在多用戶系統;④協同子程序:兩個以上的子程序協同完成一項任務,且又相互調用,直到任務結束。上一頁返回下一頁5.3 匯編語言程序設計基礎5.3.4 DOS功能子程序的調用1.概述在匯編語言設計中,可以用ROM-BIOS的一些軟中斷和DOS系統功能調用來擴充匯編語言的功能。BIOS和DOS是兩組服務軟件,可為用戶提供各種與設備有關的例行子程序。用戶只需按照一定的要求填寫參數,即可調用這些子程序對計算機硬件I/O進行操作,而不必過多地涉及硬件組成邏輯。針對同一種操作,有時,DOS和BIOS都提供有類似的服務功能。BIOS是軟件系統中最低一級的軟件,它與硬件組成密切相關,是計算機硬件與其它程序之間的一個簡單的“接口”。由于BIOS緊密依賴于硬件系統,致使利用BIOS功能調用所編寫的程序,在硬件系統稍有差別的計算機上運行時,有時會出現不兼容現象,導致軟件兼容性變差;同時,BIOS調用時,必須準確說明讀寫位置(磁道和扇區號),才能正確讀寫信息。上一頁返回下一頁5.3 匯編語言程序設計基礎
DOS則在更高層次上為用戶提供服務功能。在DOS調用時,僅需引用文件名、目錄即可,不必指出讀寫信息在磁盤上的物理位置。通常,使用DOS調用比使用BIOS調用更加容易。因此,在可能時,應盡量使用DSO調用而不使用BIOS調用,以使程序既易于編寫、又便于調試。
DOS和BIOS功能調用都可采用軟中斷指令INTn來實現。其中,n為中斷調用類型號,其值為00~FFH。一般情況下,中斷號n小于20H的調用是BIOS調用,21H以上是DOS調用。上一頁返回下一頁5.3 匯編語言程序設計基礎2.基本DOS功能子程序鍵盤是PC機的主要輸入設備之一。DOS提供了相應的功能調用來獲取從鍵盤的輸入。鍵盤提供了三種基本類型的輸入鍵:字符鍵:如字母A~Z、a~z、數字0~9以及各種標點和符號。功能鍵:如空格、光標鍵、退格鍵、F1~F10(或F12)等。組合控制鍵:包括Shift、Ctrl、Alt。在高級語言的輸入函數里,可以輸入各種字符,但一般不能輸入功能鍵、組合鍵。上一頁返回下一頁5.3 匯編語言程序設計基礎(2)DOS顯示功能調用
PC機的顯示系統由一個監視器和一個顯示卡組成。根據顯示卡和監視器的不同,顯示系統可分為MDA(單顯)、CGA(彩顯)、VGA(高分辨率彩顯)及SuperVGA(超高分辨率彩顯)等許多種。絕大多數顯示系統都支持圖形顯示和字符顯示方式兩種方式。由DOS的21H號中斷提供的常見的顯示功能如表5-7所示。另外,采用DOS的顯示功能調用時,還可使用非顯示字符(功能字符),如響鈴(07H)、換行(0AH)、回車(0DH)、退格(08H)等。上一頁返回下一頁5.3 匯編語言程序設計基礎(3)DOS時間功能調用
DOS中還提供了用于讀寫系統時間的功能調用。由DOS的21H號中斷提供的常見的時間功能如表5-8所示。上一頁返回5.4 中斷服務程序設計1.中斷的基本概念中斷是指在CPU運行程序期間,被CPU內部或外部事件所打斷、暫停當前程序的執行而轉去執行一段特定的處理內部或外部事件程序的過程。這個處理特定事件的程序被稱為中斷處理程序(或中斷服務程序)。中斷控制方式的特點是:眾多外部設備進行I/O操作時,會隨機地產生中斷請求信號,請求主CPU處理。此時,主CPU依據不同外設的中斷優先級,對中斷請求進行排隊、響應,并暫停自己當前的工作,轉而調用一個中斷處理程序去處理該中斷事件。當完成該I/O操作后,(中斷)返回到原程序處繼續執行。此過程類似于過程的調用與返回。返回下一頁5.4 中斷服務程序設計通常,中斷可分為以下兩種類型:⑴內部中斷是指由于CPU執行某些指令后所產生的中斷。該類中斷與外部硬件電路無關,因此,也稱為軟件中斷。該類中斷包括:中斷指令INTn引起的中斷、除法出錯中斷INT0、單步中斷INT1和溢出中斷INT0(或INT4)。⑵外部中斷也稱硬件中斷,是指由CPU外部中斷請求引腳NMI(不可屏蔽中斷)和INTER(可屏蔽中斷)引起的中斷。上一頁返回下一頁5.4 中斷服務程序設計2.中斷服務程序(1)設計中斷服務程序時應注意的事項一般而言,外部中斷服務程序是用來處理較急迫的事務的,因此,其服務時間應盡量短。凡能由主程序完成的任務,就盡量不要由中斷服務程序來完成。這樣,可以避免對其它中斷設備的工作造成干擾。由于目前的DOS版本的內核是不可重入的,因此,外部中斷服務程序不要使用DOS系統的功能調用INT21H。例如,當主程序正在執行一個DOS系統功能調用時,有一個外部中斷產生,此時,若中斷服務程序又調用這個DOS系統功能,就出現了DOS重入,這是不允許的。中斷服務程序若要控制I/O設備,最好采用BIOS功能調用,或者對I/O接口直接編程。在中斷程序設計中,內部中斷和非屏蔽中斷服務程序的設計思路及方法相同,但非屏蔽中斷在PC機中有特殊的用途,一般不要輕易地改寫其中斷服務程序。上一頁返回下一頁5.4 中斷服務程序設計(2)中斷向量表在PC機系統中,系統分配給每一個中斷源一個確定的中斷類型碼,其長度為一個字節,故系統中最多允許有256個中斷源,其對應的中斷類型碼為0~255,其中:①類型碼0~4:為用系統定義的專用中斷,如INT4;②類型碼5~31:保留為系統使用,如INT21H;③類型碼32~255:可供用戶自行定義使用。上一頁返回下一頁5.4 中斷服務程序設計(3)設置中斷向量表在PC機中,可屏蔽中斷請求INTER可利用8259A中斷處理器來處理,但必須在設置中斷向量表之前,先將原中斷向量表中的內容保存起來,以便用戶執行后,可取出原中斷向量恢復到中斷向量表中??刹捎靡韵路绞皆O置中斷向量表:①利用傳送指令直接訪問中斷向量表中的相應存儲單元,寫入中斷向量。②利用串操作指令,完成中斷服務程序首地址的裝入上一頁返回5.5 模塊化程序設計5.5.1 模塊化程序設計概述1.模塊化程序設計的特點⑴不同模塊程序的編寫可由不同的程序設計人員來承擔,縮短了軟件設計周期;⑵單個模塊程序易于編寫、調試、修改和更新,提高了軟件質量;⑶程序的可讀性好;⑷便于同其它種類的程序設計語言聯合使用;⑸頻繁使用的任務可編制成模塊程序存在庫中,供多個程序使用。返回下一頁5.5 模塊化程序設計2.模塊化程序設計的一般步驟⑴分析和確定任務程序的總體設計目標;⑵將總體任務分解成若干模塊任務,按主模塊與子模塊之間的關系畫出模塊層次圖;⑶定義每個模塊的具體任務,明確各模塊之間的通信方式,寫出模塊說明;⑷編寫每個模塊的匯編語言源程序,并調試;⑸連接各個模塊,形成完整的可執行程序;同時,編寫程序說明文件。上一頁返回下一頁5.5 模塊化程序設計3.模塊化程序設計的基本原則⑴模塊的劃分應依據大小適中、功能單一的原則;⑵模塊各層間的關系要明確:每個模塊只供其上層模塊或同層模塊調用;⑶為了便于程序的調試和防止出錯,每個模塊最好只有一個入口和一個出口;⑷模塊化程序設計時,可采用結構化(即三種基本結構——順序結構、分支結構和循環結構)程序設計思想;還可以采用子程序結構。上一頁返回下一頁5.5 模塊化程序設計5.5.2 多模塊程序設計1.多模塊間的段組合如前所述,在進行段定義時,段定義偽指令SEGMENT的“組合類型”中提供了PUBLIC、COMMON、STACK、MEMORY4種選項。因此,將程序劃分為多個模塊后,每個模塊中都可以有多個同名或不同名的堆棧段、數據段和代碼段,這就為多模塊間的組合提供了多種選擇。通常在進行段定義時,主模塊設計堆棧段,子模塊則無須設計堆棧段。上一頁返回下一頁5.5 模塊化程序設計2.模塊化程序設計偽指令(1)模塊定義偽指令MASM宏匯編語言所提供的模塊化編程偽指令的指令格式如下:指令格式: NAME 模塊名┆(語句)END [標號]上一頁返回下一頁5.5 模塊化程序設計(2)模塊間通信偽指令除了上述的多模塊間的段組合問題以外,各模塊程序之間在相互連接時,還必須解決模塊層間數據互訪和共享的問題。于是,定義了外部說明符PUBLIC和EXTRN,指令格式如下:PUBLIC 標識符[,名字,…]EXTRN 標識符:類型[,標識符:類型,…]3.多模塊連接可用MASM命令分別對模塊程序MAIN.ASM和模塊程序SUB.ASM進行匯編,然后,用LINK命令將它們連接成文件名為MAIN.EXE的可執行文件MAIN.EXE:例如:MASMMAINlMASMSUBlLINKMAIN+SUBl上一頁返回下一頁5.5 模塊化程序設計5.5.3 匯編程序與C語言程序的連接1).模塊的外部調用說明通常,在進行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市防損考試題及答案
- 2024年項目管理職業考試全景試題及答案
- 2025年注會復習進度安排的科學性試題及答案
- 證券從業資格證歷年真題及答案
- 揭示2025年證券從業資格證考試選題原則試題及答案
- 2024年項目管理變更請求試題及答案
- 2025年國際金融理財師考試知識更新的必要性試題及答案
- 注冊會計師考試復習策略試題及答案
- 2024年項目管理考試的準備計劃試題及答案
- 2024項目管理考試時間安排試題及答案
- 2025-2030中國機電安裝工程行業市場現狀供需分析及市場深度研究發展前景及規劃可行性分析研究報告
- 2025年高考歷史總復習高中歷史必修二八大專題知識復習提綱
- 2025事業單位考試題庫及答案200題
- 健合集團筆試在線測評題
- 二年級《時間單位換算口算題(共100道)》專題練習訓練
- 互調干擾頻點計算小工具參考模板
- 304不銹鋼濕硫化氫應力腐蝕開裂案例分析
- 固體礦產勘查原始地質編錄細則
- 如何加強思想政治教育-增強教育的時代感和感召力
- 機械完整性管理ppt課件
- 中國藥科大學藥物分析第六版第十四章中藥制劑分析ppt課件
評論
0/150
提交評論