計(jì)算機(jī)組成原理與匯編課件第4章匯編語言程序格式_第1頁
計(jì)算機(jī)組成原理與匯編課件第4章匯編語言程序格式_第2頁
計(jì)算機(jī)組成原理與匯編課件第4章匯編語言程序格式_第3頁
計(jì)算機(jī)組成原理與匯編課件第4章匯編語言程序格式_第4頁
計(jì)算機(jī)組成原理與匯編課件第4章匯編語言程序格式_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章匯編語言程序格式4.1匯編程序功能4.2偽操作4.3匯編語言程序格式4.4匯編語言程序的上機(jī)過程4.1匯編程序功能1.程序運(yùn)行步驟及生成的文件編輯程序myfile.asm匯編程序myfile.lstmyfile.crfmyfile.objotherfiles.obj連接程序myfile.mapmyfile.exe建立,運(yùn)行匯編語言程序C>EDITC>MASMMYFILE.ASMMYFILE.ASMMicrosoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.Objectfilename[MYFILE.OBJ]:Sourcelisting[NUL.LST]:MYFILE.LSTCross-reference[NUL.CRF]:47962+413345Bytessymbolspacefree0WarningErrors0SevereErrorsC>LINKMYFILE.OBJMicrosoft(R)OverlayLinkerVersion3.64Copyright(C)MicrosoftCorp1983-1988.Allrightsreserved.RunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:LINK:warningL4021:nostacksegmentC>MYFILE2.匯編程序功能匯編程序的主要功能:?檢查源程序,給出出錯(cuò)信息。?產(chǎn)生目標(biāo)文件(.obj)和列表文件(.lst)。?展開宏指令。1.處理器選擇偽操作:.8086選擇8086指令系統(tǒng).286選擇80286指令系統(tǒng).286P選擇保護(hù)模式下的80286指令系統(tǒng).386選擇80386指令系統(tǒng).386P選擇保護(hù)模式下的80386指令系統(tǒng).486選擇80486指令系統(tǒng).486P選擇保護(hù)模式下的80486指令系統(tǒng).586選擇Pentium指令系統(tǒng).586P選擇保護(hù)模式下的Pentium指令系統(tǒng)2.段定義偽操作:完整的段定義格式datasegment;定義數(shù)據(jù)段…dataends;----------------------------------------extrasegment;定義附加段…extraends;----------------------------------------codesegment;定義代碼段assumecs:code,ds:data,es:extrastart:movax,datamovds,ax;段地址段寄存器…codeendsendstart段指派語句assume例:assumecs:code,ds:data,es:extra段指派語句一般出現(xiàn)在代碼段中可執(zhí)行匯編指令之前,用于指明段寄存器和段的對應(yīng)關(guān)系一個(gè)匯編語言源程序至少有一個(gè)assume偽指令指出CS對應(yīng)的代碼段assume偽指令格式中段名為nothing,表示取消對相應(yīng)段寄存器已有的指派段指派語句不負(fù)責(zé)段寄存器的初始化3.程序開始和結(jié)束偽操作:TITLEtextNAMEmodule_name這兩個(gè)不是必須的。END[label]指示匯編程序源程序就此結(jié)束[label]表示程序開始執(zhí)行的起始地址4.數(shù)據(jù)定義及存儲器分配偽操作:[變量]助記符操作數(shù)[,操作數(shù),…][;注釋]助記符:DBDWDDDFDQDTDATA_BYTE0AH04H10H-DATA_WORD64H00H00H01HFBHFFH例:DATA_BYTEDATA_WORDDBDW10,4,10H,?100,100H,-5,?--ARRAYDBDBDW‘HELLO’‘AB’‘AB’ARRAY48H45H4CH4CH4FH41H42H42H41H復(fù)制操作符DUPVARDB100DUP(?)DB2DUP(0,1,2,?)5表達(dá)式賦值偽操作:表達(dá)式名EQU表達(dá)式ALPHABETABBEQUEQUEQU9ALPHA+18[BP+8]“=”偽操作(允許重復(fù)定義)……EMP=7……EMP=EMP+1……6.地址計(jì)數(shù)器與對準(zhǔn)偽操作:地址計(jì)數(shù)器$:保存當(dāng)前正在匯編的指令的地址ORG$+8;跳過8個(gè)字節(jié)的存儲區(qū)JNE$+6;轉(zhuǎn)向地址是JNE的首址+6JMP$+2;轉(zhuǎn)向下一條指令A(yù)RRAY01H00H02H00H7CH00H03H00H0074$用在偽操作的參數(shù)字段:表示地址計(jì)數(shù)器的當(dāng)前值0078ARRAYDW1,2,$+4,3,4,$+404H00H82H00H007EORG偽操作:用來設(shè)置當(dāng)前地址計(jì)數(shù)器的值SEG1SEGMENTORG10VAR1DW1234HORG20VAR2DW5678HORG$+8VAR3DW1357HSEG1ENDSBUFFERLABELBYTEORG$+8BUFFERDB8DUP(?)ORG100HSTART:……4.3匯編語言程序格式

完整的匯編語言源程序由段組成,每段以SEGMENT開始,以ENDS結(jié)束,整個(gè)源程序以END結(jié)束。

一個(gè)匯編語言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列

需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)

所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)

通常,程序還需要一個(gè)堆棧段1.匯編語言語句行源程序的每條語句可表示為:[名字]操作操作數(shù)[;注釋]標(biāo)號變量指令偽指令宏指令寄存器標(biāo)號變量常數(shù)表達(dá)式說明程序或語句的功能標(biāo)號/變量:段值、偏移量、類型三種屬性表達(dá)式:數(shù)字表達(dá)式地址表達(dá)式3.表達(dá)式操作符:算術(shù)操作符:、、、、ModVIDEO_BUFDB25*80*2DUP(?)ARRAYDW1,2,3,4,5,6,7ARYENDDW?MOVCX,(ARYEND-ARRAY)/2ADDAX,BLOCK+2;符號地址常數(shù)有意義;時(shí)意義不明確MOVAX,BX+1;

MOVAX,[BX+1];寄存器間接尋址邏輯和移位操作符:AND、OR、XOR、NOT、SHL、SHROPR1EQU25OPR2EQU7;00011001B;00000111BANDAX,OPR1ANDOPR2;ANDAX,1MOVAX,0FFFFHSHL2;MOVAX,0FFFCH關(guān)系操作符:EQ、NE、LT、LE、GT、GE計(jì)算結(jié)果為邏輯值:真0FFFFH假0000HMOVFID,(OFFSETY-OFFSETX)LE128X:…………Y:……若128(真)匯編結(jié)果:MOVFID,-1若128(假)匯編結(jié)果:MOVFID,0數(shù)值回送操作符:OFFSET、SEG、TYPE、LENGTH、SIZEOFFSET/SEG功能:回送變量或標(biāo)號的偏址/段址變量/標(biāo)號TYPE變量/標(biāo)號/常數(shù)DBDWDDDFDQDTNEARFAR常數(shù)1246810-1-20LENGTH變量功能:回送由DUP定義的變量的單元數(shù),其它情況回送1SIZE變量功能:LENGTH*TYPEARRAYDW100DUP(?)TABLEDB‘ABCD’ADDSI,TYPEARRAY;ADDSI,2ADDSI,TYPETABLE;ADDSI,1MOVCX,LENGTHARRAY;MOVCX,100MOVCX,LENGTHTABLE;MOVCX,1MOVCX,SIZEARRAY;MOVCX,200MOVCX,SIZETABLE;MOVCX,14.4匯編語言程序的上機(jī)過程1.編輯源程序進(jìn)入DOS方式,運(yùn)行Edit,在其中編輯程序,如下圖所示:2.編譯進(jìn)入DOS方式,進(jìn)入C:\masm目錄,運(yùn)行masm.exe。如果源程序文件不是以asm為擴(kuò)展名的話,就要輸入它的全名。比如p1.txt。在輸入源程序文件名的時(shí)候一定要指明它所在的路徑。如果文件就在當(dāng)前路徑下,只輸入文件名就可以。對源程序的編譯結(jié)束,編譯器輸出的最后兩行說明這個(gè)源程序沒有警告錯(cuò)誤和必須要改正的錯(cuò)誤。3.連接對目標(biāo)文件的連接結(jié)束,生成EXE可執(zhí)行文件。連接的作用:

當(dāng)源程序很大時(shí),可以將它分為多個(gè)源程序文件來編譯,每個(gè)源程序編譯成為目標(biāo)文件后,再用連接程序?qū)⑺鼈冞B接到一起,生成一個(gè)可執(zhí)行文件;

程序中調(diào)用了某個(gè)庫文件中的子程序,需要將這個(gè)庫文件和該程序生成的目標(biāo)文件連接到一起,生成一個(gè)可執(zhí)行文件;

一個(gè)源程序編譯后,得到了存有機(jī)器碼的目標(biāo)文件,目標(biāo)文件中的有些內(nèi)容還不能直接用來生成可執(zhí)行文件,連接程序?qū)⑦@此內(nèi)容處理為最終的可執(zhí)行信息。所以,在只有一個(gè)源程序文件,而又不需要調(diào)用某個(gè)庫中的子程序的情況下,也必須用連接程序?qū)δ繕?biāo)文件進(jìn)行處理,生成可執(zhí)行文件。4.執(zhí)行程序已經(jīng)運(yùn)行,程序的執(zhí)行是將數(shù)據(jù)送入寄存器和加法的操作,屏幕上看不到運(yùn)行結(jié)果。5.程序執(zhí)行過程的跟蹤(Debug)可以用R命令看一下各個(gè)寄存器的設(shè)置情況:可以用U命令查看其它指令(反匯編):可以用T命令單步執(zhí)行程序中的每一條指令,并觀察每條指令的執(zhí)行結(jié)果,到了int21h,要用P命令執(zhí)行:int21h執(zhí)行后,顯示“Programterminatednormally”,返回

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論