8051單片機(jī)指令符號約定及指令格式
一個(gè)計(jì)算機(jī)的指令系統(tǒng)就是它能執(zhí)行的全部指令的集合。8051的指令系統(tǒng)共有111條指令,由42種助記符和7種尋址方式組合而成。
8051的指令通常包括操作碼,和操作數(shù)兩部分。操作碼規(guī)定指令進(jìn)行什么操作,采用助記表示;操作數(shù)表示指令的操作對象。
匯編語言指令的基本形式是:操作碼助記符 目的操作數(shù),源操作數(shù)。
操作碼助記符與操作數(shù)分開書寫,操作數(shù)中目的操作數(shù)在前,源操作數(shù)在后,操作數(shù)之間用逗號分隔。
如指令MOV B,#23H中符號MOV就是操作碼助記符,這個(gè)助記符的意義為將源操作數(shù)傳入目的操作數(shù)地址中,累加器A是目的操作數(shù),寄存器B是源操作數(shù)。
8051的機(jī)器語言指令根據(jù)長度有一字節(jié)、二字節(jié)、三字節(jié)三種。一字節(jié)指令操作碼中包含了操作數(shù)的信息。如指令I(lǐng)NC A就是一條一字節(jié)指令,其操作碼為00000100B,這個(gè)操作碼的意義是將累加器的內(nèi)容加1,請注意這條指令中的A只是一個(gè)符號,而不是一個(gè)操作數(shù),累加器在指令中只有寫成ACC時(shí)才是一個(gè)操作數(shù)。編譯程序在編譯的過程中將ACC編譯為累加器的直接地址OEOH。
用指令I(lǐng)NC ACC也可以完成將累加器內(nèi)容加1的功能,但這條指令是兩字節(jié)指令。
其中,INC是操作碼助記符,代表的意思是將后面的操作數(shù)地址中的內(nèi)容加1,ACC是操作數(shù),在指令中作隱含操作數(shù)的除了符號A代表累加器外,還有R0到R7代表工作寄存器。
指令MOV A R0的機(jī)器碼為11101000B,即E8H指令MOV A R1的機(jī)器碼為11101001B,即E9H指令MOV A R2的機(jī)器碼為11101010B,即EAH指令MOV A R7的機(jī)器碼為11101111B,即EFH指令MOV A RN的機(jī)器碼為E8H-EFH。
兩字節(jié)指令中操作碼,操作數(shù)各占一個(gè)字節(jié)。
三字節(jié)指令格式為操作碼,操作數(shù)。操作數(shù)在傳送指令中,第一個(gè)操作數(shù)稱為目的操作數(shù),第二個(gè)操作數(shù)稱為源操作數(shù)。
三字節(jié)指令中操作碼占第一個(gè)字節(jié),操作數(shù)占后兩字節(jié),操作數(shù)所占兩字節(jié),每字節(jié)表示一個(gè)操作數(shù)。
下面我們看看指令描述中的符號。
Rn表示當(dāng)前選擇的8個(gè)工作寄存器R0~R7中的一個(gè)。在具體編程時(shí)要把RN用到R0到R7中的一個(gè)替換。
@Ri表示用作間接尋址的工作寄存器,I可取值0或1。表示寄存器間接尋址方式,在具體編程時(shí),符號@RI要用@R0或@R1替換。
Direct表示8位直接地址。用于尋址內(nèi)部RAM或特殊功能寄存器。
#data表示8位立即數(shù)。
@data16表示16位立即數(shù)。
Addr16表示16位目的地址。只限于LCALL和LJMP指令使用,在編程時(shí),可直接使用地址標(biāo)號,編譯時(shí),再由編譯軟件自動(dòng)將該標(biāo)號轉(zhuǎn)換成16位目的地址。
Addr11表示11位目的地址。只限于ACALL和AJMP使用,在編程時(shí),可直接使用地址標(biāo)號,編譯時(shí),再由編譯軟件自動(dòng)將該標(biāo)號轉(zhuǎn)換成11位目的地址。
Rel表示補(bǔ)碼表示的8位偏移量。用于相對轉(zhuǎn)移指令中,在編程時(shí),可直接使用地址標(biāo)號,編譯時(shí),再由編譯軟件自動(dòng)將該標(biāo)號轉(zhuǎn)換成8位地址偏移量。
/bit表示位地址中的位取反。