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