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