指令是指示計算機執(zhí)行某種操作的命令,計算機能識別執(zhí)行的只能是二進制代碼,以二進制代碼來描述指令功能的語言,稱為機器語言。
由于機器語言不便于人們識別,記憶,理解和使用,因此便對每條機器語言指令用助記符號來形象表示,這就便形成了匯編語言。
一條指令是機器語言的一個語句,包括操作碼字段和操作數(shù)字段。一臺計算機所具有的全部指令的集合,稱為這臺計算機的指令系統(tǒng)。
不同的微處理器,其指令系統(tǒng)一般是不同的。
80C51單片機指令系統(tǒng)共有111條指令,具體特點如下:
1)執(zhí)行時間短,單機器周期指令(64條),雙機器周期指令(45條),而四機器周期指令只有2條;
2)指令編碼字節(jié)少,單字節(jié)指令(49條),雙字節(jié)指令(45條)和最長的三字節(jié)指令(17條);
3)位操作指令豐富(17條)。
為便于閱讀指令,對MCS-51指令助記符的一些符號約定意義做以說明:
指令的基本格式及常用符號
指令的匯編語言形式是用助記符來表示一條指令,其基本形式為操作碼+操作數(shù)。
操作碼表示該指令將要做什么樣的操作,操作數(shù)是該指令操作的對象,一般是操作所需要的數(shù)或所需要的數(shù)的存放地址。
指令的字節(jié)數(shù)
80C51單片機指令有單字節(jié)指令,雙字節(jié)指令和三字節(jié)3種。
1)單字節(jié)指令單字節(jié)指令有49條,8位二進制代碼中既包含操作碼的信息,也包含操作數(shù)的信息;或8位二進制代碼中只包含操作碼的信息,而操作數(shù)的信息被隱含了。
例如:
機器碼為1110 1xxx,其中1110 1為操作碼,xxx為操作數(shù)n,若Rn為R3,那么xxx=011,則該機器碼為EBH。
例如:
機器碼為04H,被隱含的操作數(shù)為累加器A。
2)雙字節(jié)指令有45條,機器碼的第一個字節(jié)表示操作碼,第二個字節(jié)表示操作數(shù)。
例如:
3)三字節(jié)指令有17條,第一字節(jié)表示操作碼,另兩個字節(jié)是操作數(shù)。
例如:
指令的執(zhí)行時間
MCS-51系列單片機指令執(zhí)行時間有單周期指令,雙周期指令和四周期指令。
匯編語言的語句結(jié)構(gòu)
一般來講,匯編語言的語句結(jié)構(gòu)由5部分組成,即標號,操作助記符,目的操作數(shù),源操作數(shù)和注釋.
如下:
[]表示可選項;標號是用戶設(shè)定的地址符號,它代表該指令機器碼存放在存儲器中第一個字節(jié)的地址。
標號必須以字母開頭,氣候跟1-8個字母或數(shù)字,并以“:”結(jié)尾。
80C51的尋址方式
尋址方式就是尋找操作數(shù)的方式,由于80C51有片內(nèi)RAM,片內(nèi)ROM,片外RAM,片外ROM 4個不同的存儲區(qū)域,數(shù)據(jù)存儲的方式十分靈活。
在用匯編語言編程時,數(shù)據(jù)的存放傳送,運算都要通過指令來完成。
所以編程者必須自始至終都要十分清楚操作數(shù)的位置,以及如何將它們傳送到適當?shù)?a href="http://wenjunhu.com/tags/寄存器/" target="_blank">寄存器去參與運算,才能有效地完成匯編程序的編寫。
80C51單片機有7種尋址方式,即寄存器尋址,直接尋址,寄存器間接尋址,立即尋址,變址尋址,相對尋址,位尋址。
源操作數(shù)和目的操作數(shù)都有各自的尋址方式,下面以源操作數(shù)為例來講述尋址方式。
1.立即尋址
操作數(shù)就在指令代碼中,在操作碼之后,是一個8位的二進制數(shù)或者16位的二進制數(shù),稱為立即數(shù),這種尋址方式稱為立即尋址。
例如:
在80C51系統(tǒng)中,采用#作為立即數(shù)的前綴。
例如:
2.直接尋址
直接尋址是指令中直接給出操作數(shù)所在單元的地址。
采用直接尋址的存儲空間有:1)內(nèi)部RAM的低128字節(jié)(00H~7FH)2)位地址空間3)特殊功能寄存器,特殊功能寄存器只能用直接尋址方式操作
例如剛才說的例子就是直接尋址的方式。
在程序的轉(zhuǎn)移,調(diào)用指令中,由于指令直接給出了目的地址,執(zhí)行這些指令后,程序指針PC的內(nèi)容將直接由指令給出的地址來更新,所以這些指令的尋址方式也可以歸屬為直接尋址。
3.寄存器尋址
由指令指出某一寄存器的內(nèi)容為操作數(shù),這種尋址方式稱為寄存器尋址。
可以采用的寄存器有R0~R7,累加器A,寄存器B,數(shù)據(jù)指針DPTR和布爾處理器的位累加器C。
例如:
指令中源操作數(shù)R0是寄存器尋址。該指令的功能是將工作寄存器R0中的內(nèi)容傳送到A中,如R0中的內(nèi)容為44H,則執(zhí)行該指令后,A的內(nèi)容也為44H。
在MCS-51中寄存器尋址Rn按所選定的工作寄存器R0~R7進行操作,指令機器碼的低3位的8種組合000,001,....,110,111分別對應(yīng)R0~R7。
例如:
這8條指令對應(yīng)的機器碼分別為E8H~EFH。
4.寄存器間接尋址
指令中給出寄存器的名稱,以寄存器的內(nèi)容為地址再取一次數(shù),該數(shù)才是真正的操作數(shù),這種尋址方式稱為寄存器間接尋址。
在80C51系統(tǒng)中,可以用作間接尋址的寄存器有R0,R1,以及數(shù)據(jù)指針寄存器DPTR。
寄存器間接尋址對應(yīng)的空間為:片內(nèi)RAM:采用@R0,@R1,或SP片外RAM:采用@R0,@R1,或DPTR
5.變址尋址
以DPTR或PC為基址寄存器,累加器A為變址寄存器。把二者內(nèi)容相加,結(jié)果作為操作數(shù)的地址,這種尋址方式稱為變址尋址。
這類指令只限于訪問ROM,常用語查表操作和指令跳轉(zhuǎn)。
例如:
6.相對尋址
相對尋址方式是以PC的內(nèi)容為基地址,加上指令中給定的偏移量,所得結(jié)果作為轉(zhuǎn)移地址送PC寄存器。
偏移量是8位帶符號數(shù)的補碼,真值在-128~+127之間。以下一條指令的PC值為起點,轉(zhuǎn)移訪問范圍在-128~+127。
它用于訪問程序存儲器,常出現(xiàn)在相對轉(zhuǎn)移指令中。
例如:
是一條累加器A為0就轉(zhuǎn)移的雙字節(jié)指令,則執(zhí)行該指令時的當前PC為2052H,即當前PC值是相對轉(zhuǎn)移指令取指結(jié)束時的值。
偏移量rel是有符號的單字節(jié)數(shù)。以補碼表示,其值范圍在-128~+127。
負數(shù)表示從當前地址向前轉(zhuǎn)移,正數(shù)表示從當前地址向后轉(zhuǎn)移。所以,相對轉(zhuǎn)移指令滿足條件后,轉(zhuǎn)移的地址為:
7.位尋址
從本質(zhì)上來說,位尋址也是直接尋址的一種形式。它的尋址對象是可尋址位空間中的一個位,而不是一個字節(jié)。
由于在使用上存在一些特殊性,故單獨列出。位尋址方式的尋址范圍是可尋址位,包含內(nèi)部RAM20H~2FH單元中的位和部分SFR位。
位操作指令中的位地址有4種表示方法:
1)直接地址,如00H
2)點操作符,如20H.0,PSW.5
3)位名稱,如F0
4)經(jīng)偽指令定義過的字符名稱,如USER BIT PSW.5
評論
查看更多