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

下載本文檔

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

文檔簡介

4.1

匯編語言源程序

4.2偽操作

4.3匯編語言程序的上機(jī)過程第4章匯編語言程序格式4.1匯編語言源程序匯編源程序:由三部分組成:匯編指令、偽指令、其他標(biāo)號與符號。一個匯編源程序是由多個段組成的,這些段被用來存放代碼、數(shù)據(jù)或當(dāng)作??臻g來使用。注意:一個有意義的匯編程序中至少要有一個段,這個段用來存放代碼。最后兩條指令所實(shí)現(xiàn)的功能是程序返回。start4.2偽操作(偽指令)

偽操作是匯編程序?qū)υ闯绦蜻M(jìn)行匯編時處理的操作。

處理器選擇偽操作段定義偽操作程序開始和結(jié)束偽操作數(shù)據(jù)定義及存儲器分配偽操作表達(dá)式賦值偽操作地址計(jì)數(shù)器與對準(zhǔn)偽操作基數(shù)控制偽操作功能:告訴匯編程序應(yīng)該選擇哪一種指令系統(tǒng)。位置:一般放在整個程序的最前面,也可放在程序中所用指令的上一行。如不給出,則默認(rèn)為.8086。功能:定義一個段,segment說明一個段開始,ends說明一個段結(jié)束。一個段必須有一個名稱來標(biāo)識,使用格式為:段名segment

段名endsEND[label]

表示源程序結(jié)束的偽操作,標(biāo)號label指示程序開始執(zhí)行的起始地址。一、

assume寄存器與段的關(guān)聯(lián)假設(shè)assume:含義為“假設(shè)”。它假設(shè)某一段寄存器和程序中的某一個用segment…ends定義的段相關(guān)聯(lián)。通過assume說明這種關(guān)聯(lián),在需要的情況下,編譯程序可以將段寄存器和某一個具體的段相聯(lián)系。格式段寄存器:段名注意:assume只是說明關(guān)聯(lián)關(guān)系,并沒有對段寄存器復(fù)制,除了CS(裝入程序時由CPU給出),其他段寄存器要在程序中設(shè)置。

二、段定義偽操作:datasegment;定義數(shù)據(jù)段

…dataends;----------------------------------------extrasegment;定義附加段

…extraends;----------------------------------------codesegment;定義代碼段

assumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址段寄存器

…codeendsendstartData為段名稱,也是段首地址,可自己定義明確段和段寄存器的關(guān)系程序開始的標(biāo)號程序結(jié)束標(biāo)志三、數(shù)據(jù)定義及存儲器分配偽操作格式:[變量]助記符操作數(shù)[,操作數(shù),…][;注釋]

助記符:DBDWDDDFDQDTDATA_BYTEDB10,4,10H,?DATA_WORDDW100,100H,-5,?匯編程序在匯編期間在存儲器中存入數(shù)據(jù)

-

0AH

04H

10H

-

64H

00H

00H

01H

FBH

FFH

-DATA_BYTEDATA_WORD例:操作數(shù)可以是常數(shù)或表達(dá)式操作數(shù)也可以是字符串ARRAYDB‘HELLO’DB‘AB’DW‘AB’

48H

45H

4CH

4CH

4FH

41H

42H

42H

41H

ARRAY

操作數(shù)也可以是地址

PAR1DW100,200PAR2DW300,400ADDR_TABLEDWPAR1,PAR2操作數(shù)字段還可以使用復(fù)制操作符DUP來復(fù)制操作數(shù)VARDB100DUP(?)DB2DUP(0,2DUP(1,2),3)OPER1DB?,?OPER2DW?,?……MOVOPER1,0;字節(jié)指令

MOVOPER2,0;字指令OPER1DB1,2OPER2DW1234H,5678H……MOVAX,OPER1+1×MOVAL,OPER2×

類型不匹配

MOVAX,WORDPTROPER1+1√MOVAL,BYTEPTROPER2√(AX)=3402H(AL)=34H可以看出:同一個變量可以具有不同的類型屬性BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)tosLABELWORDLABEL

偽操作:nameLABELtype

BYTE_ARRAYWORD_ARRAYtos

50字0064H0000HMOVWORD_ARRAY+2,0MOVBYTE_ARRAY+2,0

MOVtos,0四、表達(dá)式賦值偽操作格式:表達(dá)式名EQU表達(dá)式功能:給表達(dá)式賦予一個名字,在程序中用表達(dá)式名代替該表達(dá)式。必須先定義后使用,不允許重復(fù)定義。ALPHAEQU9BETAEQUALPHA+18BBEQU[BP+8]

“=”偽操作(功能類似,但允許重復(fù)定義)……EMP=7……EMP=EMP+1……4.3上機(jī)過程一個匯編語言源程序從寫出到最終執(zhí)行的簡要過程:

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

程序(從源程序中的匯編指令翻譯過來的機(jī)器碼)和數(shù)據(jù)(源程序中定義的數(shù)據(jù));相關(guān)的描述信息(比如:程序有多大、要占多少內(nèi)存空間等)。操作系統(tǒng)依照可執(zhí)行文件中的描述信息,將可執(zhí)行文件中的機(jī)器碼和數(shù)據(jù)加載入內(nèi)存,并進(jìn)行相關(guān)的初始化(比如:設(shè)置CS:IP指向第一條要執(zhí)行的指令),然后由CPU執(zhí)行程序。myfile.asm編輯程序匯編程序連接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe記事本MASM.EXELINK.EXE匯編程序與連接程序的功能匯編程序的主要功能:(1)檢查源程序,給出出錯信息。(2)產(chǎn)生目標(biāo)文件(.obj)和列表文件(.lst)。(3)展開宏指令。連接程序的作用:生成可執(zhí)行文件(1)連接多個目標(biāo)文件。(2)連接庫文件。(3)處理目標(biāo)文件中不可直接使用的信息。程序經(jīng)編譯連接后變?yōu)闄C(jī)器碼課堂練習(xí)下列程序中,出現(xiàn)邏輯錯誤的是:____

A、assumecs:codecodesegmentmovax,2addax,axmovax,4c00hint21hcodeendB、assumecs:codecodesegmentmovax,2addax,axcodeendsendC、aumecs:codecodesegmentmovax,2addax,axmovax,4c00hint21hcodeendsendD、assumecs:codecodesegmentmovax,2addax,axmovax,4c00hint21hcodeends上機(jī)調(diào)試過程實(shí)驗(yàn)環(huán)境:MASMWINDOWS集成實(shí)驗(yàn)環(huán)境20111、在工具/選項(xiàng)設(shè)置調(diào)試工具和程序文件夾2、編輯源程序3、運(yùn)行/編譯成目標(biāo)文件4、運(yùn)行/生成可執(zhí)行文件5、打開DEBUG調(diào)試6、運(yùn)行程序使用DEBUG調(diào)試和運(yùn)行可執(zhí)行文件

在初次使用DEBUG時,可參照下列步驟進(jìn)行:1、調(diào)用DEBUG,裝入用戶程序2、U命令反匯編程序,記錄代碼段與數(shù)據(jù)段首地址3、R觀察寄存器初始狀態(tài)4、以單步工作方式T開始運(yùn)行程序5、D觀察用戶程序數(shù)據(jù)段初始內(nèi)容6、繼續(xù)以單步工作方式運(yùn)行程序7.G連續(xù)工作方式運(yùn)行程序

8.E或A修改程序和數(shù)據(jù)9.運(yùn)用斷點(diǎn)調(diào)試程序G程序加載Debug將程序從可執(zhí)行文件加載入內(nèi)存后,cx中存放的是程序的長度。總結(jié):程序加載后,ds中存放著程序所在內(nèi)存區(qū)的段地址,這個內(nèi)存區(qū)的偏移地址為0,則程序所在的內(nèi)存區(qū)的地址為:ds:0;這個內(nèi)存區(qū)的前256(100H)個字節(jié)中存放的是PSP,dos用來和程序進(jìn)行通信。從256字節(jié)處向后的空間存放的是程序,所以程序的物理地址是:

SA×16+0+256=SA×16+16×16=(SA+16)×16+0

可用段地址和偏移地址表示為:SA+10:0

即cs=ds+10h,ip=0。課堂練習(xí)編寫程序計(jì)算2∧3,結(jié)果保存在寄存器中。codesegment assumecs:codeStart:movax,2 addax,ax addax,ax movax,4c00

溫馨提示

  • 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

提交評論