《匯編語言程序設(shè)計》第4章市公開課金獎市賽課一等獎?wù)n件_第1頁
《匯編語言程序設(shè)計》第4章市公開課金獎市賽課一等獎?wù)n件_第2頁
《匯編語言程序設(shè)計》第4章市公開課金獎市賽課一等獎?wù)n件_第3頁
《匯編語言程序設(shè)計》第4章市公開課金獎市賽課一等獎?wù)n件_第4頁
《匯編語言程序設(shè)計》第4章市公開課金獎市賽課一等獎?wù)n件_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章匯編語言與源程序結(jié)構(gòu)

◆匯編語言源程序與匯編程序

◆匯編語言語句種類及其格式

◆匯編語言數(shù)據(jù)與運算符

◆偽指令

◆源程序結(jié)構(gòu)模式

第1頁

4.1匯編語言源程序與匯編程序

1、匯編語言源程序匯編語言源程序是用匯編語言編寫程序,簡稱匯編語言程序。匯編語言程序經(jīng)過編輯程序在計算機中建立匯編語言源程序文件(ASM文件)。2、匯編程序?qū)R編語言源程序編譯成目標程序加工程序稱為匯編程序。這一加工過程稱為匯編。匯編程序作用就是把源程序文件(ASM文件)轉(zhuǎn)換成用二進制代碼表示目標程序文件(OBJ文件)。匯編程序主要功效有:①

檢驗源程序。②測出源程序語法錯誤,并給犯錯誤。③

產(chǎn)生目標程序,并可給出列表文件④

展開宏指令。

返回第2頁

4.2匯編語言語句種類及其格式

語句是匯編語言源程序基本組成單位。一個匯編語言源程序中有3種基本語句:指令語句、偽指令語句和宏指令語句。前兩種是最常見、最基本語句。指令語句和偽指令語句不但在程序中功效不一樣,而且實現(xiàn)其功效方法和時間也是不一樣。1、指令語句指令語句就是計算機中指令系統(tǒng)各條指令,每條指令語句在匯編時都產(chǎn)生一個供CPU執(zhí)行機器目標代碼,所以這種語句又稱為可執(zhí)行語句。計算機中每條指令語句表示一個基本功效,這些基本功效是在程序運行期間由計算機硬件來實現(xiàn)。一條指令語句由四個字段組成,其普通格式以下:[標號:]指令助記符[操作數(shù)][;注釋]

第3頁

(1)標號標號是指令語句符號地址,它代表指令代碼存放地址第一個字節(jié)地址。標號是指令語句可選項,通常在一個程序段或子程序入口指令語句選取標號,當程序需要轉(zhuǎn)入這個程序段或調(diào)用子程序時,就可直接引用這標號。標號通常在代碼段中定義,后面跟冒號“:”,它經(jīng)常在轉(zhuǎn)移指令或CALL指令中引用,用以表示轉(zhuǎn)向地址,引用時標號后不跟冒號。(2)指令助記符指令助記符為指令語句關(guān)鍵,是不可省略主要部分,如MOV、ADD、XOR、RCL等等,它表示指令語句要求CPU完成詳細操作。第4頁(3)操作數(shù)操作數(shù)表示指令助記符操作對象,不一樣指令所帶操作數(shù)不一樣,有一個操作數(shù)指令(如INC、NOT等),有二個操作數(shù)指令(如ADD、XOR等),無操作數(shù)指令(如CLC、STD等)。若需要操作數(shù),則每一個操作數(shù)要依據(jù)尋址方式來表示。操作數(shù)能夠是常數(shù)、存放器、標號、變量和表示式。(4)注釋注釋是用來說明一段程序或一條或多條指令功效,它是可選項,注釋均以分號“;”開始,它可占一行或多行。注釋還通慣用于調(diào)試程序。注釋是語句非執(zhí)行部分,所以,它不出現(xiàn)在機器目標代碼中,也不影響指令語句功效。第5頁

2、偽指令語句偽指令語句指示匯編程序在匯編源程序時完成一些工作,比如完成數(shù)據(jù)定義、分配存放區(qū)、指示程序結(jié)束等。偽指令屬于匯編控制命令,它所指示操作是由匯編程序在匯編源程序時完成,在匯編時,它不產(chǎn)生目標代碼,在將源程序匯編成目標程序后,它就不復(fù)存在了??偠灾芍?,偽指令語句與指令語句主要區(qū)分是:偽指令語句經(jīng)匯編后不產(chǎn)生機器目標代碼,而指令語句經(jīng)匯編后將產(chǎn)生對應(yīng)機器目標代碼;偽指令語句所指示操作是在程序匯編時完成,而指令語句操作必須在程序運行時才能完成。一條偽指令語句也由四個字段組成,其普通格式以下:[符號名]偽指令符操作數(shù)[;注釋]第6頁

(1)符號名符號名在偽指令語句中是一個可選項,符號名后面沒有冒號,符號名能夠是常量名、變量名、過程名等。(2)偽指令符偽指令符指定匯編程序要完成詳細操作,它是偽指令語句關(guān)鍵部分,如數(shù)據(jù)定義偽指令DB、DW、DD,段定義偽指令SEGMENT,定義過程偽指令PROC等等。(3)操作數(shù)偽指令中操作數(shù)能夠是常數(shù)、字符串、變量、表示式,其個數(shù)由詳細偽指令決定,各個操作數(shù)之間用“,”分隔。(4)注釋偽指令語句注釋也是可選項,需要時必須以“;”開始。

第7頁

3、標識符指令語句中標號和偽指令語句中符號名統(tǒng)稱為標識符。它們由若干字符組成,標識符組成規(guī)則以下:(1)一個標識符由1--3個字符組成。(2)組成標識符字符能夠是字母(A--Z或a--z)、數(shù)字(0--9)、專用字符(“?”、“·”、“@”、“$”、“下劃線_”)。(3)除數(shù)字外,上述其余字符均可作為標識符首字符,“·”只能作為標識符首字符。(4)不能使用屬于系統(tǒng)專用保留字。返回第8頁

4.3匯編語言數(shù)據(jù)與運算符

匯編語言指令語句和偽指令語句操作數(shù)普通為常量、變量、標號、表示式。

1、常量常量是沒有任何屬性純數(shù)值,它值在匯編期間已能完全確定,且在程序運行中也不會發(fā)生改變。常量分為數(shù)值常量、字符串常量和符號常量,它主要用于指令語句中馬上數(shù)或偽指令語句中給變量賦初值等。(1)數(shù)值常量數(shù)值常量分為整數(shù)和實數(shù)。比如:11100011B,45693,0FF2AH,356703Q都是正確整數(shù)形式,又如:543.567,﹣45.23,1.2E﹣2,﹣45.4E﹢9都是正確實數(shù)形式。

第9頁

(2)字符串常量字符串常量是用單引號括起來一個字符或多個字符。字符串常量以單引號中各字符ASCII碼形式存放在內(nèi)存中,如‘H’,在內(nèi)存中就是41H,‘12’就是31H,32H。使用時可在單引號內(nèi)直接寫字符序列,如‘12AB’,也可寫字符ASCII碼,ASCII碼之間用逗號分隔(此時不需要用單引號),如31H,32H,41H,42H表示字符串‘12AB’。

(3)符號常量符號常量是指用EQU偽指令或賦值語句“=”定義過符號名,可作操作數(shù)項或在表示式中使用。

第10頁

2、變量在匯編語言中,變量是一個數(shù)據(jù)存放單元名稱,即數(shù)據(jù)存放地址符號表示。它代表存放在一些存放單元數(shù)據(jù),這些數(shù)據(jù)在程序運行期間隨時能夠改變。為方便訪問變量,在程序中經(jīng)過變量名來使用變量。(1)變量定義變量通常在數(shù)據(jù)段或附加段中使用數(shù)據(jù)定義偽指令來定義,定義變量就是給數(shù)據(jù)分配存放單元,有時為存放單元賦予一個變量名,并可同時為這些存放單元預(yù)置初值。數(shù)據(jù)定義偽指令格式為:[變量名]DB(DW、DD、DQ、DT)表示式1,表示式2,…第11頁

其中:變量名是可選項,它僅代表所定義數(shù)據(jù)存放區(qū)第一個單元地址;DB、DW、DD、DQ和DT是偽指令符,詳細一條數(shù)據(jù)定義偽指令取5種之一。DB定義是字節(jié)類型變量,每個表示式被分配1個字節(jié)單元。DW定義是字類型變量,每一個表示式被分配1個字單元(2個字節(jié))。DD定義是雙字類型變量,每一個表示式被分配2個字單元(4個字節(jié))。DQ定義是四字類型變量,每一個表示式被分配4個字單元(8個字節(jié))。DT定義是十字節(jié)類型變量,每一個表示式被分配10個字節(jié)單元。

第12頁表達式1,表達式2……是給變量或指定存放單元賦予初值,它們有以下幾個形式:(a)數(shù)值表達式數(shù)據(jù)定義偽指令可認為一個或連續(xù)存放單元設(shè)置數(shù)值初值。(b)字符串表達式對于DB偽指令,字符串長度允許超過2個字符,但不能超過255個字符,字符串必須用單引號括起來,它可為字符串中每個字符分配1字節(jié)單元,字符串從左至右以字符ASCII碼形式按地址遞增次序依次存放。

第13頁

(c)?表示式不帶引號?,用于為變量預(yù)留內(nèi)存單元,暫時不存入數(shù)據(jù),即表示所定義變量無確定初值。比如:ADW?,?為變量A預(yù)留2個字單元。(d)地址表示式操作數(shù)為地址表示式時,只適合用于DW和DD這兩種數(shù)據(jù)定義偽指令。假如地址表示式為一變量(標號)名,用DW偽指令則是取它偏移地址來初始化變量;用DD偽指令則是取它段首地址和偏移地址來初始化變量。(e)帶DUP表示式格式為:nDUP(表示式),其中n為重復(fù)因子,只能取正整數(shù),它表示定義了n個數(shù)據(jù)存放單元。第14頁

(2)變量屬性

因為存放器是分段使用,因而源程序定義變量含有3個屬性:(a)段屬性(SEG)變量段屬性是指定義變量時它所在段段首地址。(b)偏移屬性(OFFSET)變量偏移屬性是指所在段段首地址到定義該變量位置之間字節(jié)數(shù)(即偏移地址)。上述段屬性和偏移屬性值就組成了一個變量邏輯地址。(c)類型屬性(TYPE)變量類型屬性表示存放變量時所占存放單元字節(jié)個數(shù)。第15頁

(3)變量使用定義后變量,在程序中引用有兩種情況:(a)在指令語句中,采取存放器操作數(shù)幾個尋址方式,除存放器間接尋址方式不使用變量名外,其余各種尋址方式均可使用變量名。比如,某數(shù)據(jù)段已定義一變量ARRAY:ARRAYDW5000H,4000H(b)在數(shù)據(jù)定義偽指令DW和DD中,操作數(shù)字段可直接引用已定義過變量名。如:ADB50H,40HBDWACDDB第16頁

3、標號標號是一條指令語句符號地址,在匯編源程序中,只有在需要轉(zhuǎn)向一條指令語句時,才為該指令語句設(shè)置標號,方便在控制轉(zhuǎn)移指令中直接引用這個標號。標號普通在代碼段中定義和引用。因為標號代表了指令符號地址,所以標號也有3個屬性:(a)段屬性(SEG)。標號段屬性是指標號定義所在段段首地址。(b)偏移屬性(OFFSET)。標號偏移屬性是指標號所在段段首地址到該標號字節(jié)距離。(c)類型屬性(TYPE)。標號類型屬性表示了它轉(zhuǎn)移特征,即該標號是作為段內(nèi)還是段間轉(zhuǎn)移(或調(diào)用)指令目標地址。標號類型屬性有2種:NEAR類型和FAR類型。第17頁

4、表示式和運算符匯編語言指令語句和偽指令語句中,表示式是操作數(shù)項常見形式,表示式是由常量、變量、標號用運算符連接而成有意義式子。表示式分為數(shù)值表示式和地址表示式,任一表示式值只計算一次,表示式計算是在源程序匯編過程中進行,而不是在程序運行中進行,匯編程序?qū)⒈硎臼接嬎愫蟮玫揭粋€數(shù)值或一個地址。在8086匯編語言中,運算符分為:算術(shù)運算符、邏輯運算符、關(guān)系運算符、數(shù)值返回運算符、屬性運算符和字節(jié)分離運算符。第18頁

(1)數(shù)值表示式數(shù)值表示式是由常量與算術(shù)運算符、邏輯運算符或關(guān)系運算符組成有意義式子。數(shù)值表示式在匯編期間進行運算,運算結(jié)果為一數(shù)值常量,它只有大小而沒有屬性。(2)地址表示式地址表示式是由常量、變量、標號、存放器(BX、BP、SI、DI)內(nèi)容(用存放器名加方括號表示)和運算符組成有意義式子。單個變量、標號、存放器內(nèi)容是地址表示式特例。地址表示式中能夠使用算術(shù)運算符中“+”、“-”運算符和關(guān)系運算符。在地址表示式中,慣用形式是:變量±常量。

第19頁

地址表示式除使用數(shù)值表示式運算符外,還能夠使用特殊算符。(a)屬性運算符屬性運算符主要用于暫時修改變量、標號或某個內(nèi)存單元中操作數(shù)類型屬性。①段超越前綴“:”。其格式為:段存放器名:地址表示式或段名:地址表示式②類型運算符PTR。其使用格式為:類型PTR地址表示式依據(jù)地址表示式不一樣值,類型能夠是BYTE、WORD、DWORD、NEAR、FAR等。③定義類型運算符THIS。其格式為:標識符EQUTHIS類型第20頁

(b)數(shù)值返回運算符數(shù)值返回運算符有5種,這些運算符運算對象必須是變量或標號,其功效是分離出變量或標號段、偏移地址及類型屬性值,運算結(jié)果為一數(shù)值常量。①SEG運算符格式:SEG變量或標號功效:分離出其后變量或標號所在段段首地址。②OFFSET運算符格式:OFFSET變量或標號功效:分離出其后變量或標號偏移地址。③TYPE運算符格式:TYPE變量或標號功效:分離出其后變量或標號類型值。

第21頁

④LENGTH運算符格式:LENGTH變量功效:取出變量所含數(shù)據(jù)存放單元個數(shù)。該運算符只對變量起作用,它取值依據(jù)定義該變量時數(shù)據(jù)定義偽指令后面第一個表示式形式而定。假如第一個表示式為重復(fù)子句“nDUP(表示式)”形式,則取值為前面重復(fù)因子n。假如為其它形式表示式,則取值均為1。⑤SIZE運算符格式:SIZE變量功效:取出變量所含數(shù)據(jù)存放區(qū)總字節(jié)數(shù)。其返回值為該變量LENGTH值和TYPE值乘積,即:LENGTH變量*YTPE變量。

第22頁

(c)分離運算符①分離高字節(jié)運算符HIGH。格式:HIGH常量或地址表示式功效:用來分離出其后16位常量或地址表示式偏移地址高字節(jié)。②分離低字節(jié)運算符LOW。格式:LOW常量或地址表示式功效:用來分離出其后16位常量或地址表示式偏移地址低字節(jié)。(d)其它運算符SHORT運算符:用于說明其后標號在短距離(-128--27之間)內(nèi)。()運算符用于改變運算優(yōu)先級別。[]運算符用于表示間接尋址。返回第23頁

4.4

偽指令

偽指令又稱為偽操作,偽指令是匯編語言程序設(shè)計一個主要部分,因為匯編程序在匯編過程中無法區(qū)分源程序中分段情況,哪些是數(shù)據(jù),哪些是指令,也無法識別數(shù)據(jù)類型,以及源程序在哪結(jié)束,所以,80X86宏匯編語言提供了各種偽指令,它主要告訴匯編程序怎樣正確地將匯編源程序匯編成目標程序。

1、數(shù)據(jù)定義偽指令慣用數(shù)據(jù)定義偽指令有DB、DW、DD、DQ、DT。格式:[變量]數(shù)據(jù)定義偽指令表示式[,表示式,…]功效:定義數(shù)據(jù)存放區(qū),類型由數(shù)據(jù)定義偽指令確定,初值由表示式給定。

第24頁

2、符號定義偽指令符號定義偽指令用于為程序中屢次出現(xiàn)同一個常量或表示式定義為一個標識符,方便在源程序中以標識符來代替對應(yīng)常量或表示式。符號定義偽指令有以下兩種。(1)等價偽指令EQU格式:符號名EQU表示式功效:為常量或表示式及其它各種符號定義一個等價符號名,但它不申請分配存放單元。

說明:①表示式能夠是常量或數(shù)值表示式;地址表示式;變量、標號或指令助記符。②符號名不占存放單元,沒有段、偏移和類型3種屬性③在同一源程序中,使用EQU定義符號不能與本程序中其它符號名同名;另外,同一符號不能用EQU偽指令重新定義。第25頁

EQU偽指令主要有以下3方面應(yīng)用:①定義符號常量。用符號名表示常量、數(shù)值表示式。

②EQU與屬性運算符PTR或THIS連用,能夠給變量或標號定義新類型屬性并重新命名。但其段屬性和偏移屬性不變。③利用EQU能夠用一個符號名替換一個復(fù)雜地址表示式和其它一些符號,如指令助記符、變量名、標號、段名、存放器名、宏定義名等。

(2)等號偽指令格式:符號名=表示式功效:該語句功效與EQU語句類似,不一樣是等號偽指令能對所定義符號名屢次重新定義,且以最終一次定義值為準。第26頁

3、段結(jié)構(gòu)偽指令編制一個80X86匯編語言源程序,段是基礎(chǔ),這有兩方面含義:一是必須按段來結(jié)構(gòu)程序,二是在程序執(zhí)行時,要憑借四個段存放器對各個段存放單元進行訪問。段結(jié)構(gòu)偽指令主要有兩條語句,即段定義偽指令和假定偽指令。(1)段定義偽指令SEGMENT/ENDS格式:段名SEGMENT[定位類型][組合類型][‘類別’]┇段體段名ENDS功效:定義一個邏輯段,指定段名字和范圍,段在內(nèi)存中起始位置、段與段之間連接關(guān)系。說明:①段名由用戶指定,開始與結(jié)束段名須一致。②SEGMENT/ENDS偽指令把程序分成若干邏輯段。

刪節(jié)號為段體,段體內(nèi)為指令和偽指令序列。

第27頁

(2)假定偽指令A(yù)SSUME假定偽指令主要用于指示匯編程序哪些段是當前段以及這些段與段存放器之間對應(yīng)關(guān)系。格式:ASSUME段存放器名:段名[,段存放器名:段名,…]其中,段名是指用SEGMENT/ENDS語句已定義段名,也能夠是表示式“SEG變量或標號”,或者是關(guān)鍵字NOTHING;段存放器名可為CS、DS、SS、ES四者之一。功效:該語句普通出現(xiàn)在代碼段中,用來設(shè)定段存放器與段之間對應(yīng)關(guān)系,方便匯編程序知道段結(jié)構(gòu)和在執(zhí)行各種指令時知道應(yīng)訪問哪個段;也可用來取消段存放器與段之間對應(yīng)關(guān)系(使用NOTHING時)。說明:①ASSUME偽指令設(shè)置在代碼段內(nèi),第一個ASSUME語句普通放在段定義語句之后,是說明性語句。

第28頁

②在一個代碼段中,假如沒有另外ASSUME偽指令重新設(shè)置,原有ASSUME語句設(shè)置一直有效。③不在當前段中變量和數(shù)據(jù)存放單元均是不可訪問,不然,會在匯編時產(chǎn)生錯誤或運行時造成混亂,產(chǎn)生邏輯上錯誤,得犯錯誤結(jié)果。④ASSUME偽指令不產(chǎn)生任何目標代碼,它僅僅是告訴匯編程序,哪些段是當前段,而且它們分別由哪個段存放器指向。⑤匯編程序不能檢驗在程序運行期間段存放器內(nèi)容是否與上述ASSUME語句設(shè)置一致。假如在程序中間用ASSUME語句重建了DS或ES與某段關(guān)系時,就一定要緊跟著將這個新段首地址送入DS或ES中,不然,會因段存放器內(nèi)容未更改而使得后面數(shù)據(jù)讀寫仍在原來數(shù)據(jù)段中進行,這么錯誤,系統(tǒng)是檢驗不出來,即出現(xiàn)邏輯錯誤。

第29頁

4、源程序開始和結(jié)束偽指令(1)源程序開始偽指令在源程序開始處能夠用NAME或TITLE為模塊取名字。①NAME偽指令格式:NAME模塊名匯編程序?qū)⒁越o出“模塊名”作為模塊名字。②TITLE偽指令假如程序中沒有NAME偽指令,則也可使用TITLE偽指令。格式:TITLEtextTITLE偽指令可指定每一頁上打印標題。同時,若程序中沒有NAME偽指令,則匯編程序?qū)⒂胻ext中前6個字符作為模塊名。text最多可有60個字符。若程序中既無NAME又無TITLE偽指令,則將用源程序名作為模塊名。所以NAME及TITLE偽指令并不是必要,但普通常使用TITLE,方便在列表文件中能打印出標題來。

第30頁(2)源程序結(jié)束偽指令格式:END[地址表示式]功效:該語句為源程序最終一個語句,用以標志整個程序結(jié)束,即告訴匯編程序匯編工作到此結(jié)束。其中,地址表示式為可選項,若選取地址表示式,則表示此程序是主程序,它能夠單獨執(zhí)行,其地址表示式為該程序開啟地址,即程序開始運行第一條指令地址,比如,“ENDSTART”,此START是第一條指令標號;若不選取表示式,則說明此程序為一子程序,不能單獨運行,只能被其它程序調(diào)用。

第31頁

5、定位偽指令ORG與匯編地址計數(shù)器($)匯編程序在匯編源程序時,每碰到一新段,就為該段設(shè)置一個初值為0匯編地址計數(shù)器,匯編程序使用匯編地址計數(shù)器記載正在匯編數(shù)據(jù)或指令目標代碼在當前段內(nèi)偏移地址。當前匯編地址計數(shù)器值可用符號$表示,用戶可在程序中直接使用$,表示引用當前匯編地址計數(shù)器值。比如:

ARRAYDW4000H,5000H,6000HCOUNTEQU($-ARRAY)/2匯編地址計數(shù)器值能夠用定位偽指令ORG設(shè)置。ORG偽指令格式:ORG數(shù)值

溫馨提示

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

最新文檔

評論

0/150

提交評論