5匯編語言程序設(shè)計_第1頁
5匯編語言程序設(shè)計_第2頁
5匯編語言程序設(shè)計_第3頁
5匯編語言程序設(shè)計_第4頁
5匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 第五章匯編語言程序設(shè)計 難點(diǎn)和重點(diǎn) 1.變量通過偽指令DBDWDDDQDT來定義 DB定義的是字節(jié)變量,DW定義的是字變量;DD定義的是雙字變量,DQ定義的是長字變量;DT定義的是一個十字節(jié)變量。當(dāng)變量為D怖口DD型時,才可以作為地址表達(dá)式,此時應(yīng)遵循以下規(guī)則: (l)當(dāng)用DW定義地址表達(dá)式時,地址表達(dá)式中的變量名稱表示該變量的第一個存儲單元的偏移地址。 (2)當(dāng)用DD定義地址表達(dá)式時,低位字用于預(yù)置偏移地址,高位字用于預(yù)置段地址。 (3)地址表達(dá)式中的變量或標(biāo)號可與常數(shù)值相加減。對于變量來說運(yùn)算結(jié)果的類型不變;對標(biāo)號來說,運(yùn)算結(jié)果仍表示原標(biāo)號所在段中的偏移地址。 (4)變量或標(biāo)號不能與變量

2、或標(biāo)號相加,但可相減,結(jié)果是沒有屬性的純數(shù)值。 2 .源程序模塊 一個源程序模塊能允許包括多個代碼段和其它段,也允許多次使用ASSUM踣句,重新約定段寄存器和段 的關(guān)系。但ASSUMED句并不意味著匯編后這些段地址已經(jīng)裝入相應(yīng)的段寄存器中了,除了CS寄存器以 外,其它各個段寄存器的實(shí)際值,還要用MOV旨令來賦值,例如: MYCODESEGMENT ASSUMECSMYCODEDSMYDATAES:MYEXTRASS:MYSTACK STARTMOVAX,MYDATA MOVDS,AX MOVAX,MYEXTRA MOVES,AX MOVAX,MYSTACK MOVSS,AX MYCODEEND

3、S 然而,也不能只用賦值語句而將ASSUM踣句省略,這樣匯編程序就找不到所定義的各個段。 3 .跳轉(zhuǎn)表法 當(dāng)程序是CASE吉構(gòu),即需引出多個分支時,最好利用跳轉(zhuǎn)表法。其主要設(shè)計思想是:首先將n個選擇項 所對應(yīng)的n個分支程序的標(biāo)號存放在一個數(shù)據(jù)表(即跳轉(zhuǎn)表)中,然后判別程序是否滿足第一個條件,若滿足就根據(jù)分支程序標(biāo)號在跳轉(zhuǎn)表中存放的地址將程序轉(zhuǎn)入相應(yīng)的分支;否則繼續(xù)判別下個條件是否滿 足,。下面程序主要實(shí)現(xiàn)一組選擇項(5個)存于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)用其它過程,這里稱為過程的嵌套。一般來說,嵌套的層次是沒有限制的,只要堆??臻g允許即可,但當(dāng)嵌套層次較多時應(yīng)特別注意寄存器內(nèi)容的保護(hù)和恢復(fù),以免發(fā)生沖突。 當(dāng)子程序嵌套時,若某子程序要調(diào)用的子程序就是該子程序本身,則稱這種調(diào)用為子程序的遞歸調(diào)用。遞歸過程被遞歸調(diào)用時必須保證不破壞前邊調(diào)用所用到的參數(shù)及產(chǎn)生的結(jié)果,否則,就不能求出最后結(jié)果。 此外,遞歸過程還必須具有遞歸結(jié)束的條件,以便在遞歸調(diào)用一定次數(shù)后退出,否則,遞歸調(diào)用將無限地 嵌套下去。為了能在每次遞歸調(diào)用后保留該次所用到的參數(shù)和運(yùn)行結(jié)果,必須對每次遞歸調(diào)用所用到的參 數(shù)和運(yùn)行結(jié)果都專門分配一

6、個存儲區(qū)域。通常將一次遞歸調(diào)用所存儲的信息稱為幀,一幀信息包括遞歸調(diào) 用時的入口參數(shù)、寄存器內(nèi)容及返回地址等。存儲每次遞歸調(diào)用每幀信息的最好方法是采用堆棧,每次遞歸調(diào)用時用PUSH旨令將一幀信息壓入堆棧;每次返回時,再從堆棧中彈出一幀信息。 5 .過程的重入 當(dāng)一個公用子程序被某一個程序調(diào)用且還未執(zhí)行完時,被另一個程序中斷。同時,后一個程序執(zhí)行時又一 次調(diào)用該公用子程序,這樣公用子程序便被再一次進(jìn)入。若該公用子程序的設(shè)計能保證兩次調(diào)用都得到正 確結(jié)果,則稱該公用子程序具有可重入性。保證子程序可重入性的方法,通常也是將每次調(diào)用子程序時所 用到的參數(shù)和中間結(jié)果逐層壓入堆棧,以達(dá)到每次調(diào)用的結(jié)果都能

7、正確保存的目的。 5.1 偽操作命令(偽指令共有20條,常用的有以下幾條:) 5.1.1 數(shù)據(jù)定義語句 (l)賦值偽指令EQU當(dāng)某個表達(dá)式被多次引用時,常采用給這個表達(dá)式賦一個名稱,這樣源程序中就可 以以名稱代替表達(dá)式;另外常使用標(biāo)號來代表數(shù)據(jù),數(shù)據(jù)地址或程序地址。偽指令EQUW兩種格式,即 名稱EQUB1達(dá)式,如: XYZEQU2000H,定義后XYZ的值就為2000H 名稱EQU定義過的名稱或標(biāo)號,如: ABCEQUxyz定義后ABC的值就為xyz的值,即2000H (2)定義變量(分配存儲單元)偽指令:也即給變量分配內(nèi)存的偽指令,這些偽指令是:DBDWDDDQ DT (3)定義存儲單元類

8、型偽指令:定義存儲單元類型的偽指令并不是單獨(dú)使用,而是和指令結(jié)合起來使用的。 利用這些偽指令,對存儲單元類型進(jìn)行規(guī)定。例如: INCBYTEPTRDI;DI所指存儲單元為字節(jié)型 JMPDWORDPTR2000H;2000H開始的4個存 ;儲單元為雙字型 5.1.2 表達(dá)式賦值語句 ORGfe指令。偽指令ORG!來規(guī)定目標(biāo)程序存放單元的偏移量。它的格式如下: OR部達(dá)式 匯編程序ASM-86規(guī)定ORGfe指令不能帶標(biāo)識符,如:START:ORG2000是非法語句。 如果在源程序中的第一條指令用了如下偽指令: ORG2000H 則匯編程序?qū)阎噶钪羔業(yè)P的值置成2000H,目標(biāo)程序的第一個字節(jié)將放

9、在2000H單元,后面的程序就 會依次順序存放。當(dāng)遇到另一條。ORCm句時,目標(biāo)程序的存放地址才會從新的ORGm句指定的地址單元存放。 5.1.3 段定義語句 定義段偽指令SEGMENT/ENDS要是用來定義段的名稱和范圍,還可指明段的定位類型、組合類型和分類 名。定義段偽指令的格式是: 段名1SEGMENT定位類型組合類型分類名 段名1ENDS 段定義格式中,帶有“”部分可根據(jù)需要選擇其有無。當(dāng)用于定義數(shù)據(jù)段、附加數(shù)據(jù)和堆棧段時,介 于SEGMENT/ENDS指令中間的語句,只能包括偽指令語句,不能包括指令語句。只有當(dāng)SEGMENT/ENDS義代碼段時,中間的語句才能為指令語句以及與指令有關(guān)

10、的偽指令語句。 一個段一經(jīng)定義,其中指令的標(biāo)號、變量等在段內(nèi)的偏移地址就已排定,它們都在同一個段地址控制之下, 整個段占用的存儲空間大小也就確定。由SEGMENT/ENDS定義的段小于64K 單元。 ASSUME指令。ASSUMED指令語句用來告訴匯編程序在指令執(zhí)行期間內(nèi)存的哪一段是數(shù)據(jù)段,哪一段是堆棧段,哪一段是代碼段。ASSUME偽指令的格式如下: ASSUM9寄存器名:段名符,段寄存器名:段名符, ASSUMED句只能安排在代碼段內(nèi),一般應(yīng)排在代碼段作為首指令。ASSUM踣句中的段寄存器名:段名 符可以有一項,也可以有多項,可以將這些項寫成多個ASSUM踣句。一個源程序模式至少包括一個段

11、, 當(dāng)代碼、數(shù)據(jù)及堆棧都集中在一個段內(nèi)時,ASSUM踣句的格式應(yīng)該是: ASSUMECS:MYCODE,SS:MYCODEASSUMEDS:MYCODE,ES:MYCODE5.1.4過程定義語句定義過程的偽指令PROCENDPNEARF口FAR在ASM-86語言中,過程的含義和子程序是一樣的。一個過程可以被其它程序所調(diào)用,它的最后一條指令總是返回指令,用以控制過程在執(zhí)行完畢后,返回到主程序。定義過程的偽指令總是成對出現(xiàn)的,在這兩條偽指令間的內(nèi)容就作為一個過程,即一個子程序。5.1.5程序開始和結(jié)束語句源程序結(jié)束偽指令END該指令是用來表明END語句處是源程序的終結(jié)。其格式如下:ENDB!達(dá)式這

12、里的表達(dá)式通常就是程序第一條指令的語句標(biāo)號。這樣程序在匯編、連接后,將目標(biāo)代碼裝入內(nèi)存之后準(zhǔn)備要執(zhí)行的起始地址由此標(biāo)號所決定。這個表達(dá)式也可以省去。5.1.6外部偽指令及對準(zhǔn)偽指定義訪問外部標(biāo)識符的偽指令EXTRNPUBLIC:當(dāng)多個模塊連接在一起時,可以利用定義訪問外部標(biāo)識符 的偽指令EXTRN,PUBLIC來引用其它模塊中的某些變量或標(biāo)號。定義結(jié)構(gòu)的偽指令STRUC/ENDS結(jié)構(gòu)定義的格式如下: 結(jié)構(gòu)名稱STRUC ;由DBDWDM指令所組成的語 ;句序列,每條語句定義一個字段標(biāo)識符 結(jié)構(gòu)名稱ENDS 結(jié)構(gòu)定義并不保留任何存儲空間也不為任何存儲單元賦值,之前,必須為結(jié)構(gòu) 分配空間或賦值。要

13、給結(jié)構(gòu)分配存儲空間或賦值,必須有一個援用該結(jié)構(gòu)的語句。其格式如下: 變量結(jié)構(gòu)名稱賦值說明 通過援用語句對結(jié)構(gòu)進(jìn)行存儲空何分配和預(yù)置之后,結(jié)構(gòu)及其字段就以變量的形式出現(xiàn),可以像使用其它 變量一樣使用。但對結(jié)構(gòu)的訪問必須用變量路徑名的方法進(jìn)行,路徑名的格式為:變量名,字段名 5.2 DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用 5.2.1 常用的軟件中斷 INT25H和INT26H軟件中斷指令,分別用來實(shí)現(xiàn)對磁盤指定扇區(qū)進(jìn)行讀/寫,這兩條指令執(zhí)行時,會分 別轉(zhuǎn)去執(zhí)行BIOS中的讀/寫磁盤扇區(qū)子程序。使用這兩條指令前,必須按表中入口參數(shù)的要求,對指定的寄存器分別設(shè)置讀/寫驅(qū)動器號,讀/寫扇區(qū)數(shù),起始邏輯扇區(qū)

14、號和讀/寫內(nèi)存的緩沖區(qū)首址,然后才執(zhí)行相應(yīng)的中斷命令。 用INT27H退出程序時,MS-DO噲把此用戶程序看成是系統(tǒng)的一個組成部分而駐留內(nèi)存,因此在其它程序裝配運(yùn)行時,這部分程序不會受到覆蓋。通常,用戶對自已編寫的中斷處理程序進(jìn)行裝配以后,常用這種方式返回控制臺命令接收狀態(tài),其它用戶程序可以用軟中斷方式調(diào)用這部分程序。必須注意DX中要設(shè) 置駐留程序的長度,否則返回后程序不能駐留。 5.2.2 DOS系統(tǒng)功能調(diào)用 DOS系統(tǒng)功能調(diào)用分別實(shí)現(xiàn)設(shè)備管理、文件讀/寫、文件管理和目錄管理等功能。每個子程序?qū)?yīng)一個功 能號,所有的系統(tǒng)功能調(diào)用的格式是一致的,按下面4步進(jìn)行: 5.3 系統(tǒng)功能號送到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 .目錄管理包括:查找目錄項、更改目錄項、建立子目錄、刪除子目錄等功能調(diào)用。 3 .文件管理包括:建立文件、打開文件、讀/寫文件、刪除文件等功能調(diào)用。 5.3匯編語言程序設(shè)計它僅僅是一種模式,因而在引用結(jié)構(gòu)和其字段 5.4.1 匯編語言源程序的框架結(jié)構(gòu)標(biāo)準(zhǔn)化匯編語言源程序采

16、用分段結(jié)構(gòu)。對于單模塊程序的基本框架如下所 模塊名(可省略) 符號定義區(qū)(可依據(jù)需要而定) 外部符號名說明(依實(shí)際需要而定) 公共符號名說明(依實(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òu)成的程序。堆棧段和數(shù)據(jù)段依據(jù)實(shí)際要求而決定。數(shù)據(jù)段用來定義變量,定義所需要的數(shù)據(jù)常數(shù)及預(yù)置存儲空間,中間都是由偽指令語句構(gòu)成。堆棧段依需要而定,如果用戶使用堆棧操作,最NAME EQU EXTRN PUBLIC 數(shù)據(jù)段名(如DATA) 變量定義 預(yù)置存儲空間 數(shù)據(jù)段名(如DATA) ENDS 后使用用戶自己定義的存儲空間;若沒有定義 堆棧段,將自動使用系統(tǒng)定義的堆棧區(qū)。過程可放在代

18、碼段,也可單獨(dú)建立一個過程段(另一個代碼段)。 EQM放在數(shù)據(jù)段、代碼段,宏指令一般放在程序的開始。PUBLIC可放在程序的任何一行。 因為各邏輯段通過段寄存器尋址,所以必須在代碼程序的開頭給相應(yīng)的段寄存器賦值(裝入地址)。 ASSUM防指令僅僅是指明了各邏輯段與段寄存器的對應(yīng)關(guān)系,即該邏輯段是什么屬性的邏輯段,并沒有對段寄存器賦值。因此,必須在程序的開頭先進(jìn)行.DSSS、ES偌存在擴(kuò)展段)的段基址裝入。 5.4.2 程序設(shè)計基本步驟 對于給定的課題進(jìn)行程序設(shè)計,一般應(yīng)按下述步驟進(jìn)行。 .分析課題 對于實(shí)際的課題任務(wù)要有一個明確的認(rèn)識,例如已知條件是什么,輸入/輸出是什么,現(xiàn)場的工藝過程和工序

19、,對運(yùn)算的精度和速度有什么要求等要有一個全面的理解。 .確定算法 把實(shí)際問題轉(zhuǎn)化成計算機(jī)求解的具體步驟和方法,而程序是來描述算法的。在計算機(jī)控制系統(tǒng)中, 依據(jù)某種算法實(shí)現(xiàn)對現(xiàn)場設(shè)備的控制稱為控制算法。盡可能選擇多種算法,比較其優(yōu)缺點(diǎn),結(jié)合具體情況選擇其中最適用的一種。 .畫出流程圖 依據(jù)算法,使用框狀圖形符號,加上簡明的文字說明,用以描述解決問題的具體邏輯步驟和方法, 這種框狀圖形符號稱為流程圖。流程圖的國家標(biāo)準(zhǔn)為CB1526-89,也有國際標(biāo)準(zhǔn),二者基本一致。 .存儲器資源分配 編寫程序前要進(jìn)行資源分配,例如程序區(qū)和數(shù)據(jù)區(qū)如何安排,工作單元分配,變量的名稱,最好畫出一個詳細(xì)的存儲分配的明細(xì)表

20、,以便編程時隨時查閱。 .編寫程序 應(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è)計應(yīng)注意的問題 1.程序模塊化:對于復(fù)雜的,大型的程序?qū)⑵鋭澐譃槿舾蓚€相對獨(dú)立的功能模塊(一般編為過程),每個模塊可以單獨(dú)編寫,單獨(dú)匯編,單獨(dú)調(diào)試。這種相對獨(dú)立的模塊程序易于分析和修改,維護(hù)方便,而且一個程 序模塊可以為多個程序所調(diào)用。 .程序正確完整,具有容錯功能。程序設(shè)計編寫完畢后,要反復(fù)進(jìn)行測試,把可能出現(xiàn)的故障的錯誤都要考慮在內(nèi),并且盡可能在調(diào)試價段予以排除。對

21、于程序中不符合要求的運(yùn)算錯誤和干擾錯誤,要給出相應(yīng)“錯誤”的信息提示,對某些錯誤應(yīng)能自動校正修復(fù)。 .算法的可靠性和合理性。選擇算法時,要比較多種算法方案。雖然解決一個問題可以有多種算法,但效率和精度可能有很大差別,應(yīng)依據(jù)實(shí)際需要而定。例如,盡量減小運(yùn)算中的舍入誤差,查表法代替復(fù)雜的函數(shù)運(yùn)算等。 .實(shí)時性要求高的工程控制程序,要充分考慮軟件執(zhí)行速度。例如采樣速率、控制量的計算時間 等。 5.3.4程序的基本結(jié)構(gòu)與基本程序設(shè)計 2.程序設(shè)計初步 (1)程序是人們編寫的、由計算機(jī)硬件執(zhí)行的一系列指令。編寫程序的過程稱為程序設(shè)計。由機(jī)器指令的 二進(jìn)制代碼組成的程序稱為機(jī)器語言程序。這是計算機(jī)直接能夠

22、識別的程序。 (2)簡單程序一按照指令的書寫順序依次執(zhí)行的程序。 (3)分支程序一采用條件轉(zhuǎn)移指令進(jìn)行判斷、使程序的流程不再是一條順序執(zhí)行的直線,而變?yōu)橛稍S多分 支組成的樹形結(jié)構(gòu),其中每個分支只有在滿足給定條件時才被執(zhí)行。 (4)循環(huán)程序一是程序設(shè)計的一個技巧,當(dāng)程序處理的對象具有某種重復(fù)性的規(guī)律時,可用這種方法編寫 程序。 (5)子程序一一個完整的獨(dú)立的程序段,它可以多次被其它程序調(diào)用,并在這個程序段執(zhí)行完后返回到原 調(diào)用的程序處。 分支程序的設(shè)計 程序的分支主要是靠條件轉(zhuǎn)移指令來實(shí)現(xiàn)的。這里需要注意的是條件轉(zhuǎn)移語句都是近程跳轉(zhuǎn),若程序所要 轉(zhuǎn)移的地址超出其范圍時,則需利用一條無條件轉(zhuǎn)移語句

23、作為中轉(zhuǎn)。 循環(huán)程序的設(shè)計 循環(huán)程序的設(shè)計主要用于某些需要重復(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ù)的計數(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ù)如地址、變量的有規(guī)律的修正。 (3)循環(huán)控制部分是循環(huán)程序設(shè)計的關(guān)鍵。每個循環(huán)程序必須選擇一個控制循環(huán)程序運(yùn)行和結(jié)束的條件, 且如何

24、選擇一個合適的循環(huán)控制條件對一個循環(huán)程序的設(shè)計來說也是非常重要的。最常采用的循環(huán)控制條 件是循環(huán)次數(shù),即可先預(yù)置一個循環(huán)次數(shù)初值,每執(zhí)行一次,循環(huán)體將該計數(shù)值減1,直至循環(huán)計數(shù)值減 到0,便退出循環(huán)。 子程序的設(shè)計 子程序是一個獨(dú)立的程序段,能完成某些確定的功能,并能被其它程序調(diào)用。當(dāng)一個子程序被調(diào)用,且該子程序完成確定的功能后便返回調(diào)用程序處。 .過程的定義和調(diào)用 過程的定義是采用過程定義偽指令,其格式為: 過程名PROC屬性 RET 過程名ENDP 調(diào)用過程時只要在CALL指令后寫上該過程名即可,屬性字段用來指明過程的類型屬性是NEAR是FAR RET指令總是放在過程體的末尾,用來返回主程

25、序。 當(dāng)過程和主程序在同一代碼時,過程可定義為NEARBY,若過程和主程序不在一個代碼段時,則過程定 義為FAR屬性。 .寄存琴內(nèi)容的保護(hù)和恢復(fù) 通常主程序和過程的設(shè)計是分開進(jìn)行的,因而它們所使用的寄存器往往會發(fā)生沖突,所以在進(jìn)入過程時應(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ù)據(jù)設(shè)置(即入口參數(shù)

26、)好,過程執(zhí)行完畢返回主程序時也必須將過程運(yùn)行所得結(jié)果(即出口參數(shù))送給主程序。過程入口參數(shù)和出口參數(shù)的送入和送出稱為主程序和過程 間的參數(shù)傳送。參數(shù)傳送的方法主要有以下4種: (1)用CPU內(nèi)部的寄存器傳送參數(shù)。 (2)當(dāng)過程和主程序同在一個代碼段時,過程可以直接訪問該代碼段中的變量(即參數(shù))。 (3)通過地址表傳送變量地址。該方法是將所有變量的偏移地址順序存放在一張地址表中,然后通過寄存 器將地址表的地址傳送給過程,進(jìn)入過程后可用寄存器間接尋址方式從地址表中取出變量地址,以便訪問 所需變量。 (4)通過堆棧傳送參數(shù)或參數(shù)地址。該方法是:調(diào)用過程前在主程序中用PUSH旨令將參數(shù)地址壓入堆棧; 進(jìn)入過程后再用基址寄存器BP從堆棧中取出這些參數(shù)地址,并送入寄存器,以便寄存器以間接尋址方式 訪問所需變量。 匯編語言上機(jī)調(diào)試過程 匯編語言源程序的匯編、連接和裝入運(yùn)行 匯編語言是一種面向機(jī)器的符號語言,要想在計算機(jī)上運(yùn)行匯編語言程序,必須對源程序進(jìn)行匯編和連接。 下面是用匯編語言產(chǎn)生一個可執(zhí)行文件的過程: (l)建

溫馨提示

  • 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

提交評論