第4章--程序格式_第1頁
第4章--程序格式_第2頁
第4章--程序格式_第3頁
第4章--程序格式_第4頁
第4章--程序格式_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設(shè)計匯編語言程序設(shè)計 4.1 匯編語言源程序匯編語言源程序 4.2 偽操作偽操作 4.3 匯編語言程序的上機過程匯編語言程序的上機過程第第4章章 匯編語言程序格式匯編語言程序格式匯編語言程序設(shè)計匯編語言程序設(shè)計4.1 匯編語言源程序匯編語言源程序匯編源程序:由三部分組成:匯編源程序:由三部分組成:匯編指令、偽指令、其他標號匯編指令、偽指令、其他標號與符號。與符號。一個匯編源程序是由多個段組一個匯編源程序是由多個段組成的,這些段被用來存放代碼、成的,這些段被用來存放代碼、數(shù)據(jù)或當(dāng)作??臻g來使用。數(shù)據(jù)或當(dāng)作??臻g來使用。注意注意:一個有意義的匯編程序:一個有意義的匯編程序中至少要有一個

2、段,這個段用中至少要有一個段,這個段用來存放代碼。來存放代碼。最后兩條指令所實現(xiàn)的功能是最后兩條指令所實現(xiàn)的功能是程序返回。程序返回。start匯編語言程序設(shè)計匯編語言程序設(shè)計4.2 偽操作(偽指令)偽操作(偽指令) 偽操作是匯編程序?qū)υ闯绦蜻M行匯編時處偽操作是匯編程序?qū)υ闯绦蜻M行匯編時處理的操作。理的操作。 處理器選擇偽操作處理器選擇偽操作 段定義偽操作段定義偽操作 程序開始和結(jié)束偽操作程序開始和結(jié)束偽操作 數(shù)據(jù)定義及存儲器分配偽操作數(shù)據(jù)定義及存儲器分配偽操作 表達式賦值偽操作表達式賦值偽操作 地址計數(shù)器與對準偽操作地址計數(shù)器與對準偽操作 基數(shù)控制偽操作基數(shù)控制偽操作功能:告訴匯編程序應(yīng)該選

3、擇哪一種指令系統(tǒng)。功能:告訴匯編程序應(yīng)該選擇哪一種指令系統(tǒng)。位置:一般放在整個程序的最前面,也可放在程位置:一般放在整個程序的最前面,也可放在程序中所用指令的上一行。序中所用指令的上一行。如不給出,則默認為如不給出,則默認為.8086。功能:定義一個段,功能:定義一個段,segment說明一個段開始,說明一個段開始,ends 說明一個段結(jié)束。一個段必須有一個名稱來說明一個段結(jié)束。一個段必須有一個名稱來標識,使用格式為:標識,使用格式為: 段名段名 segment 段名段名 endsEND label 表示源程序結(jié)束的偽操作,標號表示源程序結(jié)束的偽操作,標號label 指示程指示程序開始執(zhí)行的起

4、始地址。序開始執(zhí)行的起始地址。匯編語言程序設(shè)計匯編語言程序設(shè)計一、一、 assume寄存器與段的關(guān)聯(lián)假設(shè)寄存器與段的關(guān)聯(lián)假設(shè)assume :含義為:含義為“假設(shè)假設(shè)”。它假設(shè)某一段寄存器和程序中的某一個用它假設(shè)某一段寄存器和程序中的某一個用 segment ends 定義的段相關(guān)聯(lián)。通過定義的段相關(guān)聯(lián)。通過assume說明這種關(guān)聯(lián),說明這種關(guān)聯(lián),在需要的情況下在需要的情況下 ,編譯程序可以將段寄存器和某一,編譯程序可以將段寄存器和某一個具體的段相聯(lián)系。個具體的段相聯(lián)系。格式格式 段寄存器:段名段寄存器:段名 注意注意:assume只是說明關(guān)聯(lián)關(guān)系,并沒有對段寄存器只是說明關(guān)聯(lián)關(guān)系,并沒有對段寄

5、存器復(fù)制,除了復(fù)制,除了CS(裝入程序時由(裝入程序時由CPU給出),其他段給出),其他段寄存器要在程序中設(shè)置。寄存器要在程序中設(shè)置。匯編語言程序設(shè)計匯編語言程序設(shè)計 二、段定義偽操作:二、段定義偽操作:data segment data segment ; 定義數(shù)據(jù)段定義數(shù)據(jù)段 data endsdata ends;-;-extra segment extra segment ; 定義附加段定義附加段 extra endsextra ends;-;-code segment code segment ; 定義代碼段定義代碼段 assume cs:code, ds:data, es:extra

6、assume cs:code, ds:data, es:extrastart: start: mov ax, data mov ax, data mov ds, ax mov ds, ax ; 段地址段地址 段寄存器段寄存器 code endscode ends end start end startData為段名稱,也是段為段名稱,也是段首地址,可自己定義首地址,可自己定義明確段和段寄明確段和段寄存器的關(guān)系存器的關(guān)系程序開始程序開始的標號的標號程序結(jié)束標志程序結(jié)束標志匯編語言程序設(shè)計匯編語言程序設(shè)計三、數(shù)據(jù)定義及存儲器分配偽操作三、數(shù)據(jù)定義及存儲器分配偽操作格式:格式:變量變量 助記符助記符

7、 操作數(shù)操作數(shù) , 操作數(shù)操作數(shù) , ; 注釋注釋 助記符:助記符:DB DW DD DF DQ DTDB DW DD DF DQ DTDATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,?匯編程序在匯編期間在存儲器中存入數(shù)據(jù)匯編程序在匯編期間在存儲器中存入數(shù)據(jù) - - 0AH0AH 04H04H 10H10H - - 64H64H 00H00H 00H00H 01H01H FBHFBH FFHFFH - -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:操作數(shù)可以是常數(shù)或表達式例:操作數(shù)可以是常數(shù)或表達式匯編語言

8、程序設(shè)計匯編語言程序設(shè)計操作數(shù)也可以是字符串操作數(shù)也可以是字符串ARRAY DB HELLO DB AB DW AB 48H48H 45H45H 4CH4CH 4CH4CH 4FH4FH 41H41H 42H42H 42H42H 41H41H ARRAY ARRAY 操作數(shù)也可以是地址操作數(shù)也可以是地址 PAR1 DW 100,200 PAR2 DW 300,400ADDR_TABLE DW PAR1,PAR2操作數(shù)字段還可以使用操作數(shù)字段還可以使用復(fù)制操作符復(fù)制操作符DUPDUP來復(fù)制操作數(shù)來復(fù)制操作數(shù)VAR DB 100 DUP (?) DB 2 DUP (0,2 DUP(1,2),3)匯

9、編語言程序設(shè)計匯編語言程序設(shè)計OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字節(jié)指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 類型不匹配 MOV AX, MOV AX, WORD PTRWORD PTR OPER1+1 OPER1+1 MOV AL, MOV AL, BYTE PTRBYTE PTR OPER2 OPER2 (AX)=3402H (AL)=34H可以看出:同一個變量可以具有不同的類型屬性可以看出:同一個變量可以具有不同的

10、類型屬性匯編語言程序設(shè)計匯編語言程序設(shè)計BYTE_ARRAY LABEL BYTEWORD_ARRAY DW 50 DUP (?) tos LABEL WORDLABEL 偽操作:偽操作: name LABEL typename LABEL type BYTE_ARRAY BYTE_ARRAY WORD_ARRAY WORD_ARRAY tos tos 50字0064H0064H0000H0000HMOV WORD_ARRAY + 2, 0MOV BYTE_ARRAY + 2, 0 MOV tos, 0匯編語言程序設(shè)計匯編語言程序設(shè)計四、表達式賦值偽操作四、表達式賦值偽操作格式:表達式名格式:

11、表達式名 EQU 表達式表達式功能:給表達式賦予一個名字,在程序中用表達式名代替該表達式。功能:給表達式賦予一個名字,在程序中用表達式名代替該表達式。必須先定義后使用,不允許重復(fù)定義。必須先定義后使用,不允許重復(fù)定義。ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+8 “ = ” 偽操作偽操作 (功能類似,但允許重復(fù)定義功能類似,但允許重復(fù)定義)EMP = 7EMP = EMP+1匯編語言程序設(shè)計匯編語言程序設(shè)計4.3 4.3 上機過程上機過程一個匯編語言源程序從寫出到最終執(zhí)行的簡要過程:一個匯編語言源程序從寫出到最終執(zhí)行的簡要過程: 編寫編寫-編譯編譯-連接連接-

12、執(zhí)行執(zhí)行使用文本編輯器(如使用文本編輯器(如Edit、記事本等),用、記事本等),用匯編語言編寫匯編語言編寫匯編源程序(匯編源程序(*.asm)。n使用匯編語言編譯程序?qū)υ闯绦蜻M行匯編,使用匯編語言編譯程序?qū)υ闯绦蜻M行匯編,產(chǎn)生產(chǎn)生目標文件目標文件(*.obj);再用連接程序?qū)δ繕?;再用連接程序?qū)δ繕宋募M行連接,生成可在操作系統(tǒng)中直接運文件進行連接,生成可在操作系統(tǒng)中直接運行的行的可執(zhí)行文件可執(zhí)行文件(*.exe)。在操作系統(tǒng)中,執(zhí)行可執(zhí)行文件中的程序。在操作系統(tǒng)中,執(zhí)行可執(zhí)行文件中的程序??蓤?zhí)行文件中包含兩部分內(nèi)容:可執(zhí)行文件中包含兩部分內(nèi)容: 程序程序(從源程序中的匯編指令翻譯過來的(從

13、源程序中的匯編指令翻譯過來的機器碼)機器碼)和數(shù)據(jù)和數(shù)據(jù)(源程序中定義的數(shù)據(jù));(源程序中定義的數(shù)據(jù)); 相關(guān)的相關(guān)的描述信息描述信息(比如:程序有多大、要(比如:程序有多大、要占多少內(nèi)存空間等)。占多少內(nèi)存空間等)。操作系統(tǒng)依照可執(zhí)行文件中的描述信息,將操作系統(tǒng)依照可執(zhí)行文件中的描述信息,將可執(zhí)行文件中的機器碼和數(shù)據(jù)加載入內(nèi)存,可執(zhí)行文件中的機器碼和數(shù)據(jù)加載入內(nèi)存,并進行相關(guān)的初始化(比如:設(shè)置并進行相關(guān)的初始化(比如:設(shè)置CS:IP指指向第一條要執(zhí)行的指令),然后由向第一條要執(zhí)行的指令),然后由CPU執(zhí)行執(zhí)行程序。程序。匯編語言程序設(shè)計匯編語言程序設(shè)計myfile.asm編輯程序編輯程序匯

14、編程序匯編程序連接程序連接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe記事本記事本MASM.EXELINK.EXE匯編程序與連接程序的功能匯編程序與連接程序的功能匯編程序的主要功能:匯編程序的主要功能:(1) 檢查源程序,給出出錯信息。檢查源程序,給出出錯信息。(2) 產(chǎn)生目標文件產(chǎn)生目標文件( (.obj.obj) )和列表文件和列表文件( (.lst.lst) )。(3) 展開宏指令。展開宏指令。連接程序的作用:生成可執(zhí)行文件連接程序的作用:生成可執(zhí)行文件(1) 連接多個目標文件。連接多個目標文件。(2

15、) 連接庫文件。連接庫文件。(3) 處理目標文件中不可直接使用的信息。處理目標文件中不可直接使用的信息。匯編語言程序設(shè)計匯編語言程序設(shè)計程序經(jīng)編譯連接后變?yōu)闄C器碼程序經(jīng)編譯連接后變?yōu)闄C器碼匯編語言程序設(shè)計匯編語言程序設(shè)計課堂練習(xí)課堂練習(xí)下列程序中,出現(xiàn)邏輯錯誤的是:下列程序中,出現(xiàn)邏輯錯誤的是:_ A、 assume cs:code code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code end B、 assume cs:code code segment mov ax,2 add ax,ax code ends end C、 aum

16、e cs:code code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code ends end D、 assume cs:code code segment mov ax,2 add ax,ax mov ax,4c00h int 21h code ends匯編語言程序設(shè)計匯編語言程序設(shè)計上機調(diào)試過程上機調(diào)試過程實驗環(huán)境:實驗環(huán)境:MASM WINDOWS 集成實驗環(huán)境集成實驗環(huán)境 20111、在工具、在工具/選項選項 設(shè)置調(diào)試工具和程序文件夾設(shè)置調(diào)試工具和程序文件夾2、編輯源程序、編輯源程序3、運行、運行/編譯成目標文件編譯成目標文件4

17、、運行、運行/生成可執(zhí)行文件生成可執(zhí)行文件5、打開、打開DEBUG調(diào)試調(diào)試6、運行程序、運行程序匯編語言程序設(shè)計匯編語言程序設(shè)計使用使用DEBUG調(diào)試和運行可執(zhí)行文件調(diào)試和運行可執(zhí)行文件 在初次使用在初次使用DEBUGDEBUG時,可參照下列步驟進行時,可參照下列步驟進行: : 1、調(diào)用、調(diào)用DEBUG,裝入用戶程序,裝入用戶程序2、U命令反匯編程序,記錄代碼段與數(shù)據(jù)段首地址命令反匯編程序,記錄代碼段與數(shù)據(jù)段首地址3、R觀察寄存器初始狀態(tài)觀察寄存器初始狀態(tài) 4、以單步工作方式、以單步工作方式T開始運行程序開始運行程序 5、D觀察用戶程序數(shù)據(jù)段初始內(nèi)容觀察用戶程序數(shù)據(jù)段初始內(nèi)容6、繼續(xù)以單步工作

18、方式運行程序、繼續(xù)以單步工作方式運行程序 7G連續(xù)工作方式運行程序連續(xù)工作方式運行程序 8E或或A修改程序和數(shù)據(jù)修改程序和數(shù)據(jù) 9運用斷點調(diào)試程序運用斷點調(diào)試程序 G匯編語言程序設(shè)計匯編語言程序設(shè)計程序加載程序加載Debug將程序從可執(zhí)行文件加載入內(nèi)存后,將程序從可執(zhí)行文件加載入內(nèi)存后,cx中中存放的是程序的長度。存放的是程序的長度??偨Y(jié)總結(jié):程序加載后,程序加載后,ds中存放著程序所在內(nèi)存區(qū)的段地址,這個內(nèi)中存放著程序所在內(nèi)存區(qū)的段地址,這個內(nèi)存區(qū)的偏移地址為存區(qū)的偏移地址為 0 ,則程序所在的內(nèi)存區(qū)的地址為:,則程序所在的內(nèi)存區(qū)的地址為:ds:0;這個內(nèi)存區(qū)的前這個內(nèi)存區(qū)的前256 (100H) 個字節(jié)中存放的是個字節(jié)中存放的是PSP,dos用來和程序進行通信。從用來和程序進行通信。從 256字節(jié)處向后的空間存放的是程序,字節(jié)處向后的空間存放的是程序,所以程序的物理地址是:所以程序的物理地址是: SA

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論