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