匯編語(yǔ)言在編程中都有哪些指令?
MCS 51 指令系統(tǒng)中每一條指令都是用意義明確的助記符來(lái)表示的,這種由指令的助記符、符號(hào)地址、標(biāo)號(hào)等書寫的程序稱為匯編語(yǔ)言程序。
匯編語(yǔ)言(Assembly Language)是任何一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言。在匯編語(yǔ)言中,用助記符代替機(jī)器指令的操作碼,用地址符號(hào)或標(biāo)號(hào)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語(yǔ)言對(duì)應(yīng)著不同的機(jī)器語(yǔ)言指令集,通過(guò)匯編過(guò)程轉(zhuǎn)換成機(jī)器指令。特定的匯編語(yǔ)言和特定的機(jī)器語(yǔ)言指令集是一一對(duì)應(yīng)的,不同平臺(tái)之間不可直接移植。
匯編語(yǔ)言程序設(shè)計(jì)是開發(fā)計(jì)算機(jī)應(yīng)用系統(tǒng)的基本功。本章將通過(guò)一些基本程序,介紹部分常用的程序設(shè)計(jì)方法。
偽指令
我們知道,計(jì)算機(jī)只認(rèn)識(shí)機(jī)器指令(二進(jìn)制編碼), 因此應(yīng)用系統(tǒng)中必須把匯編語(yǔ)言源 程序通過(guò)匯編程序翻譯成機(jī)器語(yǔ)言程序( 目標(biāo)程序),計(jì)算機(jī)才能執(zhí)行,這個(gè)翻譯過(guò)程稱為 匯編。匯編程序在匯編過(guò)程中,必須要提供一些專 門 的指令,這些指令在匯編 時(shí)并不產(chǎn)生 目標(biāo)代碼,不影響程序的執(zhí)行,所以稱為偽指令 。下面介紹幾種常用的偽指令。
一、匯編起始指令 ORG
指令格式為:
ORG nn
該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址,它總是出現(xiàn)在每段源程序或數(shù) 據(jù)塊的開始。式中,nn 為 16 位地址,匯編時(shí) nn 確定了此語(yǔ)句后面第一條指令或第一個(gè)數(shù) 據(jù) 的地址,此后的源程序或數(shù)據(jù)塊就依次連續(xù)存放在以后的地址內(nèi),直到遇到另一個(gè) ORG 指令為止。例:
ORG 2000H
MOV SP ,# 60H
MOV R0 ,# 2FH
MOV R2 ,#0FFH
ORG 偽指令說(shuō)明其后面程序的目標(biāo)代碼在存儲(chǔ)器中存放的起始地址是 2000H ,即
二、等值指令 EQU
指令格式:
字符名稱 EQU 數(shù)字或匯編符號(hào)
功能:使指令中的字符名稱等價(jià)于給定的數(shù)字或匯編符號(hào)。
使用等值指令可給程序的編制、調(diào)試、修改帶來(lái)方便,如果在程序中要多次使用到某一地址 ,由 EQU 指令將其賦值給一個(gè)字符名稱,一旦需要對(duì)其進(jìn)行變動(dòng) ,只要改變 EQU 命令后面的數(shù)字即可,而不需要對(duì)程序中涉及到該地址的所有指令逐句進(jìn)行修改。但要注意,由 EQU 等值的字符名稱必須先賦值后使用,且在同一個(gè)源程序中,同一個(gè)標(biāo)號(hào)只能賦值一次。例:
PA8155 EQU 8001H
即給標(biāo)號(hào) PA8155 賦值為 8001H 。
三、定義字節(jié)指令 DB
指令格式:
[標(biāo)號(hào):] DB 8 位二進(jìn)制數(shù)表
功能:把 8 位二進(jìn)制數(shù)表依次存入從標(biāo)號(hào)開始的連續(xù)的存儲(chǔ)單元中。
格式中,標(biāo)號(hào)區(qū)段可有可無(wú),DB 指令之后的 8 位二進(jìn)制數(shù)表是字節(jié)常數(shù)或用逗號(hào)隔開的字節(jié)串 ,也可以是用引號(hào)括起 的 ASCII 碼字符串 (一個(gè) ASCII 字符相當(dāng)于一個(gè)字 節(jié))。 例:
ORG 1000H
BUF1 : DB38H ,7FH ,80H
BUF2 : DB45H ,66H
ORG 偽指令指定了標(biāo)號(hào) BUF1 的地址為 1000H ,而 DB 偽指令是將其后的二進(jìn)制數(shù)表 38H 、7FH 、80H 依次存放在 1000H 、1001H、1002H3 個(gè)連續(xù)單元之中,BUF2 也是一個(gè)標(biāo)號(hào),其地址與前一條偽指令連續(xù),即 1003H 、1004H 地址單元中依次存放 45H 、66H 。
四、定義字指令 DW
指令格式:
[標(biāo)號(hào):] DW 16 位數(shù)據(jù)表
該指令的功能與 DB 相似 ,區(qū)別僅在于從指定地址開始存放的是指令中的 16 位數(shù)據(jù),而不是字節(jié)串。每個(gè) 16 位數(shù)據(jù)要占兩個(gè)存儲(chǔ)單元 ,高 8 位先存,低 8 位后存 ,這和 MCS 51指令中的 16 位數(shù)據(jù)存放順序是一致的。
五、匯編結(jié)束指令 END
指令格式:
[標(biāo)號(hào):] END 地址或標(biāo)號(hào)
格式中標(biāo)號(hào)以及 END 后面的地址或標(biāo)號(hào)可有可無(wú)。
功能:提供匯編結(jié)束標(biāo)志。匯編程序遇到 END 后就停止匯編,對(duì) END 以后的語(yǔ)句不予處理,故 END 應(yīng)放在程序的結(jié)束處。
匯編語(yǔ)言, 即第二代計(jì)算機(jī)語(yǔ)言,用一些容易理解和記憶的縮寫單詞來(lái)代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表減法操作指令,以及"INC"代表增加1,"DEC"代表減去1,"MOV"代表變量傳遞等等,通過(guò)這種方法,人們很容易去閱讀已經(jīng)完成的程序或者理解程序正在執(zhí)行的功能,對(duì)現(xiàn)有程序的bug修復(fù)以及運(yùn)營(yíng)維護(hù)都變得更加簡(jiǎn)單方便。但計(jì)算機(jī)的硬件不認(rèn)識(shí)字母符號(hào),這時(shí)候就需要一個(gè)專門的程序把這些字符變成計(jì)算機(jī)能夠識(shí)別的二進(jìn)制數(shù)或機(jī)器語(yǔ)言。因?yàn)閰R編語(yǔ)言只是將機(jī)器語(yǔ)言做了簡(jiǎn)單編譯,所以并沒有根本上解決機(jī)器語(yǔ)言的特定性,所以匯編語(yǔ)言和機(jī)器自身的編程環(huán)境息息相關(guān),推廣和移植很難,但是還是保持了機(jī)器語(yǔ)言優(yōu)秀的執(zhí)行效率,因?yàn)樗目砷喿x性和簡(jiǎn)便性,匯編語(yǔ)言到現(xiàn)在依然是常用的編程語(yǔ)言之一。