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

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——匯編語(yǔ)言程序格式匯編語(yǔ)言程序格式

(1)建立并運(yùn)行一個(gè)匯編語(yǔ)言程序有幾個(gè)操作步驟?(2)指令和偽指令的區(qū)別是什么?

(3)在匯編語(yǔ)言程序中,段定義偽指令和數(shù)據(jù)定義偽指令起什么作用?(4)變量和標(biāo)號(hào)的類型屬性分別有哪幾種?

(5)什么是表達(dá)式?表達(dá)式的優(yōu)先級(jí)順序是如何排列的?(6)匯編語(yǔ)言的上機(jī)過(guò)程是什么?

(7)匯編語(yǔ)言源程序一般由幾個(gè)段組成?

(8)匯編程序和連接程序的輸入、輸出文件有哪些?它們的作用是什么?

了解編輯程序、匯編程序、連接程序的功能及其輸入、輸出文件的類型;了解匯編語(yǔ)言源程序的格式;

熟練把握并運(yùn)用段定義偽指令和數(shù)據(jù)定義及存儲(chǔ)器分派偽指令;

熟悉數(shù)值表達(dá)式的書寫規(guī)范;上機(jī)編程時(shí)學(xué)會(huì)使用DEBUG調(diào)試程序。

介紹了匯編語(yǔ)言程序的完整段和簡(jiǎn)化段格式。在學(xué)習(xí)本內(nèi)容時(shí),可利用匯編語(yǔ)言程序的框架,通過(guò)上機(jī)來(lái)驗(yàn)證和理解各種指令和偽指令的格式、功能及作用。

段定義偽指令、數(shù)據(jù)定義及存儲(chǔ)器分派偽指令及其它偽指令;數(shù)據(jù)類型屬性和代碼屬性及其在編程中的應(yīng)用;數(shù)值表達(dá)式的表示及其應(yīng)用。

1匯編程序功能2偽指令

2.1段定義偽指令

2.1.1完整的段定義偽指令

2.2.2存儲(chǔ)模型與簡(jiǎn)化段定義偽指令2.2.3段組定義偽指令

2.3程序開(kāi)始和終止偽指令

2.4數(shù)據(jù)定義及存儲(chǔ)器分派偽指令2.5表達(dá)式賦值偽指令

2.6地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令2.7基數(shù)控制偽指令3匯編語(yǔ)言程序格式

3.1.匯編語(yǔ)言源程序語(yǔ)句的格式3.2表達(dá)式

3.3匯編語(yǔ)言源程序格式舉例

4匯編語(yǔ)言程序的上機(jī)過(guò)程1建立匯編語(yǔ)言的工作環(huán)境2匯編語(yǔ)言程序上機(jī)運(yùn)行過(guò)程3COM文件

第1頁(yè)共21頁(yè)

第一節(jié)匯編程序功能建立,運(yùn)行匯編語(yǔ)言程序

匯編程序的主要功能:

1.檢查源程序,給出出錯(cuò)信息。

2.產(chǎn)生目標(biāo)文件(.obj)和列表文件(.lst)。3.展開(kāi)宏指令。

其次節(jié)偽指令

匯編語(yǔ)言程序中的語(yǔ)句可以由指令、偽指令和宏指令組成。上一章我們介紹了8086指令系統(tǒng)中的6類指令,每一條指令都對(duì)應(yīng)一種CPU操作。

偽指令又稱為偽操作,它是在對(duì)源程序匯編期間由匯編程序處理的操作,它們可以完成如處理器選擇、定義程序模式、定義數(shù)據(jù)、分派存儲(chǔ)區(qū)、指示程序終止等功能。

宏指令是由用戶依照宏定義格式編寫的一段程序,其中語(yǔ)句可以是指令、偽指令,甚至是已定義的宏指令。宏指令將在第七章中介紹。

偽指令和指令的區(qū)別在于,每一條指令必需生成機(jī)器代碼,然后在程序運(yùn)行期間由CPU來(lái)執(zhí)行其操作;而偽指令是在匯編期間由匯編程序執(zhí)行的操作命令,除了數(shù)據(jù)定義及存儲(chǔ)器分派偽指令分派存儲(chǔ)器空間外,其它偽指令不生成目標(biāo)碼。和各種指令一樣,偽指令也是程序設(shè)計(jì)不可缺少的工具。下面介紹一些常用的偽指令。

第2頁(yè)共21頁(yè)

2.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.2段定義偽指令

段定義偽指令是表示一個(gè)段開(kāi)始和終止的命令,80x86有兩種段定義的方式:完整段定義和簡(jiǎn)化段定義,分別使用不同的段定義偽指令來(lái)表示各種段。

1.完整段定義偽指令的格式如下:

由于ASSUME偽指令只是指定某個(gè)段分派給哪一個(gè)段寄放器,它并不能把段地址裝入段寄放器中,所以在代碼段中,還必需把段地址裝入相應(yīng)的段寄放器中:MOVAX,DATA_SEG1;數(shù)據(jù)段地址MOVDS,AX;存入DS寄放器MOVAX,DATA_SEG2;附加段地址MOVES,AX;存入ES寄放器

假使程序中還定義了堆棧段STACK_SEG,也需要把段地址裝入SS中:MOVAX,STACK_SEG;堆棧段地址MOVSS,AX;存入ES寄放器

第3頁(yè)共21頁(yè)

注意,在程序中不需要用指令裝入代碼段的段地址,由于在程序初始化時(shí),裝入程序已將代碼段的段地址裝入CS寄放器了。而DS和ES是指向一個(gè)稱為“PSP〞(程序段前綴)的一塊區(qū)域的首地址。

為了對(duì)段定義作進(jìn)一步地控制,SEGMENT偽指令還可以增加類型及屬性的說(shuō)明,其格式如下:

段名SEGMENT[定位類型][組合類型]['類別']…段名ENDS

[]中的內(nèi)容是可選的,一般狀況下,這些說(shuō)明可以不用。但是,假使需要用連接程序把本程序與其他程序模塊相連接時(shí),就需要提供類型和屬性的說(shuō)明。

第4頁(yè)共21頁(yè)

·定位類型:說(shuō)明段的起始邊界值(物理地址)。

定位類型BYTEWORDDWORDPARAPAGE說(shuō)明段可以從任何地址邊界開(kāi)始段從字邊界開(kāi)始,即段的起始邊界值為偶數(shù)段從雙字的邊界開(kāi)始,即段的起始邊界值為4的倍數(shù)段從小段邊界開(kāi)始,即段的起始邊界值為16(或10H)的倍數(shù)段從頁(yè)邊界開(kāi)始,即段的起始邊界值為256(或100H)的倍數(shù)注意:定位類型的缺省項(xiàng)是PARA,即在未指定定位類型的狀況下,則連接程序默認(rèn)為PARA。BYTE和WORD用于把其它段(尋常是數(shù)據(jù)段)連入一個(gè)段時(shí)使用;DWORD一般用于運(yùn)行在80386及后繼機(jī)型上的程序。

·組合類型:說(shuō)明程序連接時(shí)的段組合方法。組合類型PRIVATEPUBLICCOMMONAT表達(dá)式MEMORYSTACK說(shuō)明該段為私有段,連接時(shí)將不與其它模塊中的同名段合并該段連接時(shí)將與其它同名段連接在一起,連接次序由連接命令指定該段在連接時(shí)與其它同名段有一致的起始地址,所以會(huì)產(chǎn)生覆蓋段地址=表達(dá)式的值,其值必為16位但AT不能用來(lái)指定代碼段與PUBLIC同義將多個(gè)同名堆棧段連接在一起,SP設(shè)置在第一個(gè)堆棧段的開(kāi)始注意:組合類型的缺省項(xiàng)是PRIVATE。

例:在連接之前已定義兩個(gè)目標(biāo)模塊如下:

模塊1SSEGSEGMENTPARASTACK

DSEG1SEGMENTPARAPUBLIC'Data'DSEG2SEGMENTPARA

CSEGSEGMENTPARA'Code'

模塊2DSEG1SEGMENTPARAPUBLIC'Data'DSEG2SEGMENTPARA

CSEGSEGMENTPARA'Code'

以上兩個(gè)模塊分別匯編后產(chǎn)生.OBJ文件,經(jīng)連接程序連接后產(chǎn)生的.EXE模塊如下:

模塊1CSEGSEGMENTPARA'Code'模塊2CSEGSEGMENTPARA'Code'

模塊1+2DSEG1SEGMENTPARAPUBLIC'Data'

第5頁(yè)共21頁(yè)

DUP(duplicate)

DUP偽指令可以依照給定的次數(shù)來(lái)復(fù)制某個(gè)(某些)操作數(shù),它可以避免屢屢鍵入同樣一個(gè)數(shù)據(jù)。例如,把6個(gè)FFH存入相繼字節(jié)中,可以用下面兩種方法,顯然用DUP的方法更簡(jiǎn)便些。

存入6字節(jié)的FFH

DATA20DB0FFH0FFH0FFH0FFH0FFH0FFH;DATA21DB6DUP(0FFH)

PTR屬性操作符

PTR指定操作數(shù)的類型屬性,它優(yōu)先于隱含的類型屬性。其格式為:

類型PTR變量[±常數(shù)表達(dá)式]

其中類型可以是BYTE、WORD、DWORD、FWORD、QWORD或TBYTE,這樣變量的類型就可以指定了。如下例:(P131例14)

LABEL偽指令

LABEL可以使同一個(gè)變量具有不同的類型屬性。其格式為:

其中變量的數(shù)據(jù)類型可以是BYTE,WORD,DWORD。

第11頁(yè)共21頁(yè)

2.5表達(dá)式賦值偽操作EQU

EQU是一個(gè)賦值偽操作(偽指令),它給一個(gè)數(shù)據(jù)標(biāo)號(hào)賦于一個(gè)常數(shù)值,但這個(gè)常數(shù)不占用存儲(chǔ)單元。當(dāng)這個(gè)數(shù)據(jù)標(biāo)號(hào)出現(xiàn)在程序中時(shí),匯編程序即用它的常數(shù)值代替數(shù)據(jù)標(biāo)號(hào)。EQU可以在數(shù)據(jù)段之外使用,甚至可用在代碼段中間。

使用EQU操作的優(yōu)點(diǎn)可從下面的例子中看出:COUNTEQU25

COUNTERDBCOUNTMOVAL,COUNT

=偽操作

賦值偽操作\的作用與EQU類似。它們之間的區(qū)別是,EQU偽操作中的標(biāo)號(hào)名是不允許重復(fù)定義的,而=偽操作是允許重復(fù)定義的。

注意:在EQU語(yǔ)句的表達(dá)式中,假使有變量或標(biāo)號(hào)的表達(dá)式,則在該語(yǔ)句前應(yīng)率先給出它們的定義。如上例,ALPHA必需在BETA之前定義,否則匯編程序?qū)⒅甘境鲥e(cuò)。例如,TMPEQU5

TMPEQUTMP+1則是錯(cuò)誤語(yǔ)句,由于TMP已賦值為5,就不能再把它定義為其它數(shù)值。

而TMP=5

TMP=TMP+1則是允許使用的,由于=偽操作允許重復(fù)定義。第一個(gè)語(yǔ)句TMP的值為5,其次個(gè)語(yǔ)句TMP的值就為6了。

2.6地址計(jì)數(shù)器與對(duì)準(zhǔn)偽指令1.

第12頁(yè)共21頁(yè)

ORG偽操作:

生成COM程序:

2.EVEN偽指令

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

3.ALIGN偽指令

ALIGN偽指令使它后面的數(shù)據(jù)或指令從2的整數(shù)倍地址開(kāi)始。其格式為:ALIGN2n(n為任意整數(shù))

2.7基數(shù)控制偽指令.RADIX偽指令

.RADIX可以把默認(rèn)的基數(shù)改變?yōu)?~16范圍內(nèi)的任何基數(shù)。其格式如下:

.RADIX基數(shù)值

其中基數(shù)值用十進(jìn)制數(shù)來(lái)表示。

應(yīng)當(dāng)注意,在用.RADIX16把基數(shù)定為十六進(jìn)制后,十進(jìn)制數(shù)后面都應(yīng)跟字母D。在這種狀況下,假使某個(gè)十

六進(jìn)制數(shù)的末字符為D,則應(yīng)在其后跟字母H,以免與十進(jìn)制數(shù)發(fā)生混淆。

第13頁(yè)共21頁(yè)

4.3匯編語(yǔ)言程序格式

3.1.匯編語(yǔ)言源程序語(yǔ)句的格式

(1)名字項(xiàng)

源程序中用以下字符來(lái)表示名字:字母A~Z數(shù)字0~9

專用字符?、·、@、-、$

除數(shù)字外,所有字符都可以放在源語(yǔ)句的第一個(gè)位置。名字中假使用到·則必需是第一個(gè)字符??梢杂煤枚嘧址麃?lái)說(shuō)明名字,但只有前面的31個(gè)字符能被匯編程序所識(shí)別。一般說(shuō)來(lái),名字項(xiàng)可以是標(biāo)號(hào)或變量。它們都用來(lái)表示本語(yǔ)句的符號(hào)地址,都是可有可無(wú)的,只有當(dāng)需要用符號(hào)地址來(lái)訪問(wèn)該語(yǔ)句時(shí)它才需要出現(xiàn)?!?biāo)號(hào):標(biāo)號(hào)在代碼段中定義,后面跟著冒號(hào):,它也可以用LABEL或EQU偽操作來(lái)定義。此外,它還可以作為過(guò)程名定義,這將在以后的章節(jié)中加以說(shuō)明。·變量:變量在數(shù)據(jù)段或附加數(shù)據(jù)段中定義,后面不跟冒號(hào)。它也可以用LABEL或EQU偽操作來(lái)定義。變量經(jīng)常在操作數(shù)字段出現(xiàn)。(2)操作項(xiàng)

操作項(xiàng)可以是指令、偽指令或宏指令的助記符。對(duì)于指令,匯編程序?qū)⑵浞g為機(jī)器語(yǔ)言指令。對(duì)于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。對(duì)于宏指令,則將根據(jù)其定義展開(kāi)。宏指令在第七章中將會(huì)專門論述。(3)操作數(shù)項(xiàng)

操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,多個(gè)操作數(shù)項(xiàng)之間一般用逗號(hào)分開(kāi)。對(duì)于指令,操作數(shù)項(xiàng)一般給出操作數(shù)地址,它們可能有一個(gè),或二個(gè),或三個(gè),或一個(gè)也沒(méi)有。對(duì)于偽操作或宏指令,則給出它們所要求的參數(shù)。

操作數(shù)項(xiàng)可以是常數(shù)、寄放器、標(biāo)號(hào)、變量或由表達(dá)式組成。(4)解釋項(xiàng)

解釋項(xiàng)用來(lái)說(shuō)明一段程序、一條或幾條指令的功能。對(duì)于匯編語(yǔ)言程序來(lái)說(shuō),解釋項(xiàng)的作用是很明顯的,它可以使程序簡(jiǎn)單被讀懂,因此匯編語(yǔ)言程序必需寫好解釋。解釋應(yīng)當(dāng)寫出本條(或本段)指令在程序中的功能和作用,而不應(yīng)當(dāng)只寫指令的動(dòng)作。

第14頁(yè)共21頁(yè)

3.2表達(dá)式

(1)算術(shù)操作符

算術(shù)操作符有+、-、*、/和MOD。

MOD是指除法運(yùn)算后得到的余數(shù),如19/7的商是2,而19MOD7則為5(余數(shù))。

(2)規(guī)律操作符AND、OR、XOR、NOT、SHL、SHR

(3)關(guān)系操作符

關(guān)系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。

第15頁(yè)共21頁(yè)

(4)數(shù)值回送操作符

TYPE、LENGTH、SIZE、OFFSET、SEG

例:

(5)屬性操作符

屬性操作符主要有:PTR、段操作符、SHORT、THIS、HIGH、LOW等。

第16頁(yè)共21頁(yè)

·操作符的優(yōu)先級(jí)(p143)

操作符的優(yōu)先級(jí)別從高到低排列如下:1.在圓括號(hào)中的項(xiàng),方括號(hào)中的項(xiàng),結(jié)構(gòu)變量(變量,字段。),然后是LENGTH、SIZE、WIDTH和MASK。2.名:(段取代)。

3.PTR,OFFSET,SEG,TYPE,THIS及段操作符。HIGH和LOW。

5.乘法和除法:*,/,MOD。6.加法和減法:+,-。

7.關(guān)系操作:EQ,NE,LT,LE,GT,GE。8.規(guī)律:NOT。9.規(guī)律:AND。

10.規(guī)律:OR,XOR。11.SHORT。

3.3匯編語(yǔ)言源程序格式舉例(p144)例1.完整段定義格式

;TITLE文件名-程序主要功能描述;EQU語(yǔ)句

;**************************datareasegment;定義數(shù)據(jù)段;數(shù)據(jù)定義語(yǔ)句

datareaends

;**************************prognamsegment;定義代碼段

;mainprocfar;主程序assumecs:prognam,ds:datarea

start:;程序起始執(zhí)行地址;為程序返回DOS設(shè)置堆棧值pushds;入棧保存原DS段址subax,ax;設(shè)置偏移地址為0pushax;入棧保存偏移地址

;置DS寄放器為當(dāng)前數(shù)據(jù)段

movax,datarea;datarea段地址movds,ax;存入DS寄放器

;主程序部分

ret;返回DOSmainendp;主程序終止

第17頁(yè)共21頁(yè)

;sub1procnear;定義子程序

;子程序部分

sub1endp;子程序終止

;

prognamends;代碼段終止

;***********************************endstart;匯編終止

例2.簡(jiǎn)化段定義格式

.modelsmall;定義存儲(chǔ)器模型.stack100h;定義堆棧段.data;定義數(shù)據(jù)段

;數(shù)據(jù)定義語(yǔ)句

.code;定義代碼段mainprocfarstart:

movax,@data;數(shù)據(jù)段地址

movds,ax;存入DS寄放器

;主程序部分

movax,4c00h

int21h;返回DOSmainendp;主程序終止endstart;匯編終止

4匯編語(yǔ)言程序的上機(jī)過(guò)程1建立匯編語(yǔ)言的工作環(huán)境

為運(yùn)行匯編語(yǔ)言程序至少要在磁盤上建立以下文件:1.編輯程序,如EDIT.EXE2.匯編程序,如MASM.EXE3.連接程序,如LINK.EXE調(diào)試程序,如DEBUG.COM

必要時(shí),還可建立如CREF.EXE,EXE2BIN.EXE等文件。

第18頁(yè)共21頁(yè)

2匯編語(yǔ)言程序上機(jī)運(yùn)行過(guò)程

C>EDITMYFILE.ASM

C>MASMMYFILE.ASM

Microsoft(R)MacroAssemblerVersion5.00

Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[MYFILE.OBJ]:Sourcelisting[NUL.LST]:MYFILE.LSTCross-reference[NUL.CRF]:

51646+44778Bytessymbolspacefree0WarningErrors0SevereErrors

C>LINKMYFILE.OBJ

Microsoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.RunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:

LINK:warningL4021:nostacksegment

C>MYFILE

上述內(nèi)容是建立并運(yùn)行一個(gè)匯編語(yǔ)言程序的操作,紅色字表示程序員鍵入的命令,黑色字是計(jì)算機(jī)的回復(fù),為回車符。假設(shè)EDIT、MASM、LINK和匯編語(yǔ)言程序都在C盤中。

LINK程序的輸出文件有.EXE可執(zhí)行文件和.MAP連接映象文件。.EXE文件是CPU能識(shí)別并執(zhí)行的代碼,.M

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論