單片機(jī)原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第1頁(yè)
單片機(jī)原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第2頁(yè)
單片機(jī)原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第3頁(yè)
單片機(jī)原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第4頁(yè)
單片機(jī)原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩115頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第三章MCS51指令系統(tǒng)匯編語(yǔ)言是一種面向機(jī)器的語(yǔ)言,是用符號(hào)來表示指令和地址的語(yǔ)言。單片機(jī)的編程,可以使用C語(yǔ)言等高級(jí)語(yǔ)言,也可以使用匯編語(yǔ)言。概述 3.1 尋址方式 大多數(shù)指令執(zhí)行時(shí),都需要使用操作數(shù)。尋址方式就是在指令中說明操作數(shù)所在地址的方法。一般說來,尋址方式越多,單片機(jī)的功能就越強(qiáng),靈活性越大,指令系統(tǒng)也就越復(fù)雜。3.1 尋址方式 3.1.1 尋址方式MCS-5l單片機(jī)有以下7種尋址方式:(1) 立即數(shù)尋址方式立即尋址方式就是操作數(shù)在指令中直接給出。出現(xiàn)在指令中的操作數(shù)即為立即數(shù)。立即數(shù)前面加前綴標(biāo)志“#”。例如指令:MOV A,# 40H所謂尋址,就是尋找操作數(shù)的地址,立即數(shù)尋址

2、實(shí)際上不存在尋址的問題,操作數(shù)就是所提供的數(shù)值,因此所謂立即數(shù)尋址只是一種習(xí)慣說法。3.1 尋址方式 (2) 寄存器尋址寄存器尋址方式就是操作數(shù)在工作寄存器中,因此,指定了寄存器就能得到操作數(shù)。在寄存器尋址方式的指令中,以符號(hào)名稱表示寄存器。例如指令:MOV A, Rn;n=07傳送實(shí)際上是拷貝3.1 尋址方式 寄存器尋址范圍包括: 4組通用工作寄存區(qū)共32個(gè)工作寄存器。但只能針對(duì)當(dāng)前的工作寄存器區(qū)的8個(gè)工作寄存器進(jìn)行操作,因此指令中的寄存器的名稱只能是R0R7。 部分特殊功能寄存器,例如累加器A、寄存器B以及數(shù)據(jù)指針DPTR(DPH、DPL)等。 3.1 尋址方式 (3) 直接尋址方式直接尋

3、址方式中,指令的操作數(shù)直接以單元地址的形式給出。例如,假設(shè)指令執(zhí)行前地址40H數(shù)據(jù)存儲(chǔ)單元的值為12H,指令:MOV A,40H注意與立即數(shù)尋址的區(qū)別3.1 尋址方式 直接尋址方式只能使用8位二進(jìn)制數(shù)表示的地址,所以直接尋址方式的尋址范圍只限于:內(nèi)部RAM的低128個(gè)單元;特殊功能寄存器。寄存器尋址只是直接尋址方式針對(duì)寄存器的特定表示方法,在實(shí)質(zhì)上與直接尋址沒有區(qū)別。 3.1 尋址方式 (4) 寄存器間接尋址方式寄存器中存放的是地址,即操作數(shù)是通過寄存器中的地址間接得到的,因此稱之為寄存器間接尋址,簡(jiǎn)稱為間址尋址。例如:MOV A,R0寄存器間接尋址方式中的寄存器只有R0、R1和DPTR三個(gè)。

4、3.1 尋址方式 寄存器間接尋址范圍為: 訪問內(nèi)部RAM低128個(gè)地址單元,其通用形式為Ri(i=0,1); 對(duì)片外數(shù)據(jù)存儲(chǔ)器的64K字節(jié)的間接尋址,只能使用DPTR作間接尋址寄存器,其形式為DPTR。例如:MOVX A,DPTR3.1 尋址方式 (5) 基址寄存器加變址寄存器間接尋址方式這種尋址方式簡(jiǎn)稱為基址加間接尋址,主要用于查程序存儲(chǔ)器中的數(shù)據(jù)表,只能以寄存器DPTR或PC作基址寄存器,以累加器A作為變址寄存器。并以兩者中的數(shù)值相加形成的16位數(shù)值作為地址尋找操作數(shù),以達(dá)到查表的目的。MOVC A, DPTR+A 3.1 尋址方式 這種尋址方式的指令只有3條:MOVC A,A+DPTRM

5、OVC A,A+PCJMP A+DPTR3.1 尋址方式 (6) 位尋址方式MCS-51單片機(jī)有位處理功能,可以對(duì)數(shù)據(jù)按位進(jìn)行操作,因此就有相應(yīng)的位尋址方式。位尋址指令中可以直接使用位地址,例如:MOV C,40H區(qū)別: MOV A,40H3.1 尋址方式 同樣一個(gè)數(shù)值,在指令中是代表字節(jié)地址還是代表位地址,除了可以由操作數(shù)的類型決定外,也可以由操作碼決定,例如:SETB 40H3.1 尋址方式 位尋址的尋址范圍包括:內(nèi)部RAM中的位尋址區(qū),字節(jié)地址為20H2FH,共16個(gè)字節(jié)單元,128個(gè)位,位地址是00H7FH。對(duì)這128個(gè)位的尋址使用直接地址表示。位尋址區(qū)中的位有兩種表示方法,一種是直接

6、給出位地址;另一種是字節(jié)地址加上位數(shù),例如(20H)6。例如:MOV C, 06HMOV C, (20H).6兩條指令的作用是等效的。3.1 尋址方式 特殊功能寄存器可尋址位,有4種表示方法:特殊功能寄存器符號(hào)加位數(shù)的表示方法。例如PSW寄存器的位5表示為PSW5;直接使用位地址。例如PSW寄存器位5的位地址為0D5H;位名稱的表示方法。例如PSW寄存器位5是F0標(biāo)志位,可使用F0表示該位;字節(jié)地址加位數(shù)的表示方法。例如PSW寄存器位5,因PSW的字節(jié)地址為0D5H,可表示為(0D0H)5。這4種位表示方法相互是等價(jià)的。3.1 尋址方式 (7) 相對(duì)尋址方式相對(duì)尋址方式是為解決程序轉(zhuǎn)移而專門設(shè)

7、置的,為各種轉(zhuǎn)移指令所采用。這種尋址方式以當(dāng)前指令所在程序地址(程序指針PC中的值)為基數(shù),加上給定的地址偏移量,從而得到新的執(zhí)行指令地址(新的PC值)。 例如:JC 50H 3.1 尋址方式 指令當(dāng)中的“50H”就是所謂的地址偏移量,通常用一個(gè)符號(hào)(標(biāo)號(hào))來代替,例如用標(biāo)號(hào)LOOP來代替數(shù)值50H,則指令可以寫成:JC LOOP所謂“相對(duì)尋址方式”,實(shí)際上并不存在“尋找操作數(shù)地址”的問題,地址偏移量本身就是指令的操作數(shù),根據(jù)地址偏移量得到跳轉(zhuǎn)地址是指令自身的功能。從硬件電路的運(yùn)行過程看,新的地址由指令譯碼電路直接獲得,跳轉(zhuǎn)類指令并不存在取操作數(shù)的過程。3.1 尋址方式 3.1.2 尋址方式符

8、號(hào)說明 Rn: R7R0(n=07)Ri: R0和R1(i=0或1): 寄存器間接尋址符 direct: 內(nèi)部數(shù)據(jù)存儲(chǔ)單元的地址(8位,00H0FFH) #data: 8位2進(jìn)制立即數(shù)#data16: 16位2進(jìn)制立即數(shù)addr11: 11位目標(biāo)地址,2KB的程序存儲(chǔ)器地址空間內(nèi) addr16: 16位目標(biāo)地址3.1 尋址方式 rel: 相對(duì)地址,用8位的補(bǔ)碼表示bit: 片內(nèi)RAM或SFR的直接尋址位地址/bit: 將相應(yīng)位求反后參與操作DPTR: 數(shù)據(jù)指針,用作16位的地址寄存器A: 累加器B: 專用寄存器C或CY: PSW中的進(jìn)位標(biāo)志位 (X): 片內(nèi)RAM中的X單元或寄存器X中的內(nèi)容(

9、X): 由X所指向的片內(nèi)RAM存儲(chǔ)單元的內(nèi)容3.2 指令概述單片機(jī)所能執(zhí)行的指令的集合就是其指令系統(tǒng)。MCS51單片機(jī)指令系統(tǒng)是種簡(jiǎn)明易掌握、效率較高的指令系統(tǒng),其一大特點(diǎn)是在硬件結(jié)構(gòu)中有一個(gè)位處理機(jī)(也稱布爾處理機(jī)),對(duì)應(yīng)這個(gè)位處理機(jī),指令系統(tǒng)中相應(yīng)地設(shè)計(jì)了一個(gè)處理位變量的指令子集,這個(gè)子集在開發(fā)需大量處理位變量的程序時(shí)十分有效、方便,非常適合測(cè)量、控制系統(tǒng)的應(yīng)用。指令的表示方法稱為指令格式。一條指令通常由兩部分組成,即操作碼和操作數(shù)。操作碼用來規(guī)定指令進(jìn)行什么操作,而操作數(shù)則是指令操作的對(duì)象。操作數(shù)可能是一個(gè)具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。3.2 指令概述對(duì)于機(jī)器而言,

10、指令實(shí)質(zhì)上就是一些二進(jìn)制數(shù)碼(機(jī)器碼),包括操作碼和操作數(shù)。如果用一個(gè)個(gè)二進(jìn)制數(shù)(機(jī)器碼)來表示指令,則編程、記錄時(shí)都不直觀,因此,匯編語(yǔ)言采用一些與指令功能相關(guān)的英文字母來代表指令操作碼,稱為助記符,用具有特定含義的符號(hào)代表操作數(shù),稱為標(biāo)號(hào)或變量名。3.2 指令概述在匯編語(yǔ)言指令說明中,一般包括以下幾個(gè)內(nèi)容:機(jī)器碼格式指令字長(zhǎng) 指令周期數(shù)指令執(zhí)行的過程 3.2 指令概述3.3 指令功能描述(1) ACALL指令指令格式:ACALL addr11指令描述:短調(diào)用地址為addr11的子程序。實(shí)際編程時(shí)不用這么復(fù)雜計(jì)算,可以用標(biāo)號(hào)代替addr11,例如:ACALL DISP指令執(zhí)行時(shí),將調(diào)用標(biāo)號(hào)(

11、名稱)為DISP的子程序。(2) ADD指令指令格式:ADD A, Rn;(A)+(Rn) A,n=07 ADD A, direct;(A)+(direct) A ADD A, Ri;(A)+(Ri) A,i=0,1 ADD A, #data;(A)+#dataA指令描述:ADD指令稱為加法指令,其功能為:將被尋址數(shù)據(jù)單元的值(或立即數(shù))與累加器A中的值相加,結(jié)果保存到累加器A中。ADD指令的功能也可以簡(jiǎn)單的描述為:將被尋址數(shù)據(jù)單元的值加到累加器A中。 3.3 指令功能描述ADD指令完成兩個(gè)8位二進(jìn)制數(shù)加法運(yùn)算,其中一個(gè)加數(shù)總是來自累加器A,而另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址

12、和立即尋址等不同的尋址方式得到。其相加的結(jié)果總是放在累加器A中。3.3 指令功能描述使用加法指令時(shí),要注意運(yùn)算結(jié)果對(duì)標(biāo)志位的影響: 如果位7有進(jìn)位,則置“1”進(jìn)位標(biāo)志C,否則清“0”C。 如果位3有進(jìn)位,置“1”輔助進(jìn)位標(biāo)志AC,否則清“0”AC。 如果位6、位7沒有同時(shí)進(jìn)位,則溢出標(biāo)志位OV置“1”,否則清“0”O(jiān)V。3.3 指令功能描述3.3 指令功能描述關(guān)于溢出的概念,在數(shù)字電路中已經(jīng)學(xué)習(xí)過,在此說明如下:設(shè)兩個(gè)8位二進(jìn)制數(shù)11111001B(-7)和00001000B(8)相加,結(jié)果為00000001B,加的過程中,最高位(位7)和次高位(位6)同時(shí)發(fā)生了進(jìn)位,此時(shí)結(jié)果是正確的,沒有發(fā)

13、生溢出,加法只影響進(jìn)位位。設(shè)兩個(gè)8位二進(jìn)制數(shù)01111111B(127)和01000000B(64)相加,結(jié)果為10111111B(-63),顯然結(jié)果是錯(cuò)誤的。加的過程中,次高位(位6)發(fā)生了進(jìn)位,而最高位(位7)沒有發(fā)生進(jìn)位,這就是溢出。同樣,如果兩個(gè)絕對(duì)值較大的負(fù)數(shù)相加,結(jié)果也會(huì)變成正數(shù),加的過程中,最高位發(fā)生了進(jìn)位而次高位沒有發(fā)生進(jìn)位。3.3 指令功能描述減法運(yùn)算也有類似的效應(yīng),絕對(duì)值較大的兩個(gè)有符號(hào)數(shù)相減,可能會(huì)發(fā)生溢出,絕對(duì)值較小的兩個(gè)有符號(hào)數(shù)相減,不會(huì)發(fā)生溢出。因此,判斷兩數(shù)之和(之差)是否溢出,就是看加(減)的過程中最高位和次高位是否同時(shí)發(fā)生進(jìn)位(借位),如果同時(shí)發(fā)生進(jìn)位(借位)

14、或都不發(fā)生進(jìn)位(借位),則沒有溢出,否則就是溢出。3.3 指令功能描述避免加法溢出現(xiàn)象的最簡(jiǎn)單方法是減少有效數(shù)位數(shù),保留兩位符號(hào)位。比如兩個(gè)00111111B(前兩位為符號(hào)位)相加,結(jié)果仍為正數(shù)。因此,在編程時(shí),應(yīng)注意加數(shù)(減數(shù))的絕對(duì)值不能過大。從數(shù)字電路的角度來說,只有加、減法運(yùn)算才會(huì)發(fā)生溢出。MCS-51硬件電路中,乘、除法運(yùn)算也會(huì)影響溢出標(biāo)志位OV,具體影響情況將在相應(yīng)的指令描述中說明。3.3 指令功能描述(3) ADDC指令指令格式: ADDC A,Rn;(A)+(Rn)+C A, ADDC A,direct;(A)+(direct)+C A ADDC A,Ri;(A)+(Ri)+C

15、 A ADDC A,#data;(A)+#data+CA指令描述:ADDC稱為帶進(jìn)位加法指令,其進(jìn)行加法運(yùn)算的特點(diǎn)是進(jìn)位標(biāo)志位C參與運(yùn)算,因此帶進(jìn)位加法運(yùn)算是三個(gè)數(shù)相加。3.3 指令功能描述(4) AJMP指令指令格式:AJMP addrl1指令描述:AJMP稱為無條件近跳轉(zhuǎn)(轉(zhuǎn)移)指令,指令執(zhí)行后,將跳轉(zhuǎn)到由addrl1設(shè)定的程序地址處執(zhí)行。3.3 指令功能描述例如:LOOP1:AJMPLOOP1AJMPLOOP2LOOP2:3.3 指令功能描述(5) ANL指令指令格式:ANL A,Rn ANL A,direct ANL A,#data ANL A,Ri ANL direct,A ANL

16、direct,#data ANL C,bit3.3 指令功能描述指令描述:ANL稱為邏輯與指令,可以以字節(jié)為單位進(jìn)行邏輯與運(yùn)算,也可以以位為單位進(jìn)行邏輯與運(yùn)算。以字節(jié)為單位進(jìn)行邏輯與運(yùn)算以字節(jié)為單位進(jìn)行邏輯與運(yùn)算時(shí),基本功能是將源操作數(shù)與目標(biāo)操作數(shù)按位進(jìn)行邏輯與運(yùn)算,結(jié)果放到目標(biāo)操作數(shù)存儲(chǔ)單元中。3.3 指令功能描述以位為單位進(jìn)行邏輯與運(yùn)算指令格式中最后一條是以位為單位進(jìn)行邏輯與運(yùn)算,其功能是將進(jìn)位標(biāo)志位C(位“累加器”)的值與直接尋址位的值進(jìn)行邏輯與運(yùn)算,結(jié)果存放到進(jìn)位標(biāo)志位C中。例如,指令:ANLC,50H3.3 指令功能描述(6) CJNE指令指令格式: CJNE A,direct,re

17、l CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel3.3 指令功能描述指令描述:CJNE稱為比較不相等轉(zhuǎn)移指令,當(dāng)源尋址單元的值與目標(biāo)存儲(chǔ)單元的值(或立即數(shù))不相等時(shí),程序跳轉(zhuǎn)到rel設(shè)定的地址處執(zhí)行,否則,程序順序執(zhí)行。CJNE指令的功能是比較前面兩個(gè)操作數(shù)的大小,如果兩者的值不相等則轉(zhuǎn)移,把程序指針PC的值增量為下一條指令的起始地址后,再把指令最后一個(gè)字節(jié)的有符號(hào)的相對(duì)偏移量加到PC上,并計(jì)算出轉(zhuǎn)向的目標(biāo)地址。3.3 指令功能描述CJNE A,50H,NEXT1AJMPNEXT2NEXT1:LJMPNEXTNEXT2:3.3 指令功

18、能描述(7) CLR指令指令格式:CLR A CLR C CLR bit指令描述:CLR稱為清零指令,可以以字節(jié)為單位將累加器A中的值清0,也可以以位為單位,將進(jìn)位位C或位地址為bit的位清0。 3.3 指令功能描述(8) CPL指令 指令格式:CPL A CPL CCPL bit指令描述:CPL稱為取反指令。 3.3 指令功能描述(9) DA指令指令格式:DA A 指令描述:DA稱為十進(jìn)制調(diào)整指令,用于對(duì)累加器A中的BCD碼十進(jìn)制數(shù)加法運(yùn)算結(jié)果的修正。 3.3 指令功能描述(10) DEC指令指令格式:DEC A DEC RnDEC directDEC Ri 指令描述:DEC指令稱為減1指令

19、 3.3 指令功能描述(11) DIV指令指令格式:DIV AB指令描述:DIV指令稱為除法指令,其功能是把累加器A中8位無符號(hào)整數(shù)(被除數(shù))除以B中的8位無符號(hào)整數(shù)(除數(shù)),所得的商(為整數(shù))存放在累加器A中,余數(shù)在寄存器B中,并將C和溢出標(biāo)志位OV清“0”。如果執(zhí)行指令前B的內(nèi)容為“0”(即除數(shù)為“0”),則存放結(jié)果的A、B中的內(nèi)容不定,并置“1”溢出標(biāo)志位OV。 3.3 指令功能描述(12) DJNZ指令 指令格式: DJNZ Rn,rel DJNZ direct,rel指令描述:DJNZ指令稱為減1非0跳轉(zhuǎn)指令,或者稱為循環(huán)指令 3.3 指令功能描述 MOVR7,#5LOOP:DJNZ

20、R7,LOOP3.3 指令功能描述(13) INC指令指令格式:INC A INC Rn INC direct INC Ri INC DPTR指令描述:INC指令稱為增1指令 3.3 指令功能描述(14) JB指令指令格式:JB bit,rel 指令描述:如果位地址bit為1,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;如果bit位為0則程序順序執(zhí)行。3.3 指令功能描述 JB60H,NEXT NEXT:3.3 指令功能描述(15) JBC指令指令格式:JBC bit,rel 指令描述:如果位地址bit的值為1則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行,同時(shí)將被測(cè)試位清0;如果bit位的值為0則程序順序執(zhí)行。

21、JBC指令和JB指令的區(qū)別在于,JBC指令在跳轉(zhuǎn)的時(shí)候會(huì)將被測(cè)試位清0,而JB指令不將被測(cè)試位清0。3.3 指令功能描述(16) JC指令指令格式:JC rel 指令描述:如果進(jìn)位位C為1,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;如果C為0則程序順序執(zhí)行。JC指令和JB指令的區(qū)別在于,JB指令測(cè)試的是直接地址位,而JC指令測(cè)試的是進(jìn)位位C。3.3 指令功能描述(17) JMP指令指令格式: JMP A+DPTR指令描述:JMP指令稱為分支跳轉(zhuǎn)指令,跳轉(zhuǎn)的目標(biāo)地址由累加器A中8位無符號(hào)數(shù)與DPTR中的16位無符號(hào)數(shù)之和來確定。3.3 指令功能描述JMP指令的實(shí)用形式如下: MOVB,#3MULABM

22、OVDPTR,#BRANCHJMPA+DPTRBRANCH:LJMPCON0LJMPCON1LJMPCON23.3 指令功能描述(18) JNB指令指令格式:JNB bit,rel 指令描述:如果直接尋址位bit為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNB指令和JB指令的區(qū)別在于,JB指令測(cè)試直接地址位bit是否為1,JNB指令測(cè)試直接地址位bit是否為0。3.3 指令功能描述(19) JNC指令指令格式:JNC rel 指令描述:如果進(jìn)位位C不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNC指令和JB指令的區(qū)別在于,JB指令測(cè)試直接地址位bit是否為1

23、,JNC指令測(cè)試進(jìn)位位C的值是否為0。3.3 指令功能描述(20) JNZ指令指令格式:JNZ rel 指令描述:如果累加器A中的值不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNZ指令和JB指令的區(qū)別在于,JB指令測(cè)試的是直接地址位bit是否為1,JNZ指令測(cè)試的是累加器A中的值(8位)是否不為0。3.3 指令功能描述(21) JZ指令指令格式:JZ rel指令描述:如果累加器A中的值為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JZ指令和JB指令的區(qū)別在于,JB指令測(cè)試的是直接地址位bit是否為1,JZ指令測(cè)試的是累加器A中的值(8位)是否為0。3.3 指令

24、功能描述(22) LCALL指令指令格式: LCALL addrl6指令描述:LCALL稱為長(zhǎng)調(diào)用指令,可以調(diào)用64K字節(jié)范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程序。3.3 指令功能描述(23) LJMP指令指令格式:LJMP addr16指令描述:LJMP稱為長(zhǎng)跳轉(zhuǎn)指令,可以跳轉(zhuǎn)到64K字節(jié)范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)地址處執(zhí)行。3.3 指令功能描述(24) MOV指令指令格式: MOV 目標(biāo)操作數(shù),源操作數(shù)指令描述:MOV稱為一般數(shù)據(jù)傳送指令,是使用最頻繁,指令格式最多的一條指令。上面給出的指令格式,是MOV指令的通用格式,其具體格式根據(jù)目標(biāo)操作數(shù)不同而有多種類型。以下針對(duì)不同目標(biāo)操作數(shù),分類說明

25、MOV指令的具體格式和功能。 3.3 指令功能描述以累加器為目的操作數(shù)格式: MOV A,Rn MOV A,Ri MOV A,direct MOV A,#data 3.3 指令功能描述以Rn為目的操作數(shù)格式: MOV Rn,A MOV Rn,direct MOV Rn,#data 3.3 指令功能描述以直接地址為目的操作數(shù)格式: MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 3.3 指令功能描述以寄存器間接地址為目的操作數(shù)格式: MOV Ri,A MOV Ri,direct MOV R

26、i,#data 3.3 指令功能描述 16位數(shù)傳送指令格式: MOV DPTR,#data16 功能:把16位立即數(shù)傳送到數(shù)據(jù)地址指針DPTR中。這是整個(gè)指令系統(tǒng)中唯一的一條16位數(shù)據(jù)的傳送指令,用來設(shè)置地址指針DPTR的值。地址指針DPTR由DPH和DPL組成。這條指令執(zhí)行的結(jié)果把立即數(shù)的高8位送入DPH,立即數(shù)的低8位送入DPL。 3.3 指令功能描述數(shù)據(jù)位傳送指令格式: MOV C,bit MOV bit,C功能:指令格式第一行,把直接地址為bit的位中的值傳送到進(jìn)位位C中,第二行把進(jìn)位位C中的值傳送到直接地址為bit的位中。位傳送指令中,一個(gè)操作數(shù)必須為進(jìn)位位C,另個(gè)可以是任何直接尋址

27、位。 3.3 指令功能描述(25) MOVC指令指令格式:MOVC A,A+PCMOVC A,A+ DPTR指令描述:MOVC稱為查表指令 3.3 指令功能描述以PC作基址寄存器 INCAINCAMOVCA,A+PCAJMPCONTINUTABLE:DB00H,01H,02H,CONTINU:3.3 指令功能描述以DPTR為基址寄存器 MOVDPTR,#TABLE MOVC A,A+DPTR3.3 指令功能描述(26) MOVX指令指令格式: MOVX A,DPTR MOVX A,Ri MOVX DPTR,A MOVX Ri,A 指令描述:MOVX指令用于累加器A與外部數(shù)據(jù)存儲(chǔ)器之間數(shù)據(jù)傳送。

28、 3.3 指令功能描述(27) MUL指令指令格式:MUL AB指令描述:MUL指令稱為乘法指令,其功能是把累加器A和寄存器B中的無符號(hào)8位整數(shù)相乘,其16位積的低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255,則置“1”溢出標(biāo)志位OV,否則清“0”O(jiān)V。MUL指令執(zhí)行后,進(jìn)位標(biāo)志位C總是被清“0”。3.3 指令功能描述(28) NOP指令指令格式:NOP指令描述:NOP指令稱為空操作指令,NOP指令不進(jìn)行任何實(shí)際操作,只消耗一個(gè)機(jī)器周期的時(shí)間,常用于程序中的等待或時(shí)間的延遲。3.3 指令功能描述(29) ORL指令指令格式: ORL A,Rn ORL A,direct ORL A,#d

29、ata ORL A,Ri ORL direct,A ORL direct,#data ORL C,bit指令描述:ORL稱為邏輯或指令,能以字節(jié)為單位進(jìn)行邏輯或運(yùn)算,也能以位為單位進(jìn)行運(yùn)算。3.3 指令功能描述(30) POP指令指令格式:POP direct指令描述:POP稱為出棧指令,功能是將堆棧指針SP指示的內(nèi)部RAM單元的數(shù)值送入直接地址字節(jié)單元中,堆棧指針SP減1。 3.3 指令功能描述(31) PUSH指令指令格式:PUSH direct指令描述:PUSH稱為壓棧指令,功能是首先將棧指針SP加1,然后把直接地址單元的數(shù)值壓入棧指針SP指示的內(nèi)部RAM單元中。 3.3 指令功能描述(

30、32) RET指令指令格式:RET指令描述:RET稱為子程序返回指令,功能是從堆棧中退出PC的高位和低位,同時(shí)把堆棧指針SP減2。3.3 指令功能描述(33) RETI指令指令格式:RETI指令描述:RETI稱為中斷返回指令,功能是從堆棧中退出PC的高位和低位,把堆棧指針SP減2,同時(shí)清0相應(yīng)的中斷請(qǐng)求標(biāo)志位。3.3 指令功能描述(34) RL指令指令格式:RL A指令描述:RL指令將累加器A的8位值向左循環(huán)移一位 3.3 指令功能描述(35) RLC指令指令格式:RLC A指令描述:RLC指令將累加器A的8位值和進(jìn)位標(biāo)志位C一起向左循環(huán)移一位,C移入累加器最低位ACC.0,累加器最高位ACC

31、.7移入進(jìn)位位C 3.3 指令功能描述(36) RR指令指令格式:RR A指令描述:RR指令將累加器A的8位值向右循環(huán)移一位 3.3 指令功能描述(37) RRC指令指令格式:RRC A指令描述:RRC指令將累加器A的8位值和進(jìn)位標(biāo)志位C一起向右循環(huán)移一位 3.3 指令功能描述(38) SETB指令指令格式:SETB C SETB bit 指令描述:SETB指令將進(jìn)位位C或直接位地址為bit的位中的值置為1,SETB指令中的直接地址值只能是位地址 3.3 指令功能描述(39) SJMP指令指令格式:SJMP rel指令描述:由于SJMP指令的字長(zhǎng)、執(zhí)行時(shí)間與AJMP指令完全相同,但是跳轉(zhuǎn)范圍遠(yuǎn)

32、小于AJMP指令,因而沒有任何實(shí)用價(jià)值。 3.3 指令功能描述(40) SUBB指令指令格式:SUBB A,Rn SUBB A,direct SUBB A,Ri SUBB A,#data指令描述:帶借位的減法指令,其進(jìn)行減法運(yùn)算的特點(diǎn)是進(jìn)位標(biāo)志位C參與運(yùn)算,因此帶借位減法運(yùn)算是三個(gè)數(shù)相減。3.3 指令功能描述(41) SWAP指令指令格式:SWAP A指令描述:SWAP稱為累加器半字節(jié)交換指令,其功能是將累加器A的高半字節(jié)和低半字節(jié)的值互換。3.3 指令功能描述(42) XCH指令指令格式:XCH A,Rn XCH A,direct XCH A,Ri 指令描述:XCH稱為字節(jié)交換指令,其功能是

33、將累加器A中的值和被尋址內(nèi)部數(shù)據(jù)存儲(chǔ)單元的值相互交換。 3.3 指令功能描述(43) XCHD指令指令格式:XCHD A,Ri指令描述:XCHD稱為半字節(jié)交換指令,其功能是將累加器的低4位與間接尋址內(nèi)部RAM單元的低4位交換。3.3 指令功能描述(44) XRL指令指令格式: XRL A,Rn XRL A,direct XRL A,#data XRL A,Ri XRL direct,A XRL direct,#data指令描述:XRL稱為邏輯異或指令,XRL指令只能以字節(jié)為單位進(jìn)行邏輯異或運(yùn)算。3.3 指令功能描述3.4 匯編語(yǔ)言程序開發(fā)的過程軟件一般是以硬件為基礎(chǔ)工作的,軟件的設(shè)計(jì)要結(jié)合硬件

34、來進(jìn)行。根據(jù)系統(tǒng)硬件的功能和性能指標(biāo),首先設(shè)計(jì)出軟件功能,然后對(duì)一個(gè)個(gè)功能模塊進(jìn)行編程實(shí)現(xiàn)。1)編譯的基本概念如前所述,最終的程序,就是儲(chǔ)存在存儲(chǔ)器中的高、低電平物理信號(hào),即二進(jìn)制數(shù)值。MCS-51的程序存儲(chǔ)器是以字節(jié)(8位)為單位的,因此在單片機(jī)的程序存儲(chǔ)器中存放的是一個(gè)個(gè)8位的二進(jìn)制數(shù)字。例1:01110101 01110000 000100013.4 匯編語(yǔ)言程序開發(fā)的過程程序可以用這樣的二進(jìn)制數(shù)來編寫,然后采用特定的方法將這些二進(jìn)制數(shù)燒寫到EEPROM、FLASH等程序存儲(chǔ)器中。這種二進(jìn)制數(shù)表示的指令,稱為機(jī)器碼。 3.4 匯編語(yǔ)言程序開發(fā)的過程機(jī)器碼指令一般由操作碼和操作數(shù)兩部分構(gòu)成

35、,有些指令只有操作碼,沒有操作數(shù),有些指令有兩個(gè)操作數(shù)。例1的三個(gè)數(shù)值可以分為兩個(gè)部分:機(jī)器碼指令: 01110101 01110000 00010001(操作碼) (操作數(shù))3.4 匯編語(yǔ)言程序開發(fā)的過程但是利用這樣的二進(jìn)制數(shù)表示程序,畢竟不直觀,書寫、分析起來都很困難,于是將操作碼用具有一定含義的助記符來代替,操作數(shù)用十進(jìn)制或十六進(jìn)制數(shù)來代替。例2中的機(jī)器碼指令可以用下面的程序語(yǔ)句來代替:程序語(yǔ)句:MOV70H,#11H(操作碼助記符)(操作數(shù))3.4 匯編語(yǔ)言程序開發(fā)的過程其中操作數(shù)如果用十六進(jìn)制數(shù)表示,則后面帶后綴“H”,如果不帶后綴,則默認(rèn)為十進(jìn)制數(shù)。例3中的兩個(gè)數(shù)值還是有些不直觀,

36、可以用兩個(gè)具有一定含義的符號(hào)來代替,即替兩個(gè)數(shù)值取個(gè)名字。例4令:COUNTER=70HSTAGE=11H3.4 匯編語(yǔ)言程序開發(fā)的過程則例3的程序語(yǔ)句可以寫為:程序語(yǔ)句: MOV COUNTER,#STAGE形如例3、例5所示的指令,稱為匯編語(yǔ)言指令,由匯編語(yǔ)言指令構(gòu)成的程序,稱為匯編語(yǔ)言程序。例4中的COUNTER、STAGE也稱為符號(hào)、標(biāo)號(hào)或變量名。 3.4 匯編語(yǔ)言程序開發(fā)的過程在PC機(jī)(個(gè)人計(jì)算機(jī))還不普及的時(shí)候,開發(fā)人員一般先在紙上利用匯編語(yǔ)言指令編寫程序,并進(jìn)行仔細(xì)推敲、修改,再人工翻譯成機(jī)器碼。因?yàn)橐跈C(jī)器碼和匯編語(yǔ)言之間反復(fù)相互翻譯,所以開發(fā)編程人員都很熟悉機(jī)器碼指令,有些簡(jiǎn)

37、單的程序甚至直接用機(jī)器碼指令編寫。3.4 匯編語(yǔ)言程序開發(fā)的過程將匯編語(yǔ)言程序翻譯成機(jī)器碼程序,是一個(gè)繁雜的過程,不僅要對(duì)指令的機(jī)器碼比較熟悉,還要熟悉每條指令的機(jī)器碼長(zhǎng)度,并要經(jīng)常對(duì)程序的長(zhǎng)度進(jìn)行精確計(jì)算。有些指令對(duì)于匯編語(yǔ)言來說是確定的,對(duì)于機(jī)器碼指令來說,是變化的。例如:1000HJCNEXT1020HNEXT:NOP第一行指令機(jī)器碼為:4020H3.4 匯編語(yǔ)言程序開發(fā)的過程因此,修改匯編程序是容易的,但是要修改機(jī)器碼程序,添加或刪除指令,則所有的跳轉(zhuǎn)類指令,都要重新計(jì)算跳轉(zhuǎn)長(zhǎng)度,從而修改有關(guān)的指令機(jī)器碼。這就是許多MCS-51的資料中,在介紹跳轉(zhuǎn)類指令時(shí),都要介紹比較繁雜的地址計(jì)算方

38、法的原因。3.4 匯編語(yǔ)言程序開發(fā)的過程隨著PC機(jī)的普及應(yīng)用,一般在PC機(jī)上以文本文檔的格式編寫匯編語(yǔ)言程序,這種文本文檔稱為匯編語(yǔ)言源程序或源代碼,文件擴(kuò)展名為.asm。用助記符、標(biāo)號(hào)和變量名代表指令機(jī)器碼的匯編語(yǔ)言源程序,必須經(jīng)過PC機(jī)上的編譯軟件翻譯成機(jī)器碼文件,才能通過專門的硬件編程器燒寫到程序存儲(chǔ)器中執(zhí)行。對(duì)于現(xiàn)在的應(yīng)用程序開發(fā)人員來說,沒有必要熟悉指令的機(jī)器碼,通常也沒有必要了解指令的機(jī)器碼長(zhǎng)度和計(jì)算跳轉(zhuǎn)的目標(biāo)地址,這些翻譯、計(jì)算工作,都由PC機(jī)上的專門編譯軟件來完成。3.4 匯編語(yǔ)言程序開發(fā)的過程將匯編語(yǔ)言源程序文件翻譯成機(jī)器碼文件的過程稱為匯編或編譯,完成編譯功能的PC機(jī)軟件稱

39、為編譯器或匯編器(Assembler)。編譯形成的機(jī)器碼文件,稱為目標(biāo)文件,擴(kuò)展名一般為.obj。將機(jī)器碼程序翻譯成匯編語(yǔ)言程序的過程稱為反匯編。3.4 匯編語(yǔ)言程序開發(fā)的過程令:COUNTER=70HSTAGE=11H也可以寫成指令的形式,如:COUNTEREQU70HSTAGE EQU11H這兩行語(yǔ)句,在形式上與匯編語(yǔ)言指令是相同的,但是并不能夠翻譯成機(jī)器碼指令,只是告訴翻譯人員或編譯軟件,翻譯時(shí)遇到“COUNTER”就換成數(shù)值“70H”,遇到“STAGE”就換成“11”。類似這種不能翻譯成機(jī)器碼的指令,稱為偽指令。3.4 匯編語(yǔ)言程序開發(fā)的過程指令是與機(jī)器硬件對(duì)應(yīng)的,不同的機(jī)器硬件具有不

40、同的指令集;偽指令是與編譯軟件對(duì)應(yīng)的,不同的編譯軟件支持不同的偽指令集。3.4 匯編語(yǔ)言程序開發(fā)的過程用C語(yǔ)言等高級(jí)語(yǔ)言編寫的源程序,還要先翻譯成匯編語(yǔ)言源程序,再編譯成機(jī)器碼目標(biāo)文件。相對(duì)來說,匯編語(yǔ)言、機(jī)器碼語(yǔ)言屬于低級(jí)語(yǔ)言,高級(jí)語(yǔ)言必須翻譯成低級(jí)語(yǔ)言,才能被機(jī)器硬件接受。將C語(yǔ)言源程序翻譯成匯編語(yǔ)言源程序的PC機(jī)軟件,稱為C編譯器。每一行高級(jí)語(yǔ)言語(yǔ)句,實(shí)際上可能對(duì)應(yīng)若干條匯編語(yǔ)言指令,并且因編譯軟件(翻譯人員)不同而存在差異。而將匯編語(yǔ)言翻譯成機(jī)器碼,則不管誰來翻譯,結(jié)果都是一樣的。 3.4 匯編語(yǔ)言程序開發(fā)的過程2)用戶程序開發(fā)的過程 匯編語(yǔ)言源程序文件,以擴(kuò)展名.asm表示。匯編語(yǔ)言

41、程序可以編寫在一個(gè)源程序文件中,也可以編寫在兩個(gè)或多個(gè)源文件中;可以由一個(gè)人編寫,也可以由不同的人分開來寫。不同的文件中保存的可以分別是匯編代碼或C代碼,以便于程序的模塊化設(shè)計(jì)。只要編譯軟件支持,同一個(gè)源程序文件中,可以一段匯編指令、一段C語(yǔ)言函數(shù)交替編寫。3.4 匯編語(yǔ)言程序開發(fā)的過程某些常用功能的程序內(nèi)容,比如各種計(jì)算類程序,可以先編寫好多個(gè)通用源文件,然后用PC機(jī)上專門的軟件將這些通用源文件組合成一個(gè)源文件庫(kù)。實(shí)現(xiàn)這種組合功能的PC機(jī)軟件稱為存檔器(Archiver)。也可以將各個(gè)通用源文件分別編譯,形成各自的目標(biāo)文件,再建立一個(gè)目標(biāo)文件庫(kù)。3.4 匯編語(yǔ)言程序開發(fā)的過程編譯器將各個(gè)源文

42、件、源文件庫(kù)編譯成相應(yīng)的目標(biāo)文件,目標(biāo)文件一般用擴(kuò)展名.obj表示。這些目標(biāo)文件還要按一定的方式進(jìn)一步組合起來,才能燒寫到程序存儲(chǔ)器中在機(jī)器上執(zhí)行。將不同的目標(biāo)文件、目標(biāo)文件庫(kù)中的內(nèi)容組合到一起的過程,稱為程序的鏈接(也稱為連接)。完成鏈接功能的PC機(jī)軟件,稱為鏈接器(Linker)。鏈接生成的目標(biāo)文件,稱為可執(zhí)行目標(biāo)文件,一般用擴(kuò)展名.hex表示。即使只有一個(gè)源文件,也必須進(jìn)行鏈接,以把目標(biāo)文件變成可執(zhí)行的目標(biāo)文件。3.4 匯編語(yǔ)言程序開發(fā)的過程庫(kù)文件、多個(gè)文件組合成一個(gè)文件,一般都是針對(duì)C語(yǔ)言源程序的。對(duì)于匯編語(yǔ)言源文件來說,一般沒有必要弄出多個(gè)源文件來。早期的編譯軟件也有將匯編源文件直接生成可執(zhí)行的.hex十六進(jìn)制目標(biāo)文件,或者直接生成可執(zhí)行的.bin二進(jìn)制目標(biāo)文件,而不必經(jīng)過鏈接的過程。3.4 匯編語(yǔ)言程序開發(fā)的過程為了便于編程者閱讀和分析程序,鏈接器在生成目標(biāo)文件的同時(shí),還能產(chǎn)生一個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論