下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第五章匯編語言程序設(shè)計(jì) 難點(diǎn)和重點(diǎn) 1.變量通過偽指令DBDWDDDQDT來定義 DB定義的是字節(jié)變量,DW定義的是字變量;DD定義的是雙字變量,DQ定義的是長字變量;DT定義的是一個(gè)十字節(jié)變量。當(dāng)變量為D怖口DD型時(shí),才可以作為地址表達(dá)式,此時(shí)應(yīng)遵循以下規(guī)則: (l)當(dāng)用DW定義地址表達(dá)式時(shí),地址表達(dá)式中的變量名稱表示該變量的第一個(gè)存儲(chǔ)單元的偏移地址。 (2)當(dāng)用DD定義地址表達(dá)式時(shí),低位字用于預(yù)置偏移地址,高位字用于預(yù)置段地址。 (3)地址表達(dá)式中的變量或標(biāo)號(hào)可與常數(shù)值相加減。對(duì)于變量來說運(yùn)算結(jié)果的類型不變;對(duì)標(biāo)號(hào)來說,運(yùn)算結(jié)果仍表示原標(biāo)號(hào)所在段中的偏移地址。 (4)變量或標(biāo)號(hào)不能與變量
2、或標(biāo)號(hào)相加,但可相減,結(jié)果是沒有屬性的純數(shù)值。 2 .源程序模塊 一個(gè)源程序模塊能允許包括多個(gè)代碼段和其它段,也允許多次使用ASSUM踣句,重新約定段寄存器和段 的關(guān)系。但ASSUMED句并不意味著匯編后這些段地址已經(jīng)裝入相應(yīng)的段寄存器中了,除了CS寄存器以 外,其它各個(gè)段寄存器的實(shí)際值,還要用MOV旨令來賦值,例如: MYCODESEGMENT ASSUMECSMYCODEDSMYDATAES:MYEXTRASS:MYSTACK STARTMOVAX,MYDATA MOVDS,AX MOVAX,MYEXTRA MOVES,AX MOVAX,MYSTACK MOVSS,AX MYCODEEND
3、S 然而,也不能只用賦值語句而將ASSUM踣句省略,這樣匯編程序就找不到所定義的各個(gè)段。 3 .跳轉(zhuǎn)表法 當(dāng)程序是CASE吉構(gòu),即需引出多個(gè)分支時(shí),最好利用跳轉(zhuǎn)表法。其主要設(shè)計(jì)思想是:首先將n個(gè)選擇項(xiàng) 所對(duì)應(yīng)的n個(gè)分支程序的標(biāo)號(hào)存放在一個(gè)數(shù)據(jù)表(即跳轉(zhuǎn)表)中,然后判別程序是否滿足第一個(gè)條件,若滿足就根據(jù)分支程序標(biāo)號(hào)在跳轉(zhuǎn)表中存放的地址將程序轉(zhuǎn)入相應(yīng)的分支;否則繼續(xù)判別下個(gè)條件是否滿 足,。下面程序主要實(shí)現(xiàn)一組選擇項(xiàng)(5個(gè))存于AL寄存器中,要根據(jù)AL中為1的位將程序分別轉(zhuǎn) 移到相應(yīng)的分支: BRANCHSEGMT BRANTABDWROUTINE1 DWROUTINE2 DWROUTINES
4、DWROUTINE4 DWROUTINE5 BRANCHENDS ROUTINESEGMENT MAINPROCFAR ASSUMECS:ROUTINEDS:BRANCH STARTPUSHDS SUBBX,BX PUSHBX MOVBX,BRANCH MOVDS,BX CMPAL,0 JEDONE LEABX,BRANCH CTINUESHRAL,l JNCNOTYET JMPWORDPTRBX NOTYETADDBX,TYPEBRANCH JMPCTINUE DONE ROUTINE! ROUTINEZ RET MAINENDP ROUTINEENDS ENDSTART 4 .過程的嵌套、
5、遞歸調(diào)用和可重入性 過程也可以作為調(diào)用程序去調(diào)用其它過程,這里稱為過程的嵌套。一般來說,嵌套的層次是沒有限制的,只要堆棧空間允許即可,但當(dāng)嵌套層次較多時(shí)應(yīng)特別注意寄存器內(nèi)容的保護(hù)和恢復(fù),以免發(fā)生沖突。 當(dāng)子程序嵌套時(shí),若某子程序要調(diào)用的子程序就是該子程序本身,則稱這種調(diào)用為子程序的遞歸調(diào)用。遞歸過程被遞歸調(diào)用時(shí)必須保證不破壞前邊調(diào)用所用到的參數(shù)及產(chǎn)生的結(jié)果,否則,就不能求出最后結(jié)果。 此外,遞歸過程還必須具有遞歸結(jié)束的條件,以便在遞歸調(diào)用一定次數(shù)后退出,否則,遞歸調(diào)用將無限地 嵌套下去。為了能在每次遞歸調(diào)用后保留該次所用到的參數(shù)和運(yùn)行結(jié)果,必須對(duì)每次遞歸調(diào)用所用到的參 數(shù)和運(yùn)行結(jié)果都專門分配一
6、個(gè)存儲(chǔ)區(qū)域。通常將一次遞歸調(diào)用所存儲(chǔ)的信息稱為幀,一幀信息包括遞歸調(diào) 用時(shí)的入口參數(shù)、寄存器內(nèi)容及返回地址等。存儲(chǔ)每次遞歸調(diào)用每幀信息的最好方法是采用堆棧,每次遞歸調(diào)用時(shí)用PUSH旨令將一幀信息壓入堆棧;每次返回時(shí),再從堆棧中彈出一幀信息。 5 .過程的重入 當(dāng)一個(gè)公用子程序被某一個(gè)程序調(diào)用且還未執(zhí)行完時(shí),被另一個(gè)程序中斷。同時(shí),后一個(gè)程序執(zhí)行時(shí)又一 次調(diào)用該公用子程序,這樣公用子程序便被再一次進(jìn)入。若該公用子程序的設(shè)計(jì)能保證兩次調(diào)用都得到正 確結(jié)果,則稱該公用子程序具有可重入性。保證子程序可重入性的方法,通常也是將每次調(diào)用子程序時(shí)所 用到的參數(shù)和中間結(jié)果逐層壓入堆棧,以達(dá)到每次調(diào)用的結(jié)果都能
7、正確保存的目的。 5.1 偽操作命令(偽指令共有20條,常用的有以下幾條:) 5.1.1 數(shù)據(jù)定義語句 (l)賦值偽指令EQU當(dāng)某個(gè)表達(dá)式被多次引用時(shí),常采用給這個(gè)表達(dá)式賦一個(gè)名稱,這樣源程序中就可 以以名稱代替表達(dá)式;另外常使用標(biāo)號(hào)來代表數(shù)據(jù),數(shù)據(jù)地址或程序地址。偽指令EQUW兩種格式,即 名稱EQUB1達(dá)式,如: XYZEQU2000H,定義后XYZ的值就為2000H 名稱EQU定義過的名稱或標(biāo)號(hào),如: ABCEQUxyz定義后ABC的值就為xyz的值,即2000H (2)定義變量(分配存儲(chǔ)單元)偽指令:也即給變量分配內(nèi)存的偽指令,這些偽指令是:DBDWDDDQ DT (3)定義存儲(chǔ)單元類
8、型偽指令:定義存儲(chǔ)單元類型的偽指令并不是單獨(dú)使用,而是和指令結(jié)合起來使用的。 利用這些偽指令,對(duì)存儲(chǔ)單元類型進(jìn)行規(guī)定。例如: INCBYTEPTRDI;DI所指存儲(chǔ)單元為字節(jié)型 JMPDWORDPTR2000H;2000H開始的4個(gè)存 ;儲(chǔ)單元為雙字型 5.1.2 表達(dá)式賦值語句 ORGfe指令。偽指令ORG!來規(guī)定目標(biāo)程序存放單元的偏移量。它的格式如下: OR部達(dá)式 匯編程序ASM-86規(guī)定ORGfe指令不能帶標(biāo)識(shí)符,如:START:ORG2000是非法語句。 如果在源程序中的第一條指令用了如下偽指令: ORG2000H 則匯編程序?qū)阎噶钪羔業(yè)P的值置成2000H,目標(biāo)程序的第一個(gè)字節(jié)將放
9、在2000H單元,后面的程序就 會(huì)依次順序存放。當(dāng)遇到另一條。ORCm句時(shí),目標(biāo)程序的存放地址才會(huì)從新的ORGm句指定的地址單元存放。 5.1.3 段定義語句 定義段偽指令SEGMENT/ENDS要是用來定義段的名稱和范圍,還可指明段的定位類型、組合類型和分類 名。定義段偽指令的格式是: 段名1SEGMENT定位類型組合類型分類名 段名1ENDS 段定義格式中,帶有“”部分可根據(jù)需要選擇其有無。當(dāng)用于定義數(shù)據(jù)段、附加數(shù)據(jù)和堆棧段時(shí),介 于SEGMENT/ENDS指令中間的語句,只能包括偽指令語句,不能包括指令語句。只有當(dāng)SEGMENT/ENDS義代碼段時(shí),中間的語句才能為指令語句以及與指令有關(guān)
10、的偽指令語句。 一個(gè)段一經(jīng)定義,其中指令的標(biāo)號(hào)、變量等在段內(nèi)的偏移地址就已排定,它們都在同一個(gè)段地址控制之下, 整個(gè)段占用的存儲(chǔ)空間大小也就確定。由SEGMENT/ENDS定義的段小于64K 單元。 ASSUME指令。ASSUMED指令語句用來告訴匯編程序在指令執(zhí)行期間內(nèi)存的哪一段是數(shù)據(jù)段,哪一段是堆棧段,哪一段是代碼段。ASSUME偽指令的格式如下: ASSUM9寄存器名:段名符,段寄存器名:段名符, ASSUMED句只能安排在代碼段內(nèi),一般應(yīng)排在代碼段作為首指令。ASSUM踣句中的段寄存器名:段名 符可以有一項(xiàng),也可以有多項(xiàng),可以將這些項(xiàng)寫成多個(gè)ASSUM踣句。一個(gè)源程序模式至少包括一個(gè)段
11、, 當(dāng)代碼、數(shù)據(jù)及堆棧都集中在一個(gè)段內(nèi)時(shí),ASSUM踣句的格式應(yīng)該是: ASSUMECS:MYCODE,SS:MYCODEASSUMEDS:MYCODE,ES:MYCODE5.1.4過程定義語句定義過程的偽指令PROCENDPNEARF口FAR在ASM-86語言中,過程的含義和子程序是一樣的。一個(gè)過程可以被其它程序所調(diào)用,它的最后一條指令總是返回指令,用以控制過程在執(zhí)行完畢后,返回到主程序。定義過程的偽指令總是成對(duì)出現(xiàn)的,在這兩條偽指令間的內(nèi)容就作為一個(gè)過程,即一個(gè)子程序。5.1.5程序開始和結(jié)束語句源程序結(jié)束偽指令END該指令是用來表明END語句處是源程序的終結(jié)。其格式如下:ENDB!達(dá)式這
12、里的表達(dá)式通常就是程序第一條指令的語句標(biāo)號(hào)。這樣程序在匯編、連接后,將目標(biāo)代碼裝入內(nèi)存之后準(zhǔn)備要執(zhí)行的起始地址由此標(biāo)號(hào)所決定。這個(gè)表達(dá)式也可以省去。5.1.6外部偽指令及對(duì)準(zhǔn)偽指定義訪問外部標(biāo)識(shí)符的偽指令EXTRNPUBLIC:當(dāng)多個(gè)模塊連接在一起時(shí),可以利用定義訪問外部標(biāo)識(shí)符 的偽指令EXTRN,PUBLIC來引用其它模塊中的某些變量或標(biāo)號(hào)。定義結(jié)構(gòu)的偽指令STRUC/ENDS結(jié)構(gòu)定義的格式如下: 結(jié)構(gòu)名稱STRUC ;由DBDWDM指令所組成的語 ;句序列,每條語句定義一個(gè)字段標(biāo)識(shí)符 結(jié)構(gòu)名稱ENDS 結(jié)構(gòu)定義并不保留任何存儲(chǔ)空間也不為任何存儲(chǔ)單元賦值,之前,必須為結(jié)構(gòu) 分配空間或賦值。要
13、給結(jié)構(gòu)分配存儲(chǔ)空間或賦值,必須有一個(gè)援用該結(jié)構(gòu)的語句。其格式如下: 變量結(jié)構(gòu)名稱賦值說明 通過援用語句對(duì)結(jié)構(gòu)進(jìn)行存儲(chǔ)空何分配和預(yù)置之后,結(jié)構(gòu)及其字段就以變量的形式出現(xiàn),可以像使用其它 變量一樣使用。但對(duì)結(jié)構(gòu)的訪問必須用變量路徑名的方法進(jìn)行,路徑名的格式為:變量名,字段名 5.2 DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用 5.2.1 常用的軟件中斷 INT25H和INT26H軟件中斷指令,分別用來實(shí)現(xiàn)對(duì)磁盤指定扇區(qū)進(jìn)行讀/寫,這兩條指令執(zhí)行時(shí),會(huì)分 別轉(zhuǎn)去執(zhí)行BIOS中的讀/寫磁盤扇區(qū)子程序。使用這兩條指令前,必須按表中入口參數(shù)的要求,對(duì)指定的寄存器分別設(shè)置讀/寫驅(qū)動(dòng)器號(hào),讀/寫扇區(qū)數(shù),起始邏輯扇區(qū)
14、號(hào)和讀/寫內(nèi)存的緩沖區(qū)首址,然后才執(zhí)行相應(yīng)的中斷命令。 用INT27H退出程序時(shí),MS-DO噲把此用戶程序看成是系統(tǒng)的一個(gè)組成部分而駐留內(nèi)存,因此在其它程序裝配運(yùn)行時(shí),這部分程序不會(huì)受到覆蓋。通常,用戶對(duì)自已編寫的中斷處理程序進(jìn)行裝配以后,常用這種方式返回控制臺(tái)命令接收狀態(tài),其它用戶程序可以用軟中斷方式調(diào)用這部分程序。必須注意DX中要設(shè) 置駐留程序的長度,否則返回后程序不能駐留。 5.2.2 DOS系統(tǒng)功能調(diào)用 DOS系統(tǒng)功能調(diào)用分別實(shí)現(xiàn)設(shè)備管理、文件讀/寫、文件管理和目錄管理等功能。每個(gè)子程序?qū)?yīng)一個(gè)功 能號(hào),所有的系統(tǒng)功能調(diào)用的格式是一致的,按下面4步進(jìn)行: 5.3 系統(tǒng)功能號(hào)送到AH寄存
15、器中, (2)入口參數(shù)送到指定寄存器中, (3)用INT21H指令執(zhí)行功能調(diào)用, (4)根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。 有些系統(tǒng)功能調(diào)用比較簡單,不需要設(shè)置入口參數(shù)或者沒有出口參數(shù)。DO繇統(tǒng)功能調(diào)用的功能 及入口/出口參數(shù)表,詳細(xì)見附錄。 1 .設(shè)備管理包括:鍵盤輸入、顯示輸出、設(shè)置磁盤緩沖器、選擇當(dāng)前盤等功能調(diào)用。 2 .目錄管理包括:查找目錄項(xiàng)、更改目錄項(xiàng)、建立子目錄、刪除子目錄等功能調(diào)用。 3 .文件管理包括:建立文件、打開文件、讀/寫文件、刪除文件等功能調(diào)用。 5.3匯編語言程序設(shè)計(jì)它僅僅是一種模式,因而在引用結(jié)構(gòu)和其字段 5.4.1 匯編語言源程序的框架結(jié)構(gòu)標(biāo)準(zhǔn)化匯編語言源程序采
16、用分段結(jié)構(gòu)。對(duì)于單模塊程序的基本框架如下所 模塊名(可省略) 符號(hào)定義區(qū)(可依據(jù)需要而定) 外部符號(hào)名說明(依實(shí)際需要而定) 公共符號(hào)名說明(依實(shí)際需要而定) SEGMENT參數(shù)(依據(jù)實(shí)際要求而定,可省略) 堆棧段名(如STACK)SEGMENT參數(shù)(依實(shí)際要求而定) 預(yù)置堆??臻g堆棧段名(如STACK)ENDS 代碼段名(如CODE)SEGMENT參數(shù)(依實(shí)際需要而定) ASSUME段寄存器指派 STARTMOVAX,DATA;段地址裝填 MOVDS,AX MOVAX,STACK MOVSS,AX 主程序體 MOVAH,4CH INT21H 過程名1PROC類型說明 過程體1 過程名1END
17、P 過程名2PROC類型說明 過程體2 過程名2ENDP 代碼段名(如CODE)ENDS ENDSTART 匯編語言源程序采用分段結(jié)構(gòu),包括代碼段、數(shù)據(jù)段和堆棧段。任何一個(gè)源程序至少有一個(gè)代碼段,用來放置指令性語句構(gòu)成的程序。堆棧段和數(shù)據(jù)段依據(jù)實(shí)際要求而決定。數(shù)據(jù)段用來定義變量,定義所需要的數(shù)據(jù)常數(shù)及預(yù)置存儲(chǔ)空間,中間都是由偽指令語句構(gòu)成。堆棧段依需要而定,如果用戶使用堆棧操作,最NAME EQU EXTRN PUBLIC 數(shù)據(jù)段名(如DATA) 變量定義 預(yù)置存儲(chǔ)空間 數(shù)據(jù)段名(如DATA) ENDS 后使用用戶自己定義的存儲(chǔ)空間;若沒有定義 堆棧段,將自動(dòng)使用系統(tǒng)定義的堆棧區(qū)。過程可放在代
18、碼段,也可單獨(dú)建立一個(gè)過程段(另一個(gè)代碼段)。 EQM放在數(shù)據(jù)段、代碼段,宏指令一般放在程序的開始。PUBLIC可放在程序的任何一行。 因?yàn)楦鬟壿嫸瓮ㄟ^段寄存器尋址,所以必須在代碼程序的開頭給相應(yīng)的段寄存器賦值(裝入地址)。 ASSUM防指令僅僅是指明了各邏輯段與段寄存器的對(duì)應(yīng)關(guān)系,即該邏輯段是什么屬性的邏輯段,并沒有對(duì)段寄存器賦值。因此,必須在程序的開頭先進(jìn)行.DSSS、ES偌存在擴(kuò)展段)的段基址裝入。 5.4.2 程序設(shè)計(jì)基本步驟 對(duì)于給定的課題進(jìn)行程序設(shè)計(jì),一般應(yīng)按下述步驟進(jìn)行。 .分析課題 對(duì)于實(shí)際的課題任務(wù)要有一個(gè)明確的認(rèn)識(shí),例如已知條件是什么,輸入/輸出是什么,現(xiàn)場的工藝過程和工序
19、,對(duì)運(yùn)算的精度和速度有什么要求等要有一個(gè)全面的理解。 .確定算法 把實(shí)際問題轉(zhuǎn)化成計(jì)算機(jī)求解的具體步驟和方法,而程序是來描述算法的。在計(jì)算機(jī)控制系統(tǒng)中, 依據(jù)某種算法實(shí)現(xiàn)對(duì)現(xiàn)場設(shè)備的控制稱為控制算法。盡可能選擇多種算法,比較其優(yōu)缺點(diǎn),結(jié)合具體情況選擇其中最適用的一種。 .畫出流程圖 依據(jù)算法,使用框狀圖形符號(hào),加上簡明的文字說明,用以描述解決問題的具體邏輯步驟和方法, 這種框狀圖形符號(hào)稱為流程圖。流程圖的國家標(biāo)準(zhǔn)為CB1526-89,也有國際標(biāo)準(zhǔn),二者基本一致。 .存儲(chǔ)器資源分配 編寫程序前要進(jìn)行資源分配,例如程序區(qū)和數(shù)據(jù)區(qū)如何安排,工作單元分配,變量的名稱,最好畫出一個(gè)詳細(xì)的存儲(chǔ)分配的明細(xì)表
20、,以便編程時(shí)隨時(shí)查閱。 .編寫程序 應(yīng)用匯編語言依據(jù)流程圖進(jìn)行程序編寫,要求程序?qū)哟吻宄?,?zhí)行速度快,且盡可能少占內(nèi)存,并且適當(dāng)?shù)丶右栽忈?。編寫程序后,利用PC機(jī)進(jìn)行交叉匯編、調(diào)試和修改。 .上機(jī)調(diào)試 5.4.3 匯編語言程序設(shè)計(jì)應(yīng)注意的問題 1.程序模塊化:對(duì)于復(fù)雜的,大型的程序?qū)⑵鋭澐譃槿舾蓚€(gè)相對(duì)獨(dú)立的功能模塊(一般編為過程),每個(gè)模塊可以單獨(dú)編寫,單獨(dú)匯編,單獨(dú)調(diào)試。這種相對(duì)獨(dú)立的模塊程序易于分析和修改,維護(hù)方便,而且一個(gè)程 序模塊可以為多個(gè)程序所調(diào)用。 .程序正確完整,具有容錯(cuò)功能。程序設(shè)計(jì)編寫完畢后,要反復(fù)進(jìn)行測試,把可能出現(xiàn)的故障的錯(cuò)誤都要考慮在內(nèi),并且盡可能在調(diào)試價(jià)段予以排除。對(duì)
21、于程序中不符合要求的運(yùn)算錯(cuò)誤和干擾錯(cuò)誤,要給出相應(yīng)“錯(cuò)誤”的信息提示,對(duì)某些錯(cuò)誤應(yīng)能自動(dòng)校正修復(fù)。 .算法的可靠性和合理性。選擇算法時(shí),要比較多種算法方案。雖然解決一個(gè)問題可以有多種算法,但效率和精度可能有很大差別,應(yīng)依據(jù)實(shí)際需要而定。例如,盡量減小運(yùn)算中的舍入誤差,查表法代替復(fù)雜的函數(shù)運(yùn)算等。 .實(shí)時(shí)性要求高的工程控制程序,要充分考慮軟件執(zhí)行速度。例如采樣速率、控制量的計(jì)算時(shí)間 等。 5.3.4程序的基本結(jié)構(gòu)與基本程序設(shè)計(jì) 2.程序設(shè)計(jì)初步 (1)程序是人們編寫的、由計(jì)算機(jī)硬件執(zhí)行的一系列指令。編寫程序的過程稱為程序設(shè)計(jì)。由機(jī)器指令的 二進(jìn)制代碼組成的程序稱為機(jī)器語言程序。這是計(jì)算機(jī)直接能夠
22、識(shí)別的程序。 (2)簡單程序一按照指令的書寫順序依次執(zhí)行的程序。 (3)分支程序一采用條件轉(zhuǎn)移指令進(jìn)行判斷、使程序的流程不再是一條順序執(zhí)行的直線,而變?yōu)橛稍S多分 支組成的樹形結(jié)構(gòu),其中每個(gè)分支只有在滿足給定條件時(shí)才被執(zhí)行。 (4)循環(huán)程序一是程序設(shè)計(jì)的一個(gè)技巧,當(dāng)程序處理的對(duì)象具有某種重復(fù)性的規(guī)律時(shí),可用這種方法編寫 程序。 (5)子程序一一個(gè)完整的獨(dú)立的程序段,它可以多次被其它程序調(diào)用,并在這個(gè)程序段執(zhí)行完后返回到原 調(diào)用的程序處。 分支程序的設(shè)計(jì) 程序的分支主要是靠條件轉(zhuǎn)移指令來實(shí)現(xiàn)的。這里需要注意的是條件轉(zhuǎn)移語句都是近程跳轉(zhuǎn),若程序所要 轉(zhuǎn)移的地址超出其范圍時(shí),則需利用一條無條件轉(zhuǎn)移語句
23、作為中轉(zhuǎn)。 循環(huán)程序的設(shè)計(jì) 循環(huán)程序的設(shè)計(jì)主要用于某些需要重復(fù)進(jìn)行的操作,主要使用循環(huán)指令LOORLOOP減LOOPN或條件轉(zhuǎn) 移指令。循環(huán)程序的結(jié)構(gòu)可分為設(shè)置循環(huán)初始狀態(tài)、循環(huán)體和循環(huán)控制條件3部分: (1)設(shè)置循環(huán)初始狀態(tài)主要是指設(shè)置循環(huán)次數(shù)的計(jì)數(shù)初值,以及其它為能使循環(huán)體正常工作的初始狀態(tài)等。 (2)循環(huán)體是指循環(huán)操作(重復(fù)執(zhí)行)的部分,包括循環(huán)的工 作部分及修改部分。循環(huán)的工作部分是實(shí)現(xiàn)程序功能的主要程序段;循環(huán)的修改部分是指當(dāng)程序循環(huán)執(zhí)行 時(shí),對(duì)一些參數(shù)如地址、變量的有規(guī)律的修正。 (3)循環(huán)控制部分是循環(huán)程序設(shè)計(jì)的關(guān)鍵。每個(gè)循環(huán)程序必須選擇一個(gè)控制循環(huán)程序運(yùn)行和結(jié)束的條件, 且如何
24、選擇一個(gè)合適的循環(huán)控制條件對(duì)一個(gè)循環(huán)程序的設(shè)計(jì)來說也是非常重要的。最常采用的循環(huán)控制條 件是循環(huán)次數(shù),即可先預(yù)置一個(gè)循環(huán)次數(shù)初值,每執(zhí)行一次,循環(huán)體將該計(jì)數(shù)值減1,直至循環(huán)計(jì)數(shù)值減 到0,便退出循環(huán)。 子程序的設(shè)計(jì) 子程序是一個(gè)獨(dú)立的程序段,能完成某些確定的功能,并能被其它程序調(diào)用。當(dāng)一個(gè)子程序被調(diào)用,且該子程序完成確定的功能后便返回調(diào)用程序處。 .過程的定義和調(diào)用 過程的定義是采用過程定義偽指令,其格式為: 過程名PROC屬性 RET 過程名ENDP 調(diào)用過程時(shí)只要在CALL指令后寫上該過程名即可,屬性字段用來指明過程的類型屬性是NEAR是FAR RET指令總是放在過程體的末尾,用來返回主程
25、序。 當(dāng)過程和主程序在同一代碼時(shí),過程可定義為NEARBY,若過程和主程序不在一個(gè)代碼段時(shí),則過程定 義為FAR屬性。 .寄存琴內(nèi)容的保護(hù)和恢復(fù) 通常主程序和過程的設(shè)計(jì)是分開進(jìn)行的,因而它們所使用的寄存器往往會(huì)發(fā)生沖突,所以在進(jìn)入過程時(shí)應(yīng) 將該過程所用寄存器的內(nèi)容保存起來,這稱為保護(hù)現(xiàn)場。過程返回主程序前,應(yīng)將這些寄存器內(nèi)容恢復(fù), 這稱為恢復(fù)現(xiàn)場.保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場通常分別用堆棧壓入指令和彈出指令來實(shí)現(xiàn)。須注意,并不是過程中用的所有寄存器內(nèi)容都要保護(hù),例如,若用寄存器在主程序和過程間傳遞參數(shù)就不需要保護(hù)。 .主程序和過程間的參數(shù)傳送在主程序調(diào)用過程時(shí),必須先把過程所需的初始數(shù)據(jù)設(shè)置(即入口參數(shù)
26、)好,過程執(zhí)行完畢返回主程序時(shí)也必須將過程運(yùn)行所得結(jié)果(即出口參數(shù))送給主程序。過程入口參數(shù)和出口參數(shù)的送入和送出稱為主程序和過程 間的參數(shù)傳送。參數(shù)傳送的方法主要有以下4種: (1)用CPU內(nèi)部的寄存器傳送參數(shù)。 (2)當(dāng)過程和主程序同在一個(gè)代碼段時(shí),過程可以直接訪問該代碼段中的變量(即參數(shù))。 (3)通過地址表傳送變量地址。該方法是將所有變量的偏移地址順序存放在一張地址表中,然后通過寄存 器將地址表的地址傳送給過程,進(jìn)入過程后可用寄存器間接尋址方式從地址表中取出變量地址,以便訪問 所需變量。 (4)通過堆棧傳送參數(shù)或參數(shù)地址。該方法是:調(diào)用過程前在主程序中用PUSH旨令將參數(shù)地址壓入堆棧; 進(jìn)入過程后再用基址寄存器BP從堆棧中取出這些參數(shù)地址,并送入寄存器,以便寄存器以間接尋址方式 訪問所需變量。 匯編語言上機(jī)調(diào)試過程 匯編語言源程序的匯編、連接和裝入運(yùn)行 匯編語言是一種面向機(jī)器的符號(hào)語言,要想在計(jì)算機(jī)上運(yùn)行匯編語言程序,必須對(duì)源程序進(jìn)行匯編和連接。 下面是用匯編語言產(chǎn)生一個(gè)可執(zhí)行文件的過程: (l)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鴻雁課程設(shè)計(jì)
- 2025年全球及中國電動(dòng)汽車車載一體化充電系統(tǒng)單元行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 課程設(shè)計(jì)模板網(wǎng)站電影
- 統(tǒng)計(jì)學(xué)軟件課課程設(shè)計(jì)
- 職高汽車專業(yè)的課程設(shè)計(jì)
- 銷售國家云平臺(tái)課程設(shè)計(jì)
- 網(wǎng)絡(luò)會(huì)計(jì)學(xué)原理課程設(shè)計(jì)
- 音響系統(tǒng)課課程設(shè)計(jì)
- 銅冶煉過程清潔生產(chǎn)-洞察分析
- 舞蹈敘事研究-洞察分析
- 企業(yè)年會(huì)攝影服務(wù)合同
- 電商運(yùn)營管理制度
- 二零二五年度一手房購房協(xié)議書(共有產(chǎn)權(quán)房購房協(xié)議)3篇
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 城市公共交通運(yùn)營協(xié)議
- 內(nèi)燃副司機(jī)晉升司機(jī)理論知識(shí)考試題及答案
- 2024北京東城初二(上)期末語文試卷及答案
- 2024設(shè)計(jì)院與職工勞動(dòng)合同書樣本
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 電工高級(jí)工練習(xí)題庫(附參考答案)
- 村里干零工協(xié)議書
評(píng)論
0/150
提交評(píng)論