版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章匯編語言程序設(shè)計 匯編語言就是用與操作功能含義相應(yīng)的縮寫英文字符組成的符號指令作為編程用的語言。使用匯編語言編寫的程序計算機是不能夠直接地識別和執(zhí)行的,必須經(jīng)過執(zhí)行匯編程序,匯編程序?qū)⒃次募D(zhuǎn)換成二進制編碼表示的目的文件(OBJ)的過程(將這個過程稱匯編)。之后經(jīng)過連接程序,使目標程序成為計算機可執(zhí)行的文件(EXE)。退出5.1匯編語言語法5.2匯編語言程序設(shè)計5.3匯編語言與C語言連接5.1匯編語言語法 5.1.1匯編語言的程序格式匯編語言程序是由指令、偽指令及宏指令組成的。一條完整的指令語句格式由以下四項內(nèi)容組成。[標號]<指令助記符>[目的操作數(shù)],[源操作數(shù)][;注釋]1.標號標號是一個用冒號結(jié)尾的名字,是可選項,用于標識程序中控制轉(zhuǎn)移的目標單元。
2.指令助記符操作項可以是指令、偽指令或宏指令的助記符,規(guī)定了CPU所要執(zhí)行的操作。如:MOV完成數(shù)據(jù)傳送操作,ADD完成加法操作。3.操作數(shù)操作數(shù)為1個或多個項組成,因指令而不同,目的操作數(shù)不僅參與指令操作,還暫存操作結(jié)果。指令中通常給出操作數(shù)地址,如寄存器、存儲器單元地址、變量名等。源操作數(shù)提供另一個操作對象,面向所有尋址方式,可以是常數(shù)、寄存器、標號、變量或表達式等。4.注釋注釋是可選項,以分號開始僅起到對源程序的解釋和說明的作用,以提高程序的可讀性。
5.l.2
匯編語言中的操作數(shù)和表達式
指令語句執(zhí)行操作的對象是操作數(shù),偽指令語句在匯編時服務(wù)的對象也是操作數(shù),操作數(shù)可以是常數(shù)、變量、表達式等。1.操作數(shù)常量在匯編時已有確定的值,在程序運行中,它不會發(fā)生變化。2.表達式表達式常以多種運算符來連接操作數(shù),其值是在程序匯編過程中進行計算的,在匯編語言中操作數(shù)運算符可分為:算術(shù)運算符、邏輯運算符、關(guān)系運算符、數(shù)值返回運算符、屬性修改運算符。
5.1.3偽指令在8086匯編語言中,提供了約20多條偽指令,這里介紹主要的幾條。
1.數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令主要是完成存儲單元分配、數(shù)值變量賦值及預(yù)置存儲空間等工作。格式:[變量名]<定義符><操作數(shù)項表>[;注解]功能:定義變量名并為變量分配存儲單元,同時將初值賦給相應(yīng)存儲單元。①變量名字段可有可無的,它用符號地址表示,它的后面不跟冒號.
②定義符字段用來說明偽指令的助記符,定義符有:
DB——定義為字節(jié),類型為1;
DW——定義字,類型為2;
DD——定義雙字,類型為4;
DQ——定義四字,類型為8;
DT——定義十字節(jié),類型為10;③操作數(shù)項可以是常數(shù)、表達式、字符串、變量和?,?用于預(yù)留存儲空間?(不存入數(shù)據(jù))。操作數(shù)項為字符串時,必須用單引號括起,且字符以ASCII碼形式存放在存儲單元中。操作數(shù)字段用重復(fù)定義偽指令DUP,如ARRAY1DB100DUP(?)。
④注解字段用來說明該偽指令的功能。
2.符號定義偽指令使用符號定義偽指令是將某些常數(shù)、表達式等用一特定符號來表示,從而大大簡化程序,這類偽指令特點不占用內(nèi)存單元。(1)等值語句格式:<名字>EQU <表達式>功能:為表達式取一個名字,即把表達式的值或符號賦給EQU左邊的名字,供以后引用。說明:EQU語句的名字不能重復(fù)定義。表達式可以是常數(shù)、變量、標號、指令助記符、字符串等。(2)等號語句格式:<名字>=<表達式>功能:與EQU相同。說明:等號語句可以重復(fù)定義,表達式只能是數(shù)值表達式。3.段定義偽指令
(1)格式:<段名>SEGMENT {語句體} <段名>ENDSSEGMENT表示定義段的開始,ENDS表示定義段的結(jié)束。功能:定義段名,規(guī)定邏輯段的定位要求及有關(guān)各段之間的連接關(guān)系。說明:段名是一個段的標識,又表示該段的段基址,由用戶自已給定。語句體,不同的段其內(nèi)容不一樣。若為代碼段,則語句體為指令語句序列;若為數(shù)據(jù)段、堆棧段等則多為偽指令語句序列。
(2)指定段寄存器偽指令格式:ASSUME<段寄存器>:<段名>[,<段寄存器>:<段名>……]功能:建立段與段寄存器之間的關(guān)系。說明:ASSUME一般放在代碼段首部,系統(tǒng)自動將代碼段的段基地址裝入CS段寄存器中;其它段則無此功能,需接著用MOV指令將段基址裝入相應(yīng)段寄存器中。幾個當前邏輯段需合用同一個物理存儲器段,可用如下格式說明:ASSUMECS:NAME,SEG:NAME[,SEG:NAME……]SEG為段寄存器名,NAME為段名,不同的段寄存器名表示不同的邏輯段,相同的段名表示同一個物理存儲器段。
4.過程定義偽指令格式:<過程名>PROC[NEAR/FAR] {過程體}
<過程名>ENDP功能:用來定義一個子程序。過程以PROC語句開始,以ENDP語句結(jié)束。說明:過程屬性項省略,系統(tǒng)默認為NEAR,表示段內(nèi)調(diào)用。FAR表示段間調(diào)用。5.定位偽指令格式1:ORG<表達式>格式2:ORG$+<表達式>功能:格式1把表達式的值送入IP中。格式2將IP的當前值加上表達式的值再送入IP。$表示IP中的當前值。 6.模塊命名偽指令格式1:NAME<模塊名>格式2:TITLE<標題>功能:給程序模塊取名。7.程序結(jié)束偽指令格式1:END格式2:END<起始地址>功能:表示源程序到此結(jié)束,如果有起始地址,系統(tǒng)給CS、IP賦初值。格式Ⅰ用于輔
助模塊結(jié)束標志。格式Ⅱ用于主程序或主模塊結(jié)束標志,整個程序只能有一個主模塊。5.2匯編語言程序設(shè)計
匯編語言程序設(shè)計是用匯編語言來編制程序,也就是用匯編語言去表現(xiàn)和實現(xiàn)計算機完成的工作。5.2.1匯編語言程序設(shè)計的基本步驟1.程序設(shè)計目的2.程序設(shè)計步驟(1)分析問題,建立數(shù)學模型。(2)根據(jù)數(shù)學模型找出算法。(3)根據(jù)算法,畫出程序流程框圖。(4)根據(jù)程序流程框圖編制程序。(5)上機調(diào)試、運行程序,優(yōu)化程序。
3.結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計方法的基本思想是自頂向下、逐步求精。任何程序都是由順序結(jié)構(gòu)、分支結(jié)構(gòu)(選擇)、循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)組成,采用結(jié)構(gòu)化程序設(shè)計方法可保證程序設(shè)計目標的實現(xiàn)。4.流程圖的畫法利用流程圖進行程序設(shè)計是一種最基本的方法。對于復(fù)雜程序可以先將其分成一個個模塊,即把大事化小,然后再對每個模塊進行設(shè)計,逐步求精分細,對一個個具體的模塊,仍可使用流程圖設(shè)計。
流程圖一般由四部分組成:(1)執(zhí)行框(矩形框)執(zhí)行框中寫明某一段程序或某一個模塊的功能,其特點是有一個入口一個出口,
(2)判別框(菱形框)可用菱形或尖角形框表示。框內(nèi)寫明比較、判斷的條件。條件較長時,用尖角框表示較合適。它有一個入口和兩個出口,在每個出口處都要寫明條件判斷的結(jié)果。
(3)起始框和終止框表示程序段的起始和終止。起始框有個出口,終止框有一個入口.(4)指向線指向線由帶箭頭的線段表示,它表示程序執(zhí)行的順序和去向。
5.2.2順序程序
5.2.3分支程序分支程序設(shè)計有兩種基本結(jié)構(gòu),簡單分支結(jié)構(gòu)和多分支結(jié)構(gòu)。
1.簡單分支結(jié)構(gòu)2.多分支結(jié)構(gòu)在高級語言中,利用CASE語句實現(xiàn)多分支程序結(jié)構(gòu),匯編語言中可利用跳轉(zhuǎn)表實現(xiàn)多分支結(jié)構(gòu)。所謂跳轉(zhuǎn)表,就是在某一內(nèi)存區(qū)域順序排列的一組有規(guī)律的轉(zhuǎn)移目標的入口地址。[例5-8]設(shè)計一個256分支的段內(nèi)程序轉(zhuǎn)移程序。設(shè)JUMP單元有一個數(shù)X,若X=0,則轉(zhuǎn)移到標號為N000的程序段;若X=1,則轉(zhuǎn)移到標號為N001的程序段,……;若X=255,則轉(zhuǎn)移到標號為N255的程序段。
5.2.4循環(huán)程序
在程序設(shè)計中把某程序段或連續(xù)的語句組多次重復(fù)執(zhí)行稱為循環(huán)。在匯編語言中利用循環(huán)指令或者與分支指令相結(jié)合的方法編制程序來實現(xiàn)循環(huán)稱為循環(huán)程序設(shè)計。循環(huán)程序可分為單重循環(huán)和多重循環(huán)兩類。1.單重循環(huán)
2.多重循環(huán)多重循環(huán)中最簡單、最常用的是二重循環(huán)程序(如圖6-8所示)。所謂多重循環(huán)是指一個循環(huán)的循環(huán)體中嵌套另一個或多個相互獨立的單重循環(huán),外層循環(huán)稱為外循環(huán),里層循環(huán)稱為內(nèi)循環(huán),兩者不允許交叉引用。
5.2.5子程序及過程定義由于匯編語言所操作處理的對象主要是CPU寄存器,而主程序在調(diào)用子程序時,已經(jīng)占用了一定的寄存器,子程序執(zhí)行時又要使用寄存器,子程序執(zhí)行完畢返回主程序后,又要保證主程序按原有狀態(tài)繼續(xù)正常執(zhí)行,這就需要對這些寄存器的內(nèi)容加以保護,這就稱為現(xiàn)場保護。子程序執(zhí)行完畢后再恢復(fù)這些被保護的寄存器的內(nèi)容,稱為現(xiàn)場恢復(fù)。
1.子程序結(jié)構(gòu)形式一般子程序以子程序文件形式存在,子程序文件由說明文件和子程序本身構(gòu)成。(1)子程序說明文件功能描述:程序的名稱、功能、性能指標;所用的寄存器、存儲單元及其說明;子程序的入口、出口參數(shù)說明;子程序中又調(diào)用的其它子程序的說明。(2)子程序結(jié)構(gòu)子程序一般包含以下幾部分內(nèi)容:①保護現(xiàn)場.②從入口參數(shù)中取得所需的數(shù)據(jù)。③執(zhí)行子程序,這里還可再調(diào)用其他子程序或本身,稱為子程序嵌套或遞歸。④將處理后的數(shù)據(jù)傳送到出口參數(shù)中。⑤恢復(fù)現(xiàn)場用POP指令。⑥返回調(diào)用程序用RET指令來完成。
(3)子程序調(diào)用和返回子程序調(diào)用和返回實質(zhì)上是程序控制的轉(zhuǎn)移。子程序的調(diào)用和返回是由主程序中的CALL指令和子程序中的RET指令來完成的,
其結(jié)構(gòu)格式如下:CODESEGMENT
(程序段1)
MAINPROCFAR
(程序段)
CALLSUB1
(程序段1)
RET
MAINENDP
SUB1PROCNEAR
(程序段1)
RET
SUB1ENDP
CODEENDS
5.2.6DOS系統(tǒng)功能調(diào)用
DOS除了為用戶提供許多可以直接使用的命令外,又為匯編語言用戶提供了八十多個功能子程序,供匯編語言程序設(shè)計直接使用。用戶就不必編寫繁雜的程序,也不必去了解I/O接口的特性,不必掌握硬件設(shè)備工作原理與工作方式,而只需遵循DOS規(guī)定的調(diào)用方法就可直接調(diào)用這些功能子程序,完成I/O及其它有關(guān)操作。DOS功能調(diào)用使用方法如下:
AH寄存器中放入調(diào)用功能子程序號;根據(jù)功能號調(diào)用要求設(shè)置相應(yīng)入口參數(shù);用INT21H指令轉(zhuǎn)入子程序入口地址,執(zhí)行相應(yīng)功能操作。
5.2.7
BIOS功能調(diào)用
1.BIOS簡述
MS-DOS系統(tǒng)中有兩層內(nèi)部功能模塊可供匯編語言用戶使用:BIOS基本輸入/輸出設(shè)備處理層功能模塊和DOS磁盤文件管理層功能模塊。前者是DOS與外部設(shè)備之間傳送信息的“低級軟接口”,處于系統(tǒng)軟件的最底層,駐留在ROM的0FE000H~0FFFFFH的8KB地址中,完全依賴于硬件設(shè)備;后者是DOS與外部設(shè)備之間傳送信息的“高級軟接口”,對硬件的依賴性小。DOS功能調(diào)用在前一節(jié)已介紹,這一節(jié)主要討論BIOS的調(diào)用。
(1)BIOS的特點
BIOS除了提供系統(tǒng)加電自檢、引導裝入等功能之外,最主要的是提供了I/O設(shè)備的處理程序以及接口控制等功能模塊,用來處理所有的系統(tǒng)中斷,是計算機硬件與軟件的“最低級的接口”,最核心功能的模塊。它是實現(xiàn)DOS功能調(diào)用的必要條件。每一個功能模塊的入口地址被安排在中斷向量表中。(2)BIOS調(diào)用與DOS調(diào)用的比較
BIOS中斷調(diào)用是DOS功能調(diào)用的基礎(chǔ),DOS功能是BIOS的高層擴展,它概括了BIOS中的某些功能,擺脫輸入/輸出的具體細節(jié),使用起來更方便,但它并沒有完全展示BIOS的功能。
5.3匯編語言與C語言連接
由于編寫及調(diào)試匯編語言程序比高級語言復(fù)雜,所以在實際的軟件開發(fā)工作中,高級語言比匯編語言的使用更為廣泛。但是,匯編語言又有它自己的特點:占有的存儲空間小,執(zhí)行速度快,并且具有直接訪問計算機所有硬件的能力。因而在有些場合匯編語言是不可缺少的。經(jīng)常會有這種情況,程序的大部分用高級語言編寫,而對要求快速執(zhí)行的部分,或是運行次數(shù)很多的部分,或是直接訪問各種I/O設(shè)備的部分,或是高級語言不支持的部分等,則需要用匯編語言編寫。兩者結(jié)合起來可充分發(fā)揮它們各自的優(yōu)點。高級語言與匯編程序連接過程示意圖。
5.3.1C語言與匯編語言程序連接規(guī)則把匯編語言程序作為C語言的一個外部子過程來調(diào)用是兩種語言連接中的最常用的方法。此時,C語言程序經(jīng)編譯后產(chǎn)生.OBJ文件,匯編語言程序經(jīng)匯編后也產(chǎn)生.OBJ文件,然后由連接程序把它們連接起來而形成.EXE執(zhí)行文件,并把它裝入內(nèi)存等待執(zhí)行。
1.控制傳送問題2.C語言向匯編語言傳遞參數(shù)規(guī)則3.匯編語言向C語言返回參數(shù)規(guī)則4.C語言寄存器保護規(guī)則
5.3.2
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 室內(nèi)熱水器安裝施工方案
- 術(shù)后PE抗栓治療中的藥物轉(zhuǎn)換策略
- 天行云供應(yīng)鏈公司招聘試題及答案
- 天能集團招聘筆試題及答案
- 術(shù)中輸血與麻醉策略的協(xié)同優(yōu)化
- 醫(yī)療器械行業(yè)標準與監(jiān)管
- 體外診斷技術(shù)的創(chuàng)新發(fā)展
- 龍湖集團招聘面試題及答案
- 精油護理:天然植物成分的肌膚呵護
- 醫(yī)學影像操作規(guī)范與職業(yè)素養(yǎng)
- 心衰患者的康復(fù)護理
- 2026年內(nèi)科護理工作計劃范文4篇
- 2025超重和肥胖管理指南課件
- 武警拓展訓練方案
- 五年級下冊《勞動技術(shù)》15、番茄炒雞蛋課件
- 2024統(tǒng)編版七年級語文上冊第四單元測試卷(原卷版+答案版)
- 2025年合肥興泰金融控股(集團)有限公司招聘23人筆試參考題庫附答案
- 肺癌科普宣傳知識課件
- 2025新疆和田和康縣、和安縣面向社會招聘事業(yè)單位工作人員108人筆試考試參考試題及答案解析
- (2025年)河源市委社會工作部遴選公務(wù)員考試試題附答案
- 婦產(chǎn)科考試試題及答案
評論
0/150
提交評論