資源描述:
《匯編語(yǔ)言源程序格式ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第2章匯編語(yǔ)言程序格式2.1匯編語(yǔ)言語(yǔ)句格式2.2偽指令2.3匯編語(yǔ)言源程序基本框架2.1匯編語(yǔ)言語(yǔ)句格式同其他程序設(shè)計(jì)語(yǔ)言一樣,匯編語(yǔ)言的翻譯器(匯編程序)對(duì)源程序有嚴(yán)格的格式要求。這樣,匯編程序才能確切翻譯源程序,形成功能等價(jià)的機(jī)器指令(目標(biāo)代碼),連接后能直接運(yùn)行。匯編語(yǔ)言程序格式就是匯編語(yǔ)言必須遵循的語(yǔ)法規(guī)則。2.1.1匯編語(yǔ)言語(yǔ)句類(lèi)型匯編語(yǔ)言源程序由語(yǔ)句序列構(gòu)成,匯編語(yǔ)言程序中的語(yǔ)句可以分為指令語(yǔ)句、偽指令語(yǔ)句和宏指令語(yǔ)句三種。(1)指令語(yǔ)句:對(duì)應(yīng)于CPU指令系統(tǒng)中的一條機(jī)器指令,由CPU執(zhí)行,能完成一定操作功能
2、,能夠翻譯成機(jī)器代碼的語(yǔ)句。(2)偽指令語(yǔ)句:無(wú)對(duì)應(yīng)的機(jī)器指令,不由CPU執(zhí)行,只為匯編程序在翻譯匯編語(yǔ)言源程序時(shí)提供有關(guān)信息,并不翻譯成機(jī)器代碼的語(yǔ)句。(3)宏指令語(yǔ)句:就是由若干條指令語(yǔ)句形成的語(yǔ)句,一條宏指令語(yǔ)句的功能相當(dāng)于若干條指令語(yǔ)句的功能,詳見(jiàn)第5章。2.1.2匯編語(yǔ)言語(yǔ)句格式匯編語(yǔ)言源程序中的每個(gè)語(yǔ)句可以由4項(xiàng)組成,格式如下:[名字:]操作碼[操作數(shù)[,操作數(shù)]][;注釋]其中,名字項(xiàng)是一個(gè)符號(hào)項(xiàng)。操作碼項(xiàng)是一個(gè)操作碼的助記符,它可以是指令、偽指令或宏指令名。操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,它提供為執(zhí)行所要求
3、的操作而需要的信息。注釋項(xiàng)用來(lái)說(shuō)明程序或語(yǔ)句的功能?!?;”為識(shí)別注釋項(xiàng)的開(kāi)始。帶方括號(hào)的項(xiàng)是可選項(xiàng),需要根據(jù)具體情況而定。匯編語(yǔ)言源程序中的每條語(yǔ)句一般占一行,各項(xiàng)之間必須用空格或制表符作為分隔符,操作數(shù)之間用逗號(hào)分隔。1.名字項(xiàng)名字是用戶按照一定規(guī)則定義的標(biāo)識(shí)符,可由下列符號(hào)組成:字母A~Z、a~z數(shù)字0~9特殊字符?、.、@、_、$數(shù)字不能作名字項(xiàng)的第一個(gè)字符。而圓點(diǎn)僅能用作第一個(gè)字符,可以用很多字符來(lái)說(shuō)明名字,但只有前面的31個(gè)字符能被匯編程序所識(shí)別。為了便于記憶,名字的定義應(yīng)該能夠見(jiàn)名知義,如用BUFFER表示緩沖
4、區(qū)、SUM表示累加和等。名字有兩種形式:標(biāo)號(hào)或變量。指令語(yǔ)句中的名字通常用標(biāo)號(hào)表示,而偽指令語(yǔ)句中的名字通常用變量名、段名和過(guò)程名表示,多數(shù)情況下用變量名表示。(1)標(biāo)號(hào)標(biāo)號(hào)在代碼段中定義,也可以用EQU或LABEL偽指令來(lái)定義,標(biāo)號(hào)與其所代表的指令之間用冒號(hào)分開(kāi),用來(lái)代表一條指令所在單元的地址。標(biāo)號(hào)也可以作為過(guò)程名定義。標(biāo)號(hào)經(jīng)常在轉(zhuǎn)移指令的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)向的目標(biāo)地址。標(biāo)號(hào)在命名時(shí),應(yīng)盡量取有意義的字符,以便程序的閱讀和理解。標(biāo)號(hào)有3種屬性:段屬性、偏移屬性和類(lèi)型屬性。段屬性:標(biāo)號(hào)所代表指令單元的段起始地址,此
5、值必須在一個(gè)段寄存器中,而標(biāo)號(hào)的段則總是在CS寄存器中。偏移屬性:標(biāo)號(hào)所代表指令單元的段內(nèi)偏移地址,標(biāo)號(hào)的偏移地址是從段起始地址到定義標(biāo)號(hào)的位置之間的字節(jié)數(shù)。對(duì)于16位段是16位無(wú)符號(hào)數(shù)。類(lèi)型屬性:用來(lái)指出標(biāo)號(hào)是在本段內(nèi)引用還是在其他段中引用的。如是在段內(nèi)引用的,則稱為NEAR,轉(zhuǎn)移源和轉(zhuǎn)移目標(biāo)在同一個(gè)代碼段中,轉(zhuǎn)移時(shí),只改變IP值,不改變CS值;如在段外引用,則稱為FAR,轉(zhuǎn)移源和轉(zhuǎn)移目標(biāo)在不同的代碼段中,轉(zhuǎn)移時(shí),既改變IP值,又改變CS值。(2)變量變量在除代碼段以外的其它段中定義,后面不跟冒號(hào)。它也可以用EQU或LA
6、BEL偽指令來(lái)定義。變量是一個(gè)可以存放數(shù)據(jù)的存儲(chǔ)單元的名字,即存放數(shù)據(jù)的存儲(chǔ)單元的地址符號(hào)名。變量用DB、DW、DD定義,此時(shí)變量名僅表示該數(shù)據(jù)區(qū)或存儲(chǔ)區(qū)的第一個(gè)數(shù)據(jù)單元的首地址。變量經(jīng)常在操作數(shù)字段出現(xiàn)。變量也有3種屬性:段屬性、偏移屬性和類(lèi)型屬性。段屬性:變量所代表數(shù)據(jù)單元的段起始地址,此值必須在一個(gè)段寄存器中(DS、ES或SS中)。偏移屬性:變量所代表數(shù)據(jù)單元的段內(nèi)偏移地址,變量的偏移地址是從段的起始地址到定義變量的位置之間的字節(jié)數(shù)。對(duì)于16位段是16位無(wú)符號(hào)數(shù)。在當(dāng)前段內(nèi)給出變量的偏移值等于當(dāng)前地址計(jì)數(shù)器的值,當(dāng)前
7、地址計(jì)數(shù)器的值可以用$來(lái)表示。類(lèi)型屬性:變量的類(lèi)型屬性定義該變量所保留的字節(jié)數(shù),如BYTE(1個(gè)字節(jié)長(zhǎng)),WORD(2個(gè)字節(jié)長(zhǎng)),DWORD(4個(gè)字節(jié)長(zhǎng))。這一點(diǎn),將在數(shù)據(jù)定義偽指令中說(shuō)明。在同一個(gè)程序中,同樣的標(biāo)號(hào)或變量的定義只允許出現(xiàn)一次,否則匯編程序會(huì)指示出錯(cuò)。2.操作碼項(xiàng)操作碼項(xiàng)可以是指令、偽指令或宏指令的助記符。助記符表示指令語(yǔ)句的功能,如INC、MOV等,其符號(hào)與意義是由系統(tǒng)定義的,編程時(shí)必須照寫(xiě)不誤,既不能多寫(xiě),也不能少寫(xiě),如果指令帶有前綴(如REP、REPE等),則指令前綴和指令助記符要用空格分開(kāi)。對(duì)于指令
8、,匯編程序?qū)⑵浞g為機(jī)器語(yǔ)言指令。對(duì)于偽指令,匯編程序?qū)⒏鶕?jù)其所要求的功能進(jìn)行處理。對(duì)于宏指令,則將根據(jù)其定義展開(kāi)。在第5章中將會(huì)專門(mén)討論。3.操作數(shù)項(xiàng)指令中的操作數(shù)用來(lái)指定參與操作的數(shù)據(jù)。對(duì)于一般指令,可以有一個(gè)或兩個(gè)操作數(shù),也可以沒(méi)有操作數(shù);對(duì)于偽指令和宏指令,可以根據(jù)需要有多個(gè)操作數(shù)。操作數(shù)多于一