匯編語言程序設(shè)計(jì)-課件 第4章 匯編語言程序格式_第1頁
匯編語言程序設(shè)計(jì)-課件 第4章 匯編語言程序格式_第2頁
匯編語言程序設(shè)計(jì)-課件 第4章 匯編語言程序格式_第3頁
匯編語言程序設(shè)計(jì)-課件 第4章 匯編語言程序格式_第4頁
匯編語言程序設(shè)計(jì)-課件 第4章 匯編語言程序格式_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

匯編語言執(zhí)行的步驟為編程→匯編→連接→調(diào)試(1)編程:用編輯程序建立ASM文件;(2)匯編:用匯編語言MASM程序?qū)SM文件轉(zhuǎn)換成目標(biāo)文件OBJ;(3)連接:用連接程序LINK把OBJ文件轉(zhuǎn)換成可執(zhí)行的EXE文件;(4)調(diào)試:在DOS狀態(tài)下鍵入文件名調(diào)試、運(yùn)行程序。第4章匯編語言程序格式4.1匯編語言格式一、匯編語言語句格式1.指令語句語句格式:[標(biāo)號:]指令助記符操作數(shù)[,操作數(shù)][;注釋]標(biāo)號:標(biāo)號的名字由用戶自定義,是不能以數(shù)字開頭的字符、數(shù)字串,長度不超過31個(gè)字符,不能使用保留字,保留字包括指令助記符、偽指令助記符、寄存器符號等。注釋:匯編程序在翻譯源程序時(shí)不對它們做任何處理。

2.偽指令語句偽指令是在程序匯編期間由匯編程序處理的操作。[名字]偽指令助記符參數(shù),參數(shù)…[;注釋]名字:是反映偽指令偏移地址的標(biāo)識符,后面沒有冒號。取名與標(biāo)號的取名一樣。偽指令助記符:表示偽指令的所要完成的操作。參數(shù):偽指令要求的內(nèi)容,常數(shù)、變量、表達(dá)式,允許多個(gè)。二、匯編語言程序格式完整的匯編語言源程序由若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段組成;段與段之間的順序可隨意排列;可運(yùn)行的程序必須包含一個(gè)代碼段,并指明程序的起始語句,數(shù)據(jù)段、附加段、堆棧段不是必須;指令語句必須位于某一個(gè)代碼段內(nèi),偽指令語句可按需要位于任一段內(nèi)。;N01.ASM(文件名N01,注釋語句)STACK SEGMENTSTACK ;定義堆棧段DW512DUP(?)STACK ENDS ;堆棧段結(jié)束DATA SEGMENT ;定義數(shù)據(jù)段 STRING DB'welcome!','$'DATA ENDS

;數(shù)據(jù)段結(jié)束CODE SEGMENT ;定義代碼段

ASSUMECS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA ;建立DS段地址

MOV DS,AX MOV DX,OFFSETSTRING MOV AH,9 INT 21H MOV AX,4C00H ;返回DOS的參數(shù)

INT 21H ;返回DOSCODE ENDS ;代碼段結(jié)束

END START ;源程序結(jié)束4.2匯編語句參數(shù)匯編語句的參數(shù)可分為兩類:數(shù)值型參數(shù)和地址型參數(shù)。指令語句中指令操作數(shù)可以是立即數(shù)、寄存器和存儲單元,其中立即數(shù)就是數(shù)值型參數(shù)。標(biāo)號或變量的名字屬于地址型參數(shù)。偽指令語句中參數(shù)給匯編程序提供必要的信息,使匯編程序能夠完成對源程序的匯編。一、數(shù)值型參數(shù)1.常數(shù)一般數(shù)、字符串?dāng)?shù)、符號常數(shù)2.符號常數(shù)定義偽指令(EQU、=)EQU偽指令格式:符號名EQU數(shù)值表達(dá)式符號名EQU<字符串>注意:EQU與=的區(qū)別EQU和=右邊也允許出現(xiàn)符號,但必須先定義3.?dāng)?shù)值表達(dá)式數(shù)值表達(dá)式是由常數(shù)、寄存器、變量及標(biāo)號等用運(yùn)算符連接起來的式子,可分為算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式??沙霈F(xiàn)在指令語句或偽指令語句中(1)算術(shù)運(yùn)算符:+,-,*,/,MOD,SHL,SHR例如:MOVAX,5*(7-3)等價(jià)于MOVAX,20MOVAL,1010010BSHL2等價(jià)于MOVAL,01001000B(2)邏輯運(yùn)算符:AND,OR,XOR,NOT例如:ANDAL,03HOR05H

等效于ANDAL,07H(3)關(guān)系運(yùn)算符:EQ,NE,GT,LT,GE,LE若關(guān)系成立用0FFFFH(補(bǔ)碼-1)表示條件為真;若關(guān)系不成立用0000H表示條件為假。例如:MOVBX,((PSGE0)AND11H)OR((PSLT0)AND77H)(4)運(yùn)算符的優(yōu)先順序①(),<>,[];②*,/,MOD,SHL,SHR;③+,-;④EQ,NE,GT,LT,GE,LE;⑤NOT;⑥AND;⑦OR,XOR4.2.2地址型參數(shù)地址型參數(shù)指標(biāo)號、變量和地址表達(dá)式,包括變量名、段名、過程名,以及在指令語句中出現(xiàn)的含有存儲單元地址的參數(shù)等,可以出現(xiàn)在指令語句和偽指令語句中。1.標(biāo)號標(biāo)號是代碼段中可執(zhí)行語句的地址符號,后面跟著冒號。被用于轉(zhuǎn)移指令和過程調(diào)用指令中做為目的地址操作數(shù)。標(biāo)號具有三種屬性。(1)段屬性:段地址在CS段中(2)偏移量屬性:距CS段首地址的偏移量(3)類型屬性:NEAR表示段內(nèi)標(biāo)號,F(xiàn)AR表示段間標(biāo)號,在過程調(diào)用指令中指明。2.變量變量是在地址段或其他段中存儲單元的地址符號,做為指令的存儲器操作數(shù)來引用。變量具有三種屬性。(1)段屬性:變量所在的段,可以是CS,DS,SS,ES。(2)偏移量屬性:距所在段首地址的偏移量。(3)類型屬性:變量的類型由偽指令來定義,指定存取變量的一個(gè)元素所需要的數(shù)據(jù)的字節(jié)數(shù)(類型),包括DB(字節(jié))、DW(字,2字節(jié))、DD(雙字,4字節(jié))、DQ(8個(gè)字節(jié))、DT(10字節(jié))3.地址表達(dá)式地址表達(dá)式由變量、標(biāo)號、常量、寄存器及運(yùn)算符組成。地址表達(dá)式的結(jié)果是由匯編程序計(jì)算出的存儲器地址,沒有屬性。三、特殊運(yùn)算符特殊的運(yùn)算符只對本語句有效,并沒有改變變量的屬性。1.屬性替代運(yùn)算符(1)強(qiáng)制類型運(yùn)算符PTR用于給已分配的存儲地址賦予另一種屬性,僅在本語句有效,不影響原有屬性。(2)定義類型運(yùn)算符THISTHIS指令是與EQU或=配合使用,給當(dāng)前偏移地址指定一種類型屬性,同時(shí)定義了一個(gè)名字。與PTR類似,用于建立同一地址的不同類型的變量或標(biāo)號,方便不同情況下使用。該名字不分配存儲單元,段屬性為所在的段,偏移地址為所在位置的下一個(gè)可用的存儲單元。格式:名字EQUTHIS類型名例如: BARRAYEQUTHISBYTE WARRAYDW3344H …… MOVAL,BARRAY ;AL=44H MOVAX,WARRAY ;AX=3344H(3)短取代運(yùn)算符SHORTSHORT設(shè)定標(biāo)號為短轉(zhuǎn)移,只用于JMP指令。轉(zhuǎn)移范圍為-128~+127字節(jié)。如:JMPSHORTNEXT2.?dāng)?shù)值返回操作符這一類操作數(shù)不改變操作數(shù)屬性,只回送操作數(shù)的某一屬性值。OFFSET變量或標(biāo)號偏移地址SEG變量或標(biāo)號段地址TYPE 變量標(biāo)號類型(DB=1,DW=2,DD=4)LENGTH 變量長度(僅對DUP語句有效,其他變量均=1)SIZE 變量 LENGTH*TYPE例:BUF的段地址是0500H,偏移地址為0015H,BUF為字類型變量。BUFDW1111H,2255H,3333HBUF1DB9DUP(1)求下列指令執(zhí)行后寄存器的值。MOV SI,OFFSETBUF ;SI=0015HMOV BX,SEGBUF ;BX=0500HMOV DI,TYPEBUF ;DI=2MOV CX,LENGTHBUF1 ;CX=9MOV DX,SIZEBUF1 ;DX=9MOV AL,BYTEPTRBUF+3 ;AL=22H4.3匯編偽指令語句偽指令是非執(zhí)行指令,在程序匯編其間由匯編程序處理的語句。偽指令有符號定義偽指令,數(shù)據(jù)定義偽指令,段定義偽指令,其他偽指令等。一、符號定義偽指令格式:符號名LABEL類型例:

WAR LABELWORD AR DB3,4,5 …… MOV AX,WAR ;WAR為字類型

MOV AL,AR ;AR為字節(jié)類型

L2 LABELFAR L1: MOV AL,0二、數(shù)據(jù)定義偽指令格式:[變量名]偽指令助記符初值表變量是符號地址表示初值表首個(gè)數(shù)據(jù)的偏移地址偽指令助記符指DB、DW、DD等,表示變量的類型。初值表是由一系列用逗號分割開的參數(shù),可以是常數(shù)、表達(dá)式、問號、DUP等。問號(?)表示初值不確定,即不賦初值;DUP為重復(fù)分配操作符格式為:重復(fù)次數(shù)DUP(被重復(fù)數(shù)據(jù)列表)例:A1DB10A2DW2345H,34DFHA3DB3DUP(2)A4DB'abcd'A5DB'a','b','c','d'A6DW2DUP(1,2)A7DW67H,2DUP(?)例:A1DB10A2DW2345H,34DFHA3DB3DUP(2)A4DB'abcd'A5DB'a','b','c','d'A6DW2DUP(1,2)A7DW67H,2DUP(?)

例:下列數(shù)據(jù)段定義后P3=?DATA SEGMENT P1DW25,4DUP(0,1) P2DB0

P3EQUP2-P1DATA END三、地址計(jì)數(shù)器與對準(zhǔn)偽指令

1.地址計(jì)數(shù)器JMP$+8例:下列數(shù)據(jù)段定義后,變量PD的值為多少? DATASEGMENT PADW66 PBDB18DUP(?) PDEQU$-PA DATAENDS

2.ORG偽指令ORG偽指令用來設(shè)置當(dāng)前地址計(jì)數(shù)器的值。

格式:ORGN

例:

ORG30 DATDB1,2,3,4例:AA DB0AH,0BHARRAY DW0011H,2233H,4455H,6677HORG20HBB DW20DUP(?)問:以下指令執(zhí)行后寄存器的值為多少?LEA SI,ARRAYMOV AX,ARRAYMOV BX,ARRAY+2MOV DX,[ARRAY+2] MOV DI,OFFSETARRAY+2MOV SI,OFFSETBBMOV CX,SIZEBB

3.EVEN偽指令EVEN偽指令使下一個(gè)變量或指令開始于偶數(shù)字節(jié)地址。

格式:EVEN

例:

EVEN WARYDW20DUP(0)

4.ALIGN對齊偽指令A(yù)LIGN偽指令使下面的內(nèi)容變量必須從下一個(gè)能被NUM整除的地址開始分配。

格式:ALIGNNUM;NUM必須是2的冪

例:見P83例4.18

四、段和模塊定義偽指令1.段定義偽指令指令格式: 段名 SEGMENT[定位][組合][段字]['類別'] …… 段名 ENDS段名必須相同,SEGMENT和ENDS必須成對出現(xiàn)。(1)定位屬性:指定邏輯段的起始地址BYTE:段起始地址為下一個(gè)可用的字節(jié)地址;WORD:段起始地址為下一個(gè)可用的偶數(shù)地址;DWORD:段起始地址為下一個(gè)可被4整除的地址;PARA:段起始地址為下一個(gè)可被16整除的地址;PAGE:段起始地址為下一個(gè)可被256整除的地址。默認(rèn)的定位類型為PARA,其低4位是0,所以默認(rèn)情況下數(shù)據(jù)段的偏移地址從0開始。(2)組合屬性:指定段與段之間的關(guān)系??蔀椋簾o:本段與其他段沒有邏輯關(guān)系,不與其他段合并。每段都有自己的段地址。PUBLIC:連接程序把本段與所有同名同類型的其他段相鄰地連接在一起,然后為所有這些段指定一個(gè)共同的段地址,也就是合成一個(gè)物理段。STACK:指定堆棧段。連接程序?qū)⑺蠸TACK段按照與PUBLIC段的同樣方式進(jìn)行合并。通常組合屬性在多模塊設(shè)計(jì)時(shí)使用。單模塊下,除堆棧段必須使用組合屬性STACK外,各段相互獨(dú)立,不與其他段合并,無須指定組合屬性。(3)段字屬性:只有使用了.386等方式的偽指令這個(gè)屬性才起作用,它有以下兩種類型:USE16:該段按16為尋址,與8086尋址方式相同;USE32:該段按32位尋址。(4)‘類別名’屬性:為保持所有代碼和數(shù)據(jù)的連續(xù),將類別名相同的段連續(xù)存放,但各有各的段地址。通常使用‘code’,‘data’和‘stack’等類別名。

2.指定段寄存器偽指令格式1:ASSUME段寄存器:段名[,段寄存器:段名……]如ASSUMECS:CODE,DS:DATA格式2:ASSUME段寄存器:NOTHING功能:對指令給出的段寄存器取消已經(jīng)指定的缺省關(guān)系。

3.過程定義偽指令一個(gè)匯編程序可以由一個(gè)主過程和若干個(gè)子過程組成。過程定義偽指令就是將邏輯上相對獨(dú)立的程序段定義成過程,便于程序的閱讀和調(diào)試。格式:過程名PROCNEAR/FAR

…… RET過程名ENDP例:同一代碼段內(nèi)調(diào)用程序DATA SEGMENTSTR2 DB'TheFirstSubroutione!','$'STR3 DB'TheSecondSubroutione!','$'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA

MOV DS,AX CALL FIRST CALL SECOND MOV AH,4CH INT

21HFIRST PROC LEADX,STR2 M

溫馨提示

  • 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

提交評論