版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第5 5章章 宏匯編語言宏匯編語言5.1 5.1 宏匯編語言的開發(fā)過程宏匯編語言的開發(fā)過程5.2 5.2 宏匯編語言基本語句宏匯編語言基本語句編輯程序編輯程序. ASM 文件文件匯編程序匯編程序. OBJ 文件文件連接程序連接程序. EXE 文件文件Edit 等等TMASMTLINK5.15.1 宏匯編語言的開發(fā)過程宏匯編語言的開發(fā)過程5.2.1 源程序的結(jié)構(gòu)源程序的結(jié)構(gòu) 一個完整的源程序在結(jié)構(gòu)上必須做到一個完整的源程序在結(jié)構(gòu)上必須做到: : 用方式選擇偽指令說明執(zhí)行該程序的微處理用方式選擇偽指令說明執(zhí)行該程序的微處理 器類型;器類型; 用段定義語句定義每一個邏輯段;用段定義語句定義每一個邏
2、輯段; 用過程定義語句定義每一個子程序;用過程定義語句定義每一個子程序; 用用ASSUMEASSUME語句說明段約定;語句說明段約定; 用匯編結(jié)束語句說明源程序結(jié)束;用匯編結(jié)束語句說明源程序結(jié)束; 程序在完成預定功能之后程序在完成預定功能之后, ,應(yīng)能安全返回應(yīng)能安全返回DOSDOS。5.25.2 宏匯編語言基本語句宏匯編語言基本語句 .486.486 ;方式定義;方式定義 DATA SEGMENT USE16DATA SEGMENT USE16 ;定義數(shù)據(jù)段;定義數(shù)據(jù)段 MESG DB MESG DB HELLO,0DH,0AH,$HELLO,0DH,0AH,$ DATA ENDSDATA
3、ENDS CODE SEGMENT USE16 CODE SEGMENT USE16 ;定義代碼段;定義代碼段 ASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATA ;說明段約定;說明段約定 BEG:BEG: MOV AX,DATA MOV AX,DATA ;BEGBEG為啟動地址為啟動地址 MOV DS,AXMOV DS,AX MOV CX,10 MOV CX,10 LAST: MOV AH,9 LAST: MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG INT 21H INT 21H LOOP LOOP LA
4、ST LAST MOV MOV AH,4CH AH,4CH INT 21H INT 21H ;返回;返回DOSDOS CODE ENDSCODE ENDS END END BEG BEG ;匯編結(jié)束;匯編結(jié)束HELLO0D0A$MESGDSCS1. 方式選擇偽指令方式選擇偽指令2. 段定義語句段定義語句3. 段約定語句段約定語句4. 過程定義語句過程定義語句5. 匯編結(jié)束語句匯編結(jié)束語句6.返回返回DOS語句語句 這類語句是與程序結(jié)構(gòu)密切相關(guān)的基本語句這類語句是與程序結(jié)構(gòu)密切相關(guān)的基本語句, ,用來說明用來說明MPUMPU類型、段結(jié)構(gòu)與尋址方式的段約定、目標塊的定位和類型、段結(jié)構(gòu)與尋址方式的段
5、約定、目標塊的定位和源程序結(jié)束源程序結(jié)束。 功能:功能: 通知匯編程序通知匯編程序, ,當前的源程序指令是哪一種當前的源程序指令是哪一種CPUCPU指令指令, ,經(jīng)過匯經(jīng)過匯編鏈接之后生成的目標程序在哪一種編鏈接之后生成的目標程序在哪一種CPUCPU機型上運行。機型上運行。 不屬于選定不屬于選定CPUCPU的指令均為非法指令。的指令均為非法指令。8048680486指令集是在指令集是在80868086、80888088、8028680286、8038680386基礎(chǔ)上逐步發(fā)展起來的基礎(chǔ)上逐步發(fā)展起來的, ,很顯然很顯然,80486,80486的的某些指令在早期的某些指令在早期的80X8680X
6、86系列是沒有的系列是沒有的, ,為了使匯編程序能夠識為了使匯編程序能夠識別別, ,在高版本的匯編程序中在高版本的匯編程序中, ,對應(yīng)于每一種對應(yīng)于每一種CPUCPU的指令系統(tǒng)的指令系統(tǒng), ,都有都有一個目標指令的集合。一個目標指令的集合。指令以句號開頭指令以句號開頭, , 格式和功能如下格式和功能如下: : 8086 ;只匯編只匯編8086、8088指令。指令。 286或或 286C ;只匯編只匯編8086、8088及及80286實模式指令實模式指令 286P ;只匯編只匯編8086、8088及及80286全部指令全部指令 386或或 386C ;同同286,且匯編且匯編80386實模式指令
7、實模式指令 386P ;同同286P,且匯編且匯編80386全部指令全部指令 486或或 486C ;同同386,且匯編且匯編80486實模式指令實模式指令 486P ;同同386P,且匯編且匯編80486全部指令全部指令 通常通常,方式選擇偽指令放在程序的頭部方式選擇偽指令放在程序的頭部,做為源程序的第一條做為源程序的第一條語句。不設(shè)置方式選擇偽指令與設(shè)置語句。不設(shè)置方式選擇偽指令與設(shè)置8086是等價的。是等價的。 功能:功能: 是邏輯段的定界語句是邏輯段的定界語句, ,源程序中每一個邏輯段都必須用段定義語句定界。源程序中每一個邏輯段都必須用段定義語句定界。 段定義語句格式如下段定義語句格式
8、如下: : 段名段名 SEGMENT 段體段體 段名段名 ENDS 是一對段定義語句是一對段定義語句, ,一個邏輯段從一個邏輯段從SEGMENTSEGMENT語句開始語句開始, ,到到ENDSENDS語句結(jié)束。語句結(jié)束。 命名規(guī)則和變量名及標號名一樣命名規(guī)則和變量名及標號名一樣, ,它不能代表段體的性質(zhì)它不能代表段體的性質(zhì), ,但為但為了閱讀方便了閱讀方便, ,習慣上總是根據(jù)段體的性質(zhì)起一個適當?shù)亩蚊?。通常用習慣上總是根據(jù)段體的性質(zhì)起一個適當?shù)亩蚊?。通常用DATADATA做為數(shù)據(jù)段的段名做為數(shù)據(jù)段的段名, ,用用STACKSTACK做為堆棧段的段名做為堆棧段的段名, ,CODECODE為代碼段
9、的段名。為代碼段的段名。 為段定義語句的為段定義語句的3 3個屬性參數(shù)個屬性參數(shù), ,可以選用可以選用1 13 3個個, ,也可以全部省略。也可以全部省略。屬性參數(shù)的功能:屬性參數(shù)的功能: 為源程序的匯編、鏈接提供必要的信息。為源程序的匯編、鏈接提供必要的信息。(1) (1) 定位參數(shù)通知鏈接程序定位參數(shù)通知鏈接程序, ,邏輯段的目標代碼在存儲器中如何存放。邏輯段的目標代碼在存儲器中如何存放。 字節(jié)地址字節(jié)地址: :表明該邏輯段的目標代碼可以從任意地址開始依次存放表明該邏輯段的目標代碼可以從任意地址開始依次存放; ; 字地址字地址: :表示該邏輯段的目標代碼表示該邏輯段的目標代碼, ,從偶地址
10、開始依次存放從偶地址開始依次存放; ; 節(jié)地址節(jié)地址: :表示該邏輯段的目標代碼表示該邏輯段的目標代碼, ,從一個能被從一個能被1616整除整除的地址開始依次存放的地址開始依次存放; ; 頁地址頁地址: :表示該邏輯段的目標代碼表示該邏輯段的目標代碼, ,從一個能被從一個能被256256整除的地址開整除的地址開始依次存放。始依次存放。 鏈接程序?qū)τ诓煌K中的同名段進行鏈接時鏈接程序?qū)τ诓煌K中的同名段進行鏈接時, ,對于有對于有BYTEBYTE屬性的段屬性的段, ,總總是緊接著前一段存放是緊接著前一段存放, ,不留空閑單元。對于有不留空閑單元。對于有WORDWORD屬性的段屬性的段, ,也
11、是緊接前一也是緊接前一段存放段存放, ,最多留出一個空閑單元。最多留出一個空閑單元。 (2) 鏈接又稱組合鏈接又稱組合,鏈接參數(shù)通知鏈接程序如何將不同模塊中的同名邏輯段組合鏈接參數(shù)通知鏈接程序如何將不同模塊中的同名邏輯段組合成一個段成一個段 PUBLIC:通知鏈接程序:通知鏈接程序,把不同模塊中具有把不同模塊中具有PUBLIC屬性的同名段屬性的同名段,在在滿足定位方式前提下滿足定位方式前提下,按照指定的鏈接順序進行鏈接按照指定的鏈接順序進行鏈接,組成一個邏輯段組成一個邏輯段; MEMORY:實驗證明:實驗證明 MEMORY屬性和屬性和 PUBLIC屬性是等價的屬性是等價的; COMMON:通知
12、鏈接程序:通知鏈接程序,把不同模塊中把不同模塊中,具有具有 COMMON 屬性的同名屬性的同名段段,根據(jù)指定的鏈接順序根據(jù)指定的鏈接順序,按照按照 “覆蓋覆蓋” 方式組合成一個邏輯段。組合之后的方式組合成一個邏輯段。組合之后的邏輯段體積邏輯段體積,等于鏈接之前具有等于鏈接之前具有 COMMON 屬性同名段中最大的段體屬性同名段中最大的段體; STACK: 具有具有STACK屬性的邏輯段是堆棧段屬性的邏輯段是堆棧段,鏈接程序?qū)巡煌K中鏈接程序?qū)巡煌K中具有具有STACK屬性的同名段鏈接成一個大的堆棧段。鏈接后的堆棧空間是鏈屬性的同名段鏈接成一個大的堆棧段。鏈接后的堆棧空間是鏈接前各模塊預
13、留的堆??臻g之和。接前各模塊預留的堆??臻g之和。 程序裝入后程序裝入后,DOS自動給自動給SS寄存器賦值寄存器賦值,使之等于堆棧段段基址使之等于堆棧段段基址,自動給自動給SP賦賦值值,使之等于堆棧空間的字節(jié)數(shù)使之等于堆??臻g的字節(jié)數(shù),使使 SS:SP自動指向棧頂。自動指向棧頂。 鏈接程序要求鏈接程序要求:EXE文件的匯編源程序文件的匯編源程序,必須有堆棧段必須有堆棧段,否則鏈接時發(fā)出警告否則鏈接時發(fā)出警告信息信息: Warning no stack segment這行信息僅僅是提醒用戶注意這行信息僅僅是提醒用戶注意,并不表示源程序有什么錯誤。并不表示源程序有什么錯誤。 AT 表達式表達式: 該
14、屬性表明該屬性表明:邏輯段在定位時邏輯段在定位時,其段基址等于表達式給出的值。其段基址等于表達式給出的值。AT屬性常和屬性常和 ORG偽指令配合偽指令配合 如如: DATA SEGMENT AT 0040H ORG 0017H KEYFLAG DB ? DATA ENDS 定義鍵標志單元定義鍵標志單元(KEYFLAG)的物理地址為的物理地址為00417H,以便代碼段中可以使用以便代碼段中可以使用變量名變量名KEYFLAG訪問這個單元。訪問這個單元。 AT 參數(shù)不能使用在代碼段。參數(shù)不能使用在代碼段。 缺省缺省:表明該段是一個獨立的邏輯段表明該段是一個獨立的邏輯段,鏈接程序?qū)τ诓煌K中鏈接程序
15、對于不同模塊中,鏈接參數(shù)鏈接參數(shù)缺省的同名段缺省的同名段,不進行組合。不進行組合。模塊化程序設(shè)計中才用到鏈接參數(shù)模塊化程序設(shè)計中才用到鏈接參數(shù) 表示邏輯段的類別。表示邏輯段的類別。 由用戶定義由用戶定義,是長度不超過是長度不超過40個字符的字符串。個字符的字符串。 分類名必須用單引號括起來分類名必須用單引號括起來,分類名可有可無。分類名可有可無。 習慣上習慣上,數(shù)據(jù)段分類名用數(shù)據(jù)段分類名用DATA,代碼段分類名用代碼段分類名用CODE,堆棧段分類名用堆棧段分類名用 STACK。 鏈接程序把不同模塊中分類名相同的同名段組織成一類鏈接程序把不同模塊中分類名相同的同名段組織成一類,存放存放在鄰近的存
16、儲區(qū)中。在鄰近的存儲區(qū)中。 這一參數(shù)是這一參數(shù)是80386、80486匯編語言新增的段參數(shù)匯編語言新增的段參數(shù),只有高版只有高版本的匯編器才能識別本的匯編器才能識別,它有兩種描述方式可供選擇它有兩種描述方式可供選擇: USE16:表示該邏輯段長度最大允許為表示該邏輯段長度最大允許為64K,單元的有效地單元的有效地址為址為16位位,訪問該邏輯段應(yīng)采用訪問該邏輯段應(yīng)采用16位尋址方式。位尋址方式。 USE32:表示該邏輯段長度可以超過表示該邏輯段長度可以超過64K,單元的有效地址單元的有效地址為為32位位,訪問該邏輯段采用訪問該邏輯段采用32位尋址方式。位尋址方式。注意:注意:80486在實模式下
17、定義的邏輯段最大長度不允許超過在實模式下定義的邏輯段最大長度不允許超過64K ,一般采用一般采用16位尋址方式。位尋址方式。TASM5默認段長度為默認段長度為USE16 1. 段定義語句有段定義語句有4個屬性參數(shù)個屬性參數(shù),每一個參數(shù)都有多種選擇。每一個參數(shù)都有多種選擇。 2. 模塊化程序中才有必要考慮各模塊之間同名段的定位模塊化程序中才有必要考慮各模塊之間同名段的定位方式和鏈接方式。對于單一模塊的程序不需考慮這些問題。方式和鏈接方式。對于單一模塊的程序不需考慮這些問題。 3. 單一模塊的程序單一模塊的程序,如果有堆棧段的話如果有堆棧段的話,堆棧段的鏈接屬堆棧段的鏈接屬性應(yīng)為性應(yīng)為 STACK
18、(因為只有因為只有STACK屬性才表示該段是堆棧屬性才表示該段是堆棧段段),分類名應(yīng)為用分類名應(yīng)為用STACK,且不能省略。其它的邏輯段,且不能省略。其它的邏輯段,前前3個屬性參數(shù)都選用缺省方式。個屬性參數(shù)都選用缺省方式。 4. 不同模塊中不同模塊中,鏈接方式相同的同名段鏈接方式相同的同名段,如果有如果有分類名分類名的話的話,分類名分類名必須相同。必須相同。 5. DOS環(huán)境下運行的程序選用環(huán)境下運行的程序選用USE16做段長度。做段長度。格式格式: ASSUME 段寄存器段寄存器:段名段名,段寄存器段寄存器:段名段名功能功能: ASSUME 語句通知匯編程序語句通知匯編程序,尋址邏輯段使用哪
19、一個尋址邏輯段使用哪一個 段寄存器。段寄存器。 ASSUME語句是非執(zhí)行語句語句是非執(zhí)行語句,要求放在代碼段之中要求放在代碼段之中,執(zhí)行尋址操作之前。執(zhí)行尋址操作之前。習慣上習慣上,把把ASSUME語句作為代碼段的第一條語句。語句作為代碼段的第一條語句。 ASSUME語句語句,僅僅是約定了對某個邏輯段進行尋址操作時使用哪一僅僅是約定了對某個邏輯段進行尋址操作時使用哪一個段寄存器個段寄存器,而段寄存器的初值還必須在程序中用指令設(shè)置。而段寄存器的初值還必須在程序中用指令設(shè)置。 “過程過程”即即“子程序子程序”。子程序必須用。子程序必須用RET作為返回指令作為返回指令,用用過程定義語句為子程序定界。
20、過程定義語句為子程序定界。 格式格式: 過程名過程名 PROC 屬性參數(shù)屬性參數(shù) 過程的實體過程的實體 RET 過程名過程名 ENDP 格式格式1: END 程序的啟動地址標號程序的啟動地址標號 例如例如 : END BEGIN 功能功能 : 通知匯編程序通知匯編程序,源程序到此結(jié)束源程序到此結(jié)束,用用BEGIN作標號的指作標號的指令是程序的啟動指令。令是程序的啟動指令。 DOS裝載程序的可執(zhí)行文件裝載程序的可執(zhí)行文件(EXE文件文件)時時,自動把標號自動把標號BEGIN所在段的段基址賦給所在段的段基址賦給CS,把把BEGIN所在單元的偏移量賦給所在單元的偏移量賦給IP。從而從而CPU自動從自動從BEGIN開始的那條指令依次執(zhí)行程序。開始的那條指令依次執(zhí)行程序。 注意注意 :在單一模塊的源程序中在單一模塊的源程序中,以及在模塊化程序的主模塊以及在模塊化程序的主模塊中必須用此格式作為源程序的最后一條語句。中必須用此格式作為源程序的最后一條語句。格式格式2: END功能功能 : 通知匯編程序通知匯編程序,源程序到此結(jié)束。在模塊化程序的源程序到此結(jié)束。在模塊化程序的子模塊中子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙協(xié)議合同模板集
- 初級護士勞動合同模板
- 團購協(xié)議房地產(chǎn)電商2024年
- 廣告公司公交車廣告合同
- 專業(yè)貨物運輸合同范文
- 2024年離婚協(xié)議小說章節(jié)
- 機械設(shè)備買賣合同補充協(xié)議
- 工程合同模板維護保養(yǎng)
- 勘察合同在建設(shè)工程合同中的作用解析
- 集體林地承包經(jīng)營權(quán)協(xié)議
- 《預防未成年人犯罪》課件(圖文)
- 業(yè)財融合背景下建筑企業(yè)財務(wù)管理轉(zhuǎn)型中的不足及建議
- 計算機專業(yè)職業(yè)生涯規(guī)劃書(14篇)
- GB/T 22838.5-2024卷煙和濾棒物理性能的測定第5部分:卷煙吸阻和濾棒壓降
- 評標專家?guī)煜到y(tǒng)系統(tǒng)總體建設(shè)方案
- 學校學生食堂“三防”制度
- 數(shù)學-湖湘名校教育聯(lián)合體2024年下學期高二10月大聯(lián)考試題和答案
- 2024年農(nóng)村合作社管理制度范本(二篇)
- 創(chuàng)新實踐(理論)學習通超星期末考試答案章節(jié)答案2024年
- 青島版科學三年級上冊全冊課件教材
- 二十屆三中全會知識點試題及答案【200題】
評論
0/150
提交評論