![單片機原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第1頁](http://file4.renrendoc.com/view/4a61fa228318ed9e0845526daae25d69/4a61fa228318ed9e0845526daae25d691.gif)
![單片機原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第2頁](http://file4.renrendoc.com/view/4a61fa228318ed9e0845526daae25d69/4a61fa228318ed9e0845526daae25d692.gif)
![單片機原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第3頁](http://file4.renrendoc.com/view/4a61fa228318ed9e0845526daae25d69/4a61fa228318ed9e0845526daae25d693.gif)
![單片機原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第4頁](http://file4.renrendoc.com/view/4a61fa228318ed9e0845526daae25d69/4a61fa228318ed9e0845526daae25d694.gif)
![單片機原理及應(yīng)用 第三章 MCS51指令系統(tǒng)_第5頁](http://file4.renrendoc.com/view/4a61fa228318ed9e0845526daae25d69/4a61fa228318ed9e0845526daae25d695.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章MCS51指令系統(tǒng)匯編語言是一種面向機器的語言,是用符號來表示指令和地址的語言。單片機的編程,可以使用C語言等高級語言,也可以使用匯編語言。概述 3.1 尋址方式 大多數(shù)指令執(zhí)行時,都需要使用操作數(shù)。尋址方式就是在指令中說明操作數(shù)所在地址的方法。一般說來,尋址方式越多,單片機的功能就越強,靈活性越大,指令系統(tǒng)也就越復雜。3.1 尋址方式 3.1.1 尋址方式MCS-5l單片機有以下7種尋址方式:(1) 立即數(shù)尋址方式立即尋址方式就是操作數(shù)在指令中直接給出。出現(xiàn)在指令中的操作數(shù)即為立即數(shù)。立即數(shù)前面加前綴標志“#”。例如指令:MOV A,# 40H所謂尋址,就是尋找操作數(shù)的地址,立即數(shù)尋址
2、實際上不存在尋址的問題,操作數(shù)就是所提供的數(shù)值,因此所謂立即數(shù)尋址只是一種習慣說法。3.1 尋址方式 (2) 寄存器尋址寄存器尋址方式就是操作數(shù)在工作寄存器中,因此,指定了寄存器就能得到操作數(shù)。在寄存器尋址方式的指令中,以符號名稱表示寄存器。例如指令:MOV A, Rn;n=07傳送實際上是拷貝3.1 尋址方式 寄存器尋址范圍包括: 4組通用工作寄存區(qū)共32個工作寄存器。但只能針對當前的工作寄存器區(qū)的8個工作寄存器進行操作,因此指令中的寄存器的名稱只能是R0R7。 部分特殊功能寄存器,例如累加器A、寄存器B以及數(shù)據(jù)指針DPTR(DPH、DPL)等。 3.1 尋址方式 (3) 直接尋址方式直接尋
3、址方式中,指令的操作數(shù)直接以單元地址的形式給出。例如,假設(shè)指令執(zhí)行前地址40H數(shù)據(jù)存儲單元的值為12H,指令:MOV A,40H注意與立即數(shù)尋址的區(qū)別3.1 尋址方式 直接尋址方式只能使用8位二進制數(shù)表示的地址,所以直接尋址方式的尋址范圍只限于:內(nèi)部RAM的低128個單元;特殊功能寄存器。寄存器尋址只是直接尋址方式針對寄存器的特定表示方法,在實質(zhì)上與直接尋址沒有區(qū)別。 3.1 尋址方式 (4) 寄存器間接尋址方式寄存器中存放的是地址,即操作數(shù)是通過寄存器中的地址間接得到的,因此稱之為寄存器間接尋址,簡稱為間址尋址。例如:MOV A,R0寄存器間接尋址方式中的寄存器只有R0、R1和DPTR三個。
4、3.1 尋址方式 寄存器間接尋址范圍為: 訪問內(nèi)部RAM低128個地址單元,其通用形式為Ri(i=0,1); 對片外數(shù)據(jù)存儲器的64K字節(jié)的間接尋址,只能使用DPTR作間接尋址寄存器,其形式為DPTR。例如:MOVX A,DPTR3.1 尋址方式 (5) 基址寄存器加變址寄存器間接尋址方式這種尋址方式簡稱為基址加間接尋址,主要用于查程序存儲器中的數(shù)據(jù)表,只能以寄存器DPTR或PC作基址寄存器,以累加器A作為變址寄存器。并以兩者中的數(shù)值相加形成的16位數(shù)值作為地址尋找操作數(shù),以達到查表的目的。MOVC A, DPTR+A 3.1 尋址方式 這種尋址方式的指令只有3條:MOVC A,A+DPTRM
5、OVC A,A+PCJMP A+DPTR3.1 尋址方式 (6) 位尋址方式MCS-51單片機有位處理功能,可以對數(shù)據(jù)按位進行操作,因此就有相應(yīng)的位尋址方式。位尋址指令中可以直接使用位地址,例如:MOV C,40H區(qū)別: MOV A,40H3.1 尋址方式 同樣一個數(shù)值,在指令中是代表字節(jié)地址還是代表位地址,除了可以由操作數(shù)的類型決定外,也可以由操作碼決定,例如:SETB 40H3.1 尋址方式 位尋址的尋址范圍包括:內(nèi)部RAM中的位尋址區(qū),字節(jié)地址為20H2FH,共16個字節(jié)單元,128個位,位地址是00H7FH。對這128個位的尋址使用直接地址表示。位尋址區(qū)中的位有兩種表示方法,一種是直接
6、給出位地址;另一種是字節(jié)地址加上位數(shù),例如(20H)6。例如:MOV C, 06HMOV C, (20H).6兩條指令的作用是等效的。3.1 尋址方式 特殊功能寄存器可尋址位,有4種表示方法:特殊功能寄存器符號加位數(shù)的表示方法。例如PSW寄存器的位5表示為PSW5;直接使用位地址。例如PSW寄存器位5的位地址為0D5H;位名稱的表示方法。例如PSW寄存器位5是F0標志位,可使用F0表示該位;字節(jié)地址加位數(shù)的表示方法。例如PSW寄存器位5,因PSW的字節(jié)地址為0D5H,可表示為(0D0H)5。這4種位表示方法相互是等價的。3.1 尋址方式 (7) 相對尋址方式相對尋址方式是為解決程序轉(zhuǎn)移而專門設(shè)
7、置的,為各種轉(zhuǎn)移指令所采用。這種尋址方式以當前指令所在程序地址(程序指針PC中的值)為基數(shù),加上給定的地址偏移量,從而得到新的執(zhí)行指令地址(新的PC值)。 例如:JC 50H 3.1 尋址方式 指令當中的“50H”就是所謂的地址偏移量,通常用一個符號(標號)來代替,例如用標號LOOP來代替數(shù)值50H,則指令可以寫成:JC LOOP所謂“相對尋址方式”,實際上并不存在“尋找操作數(shù)地址”的問題,地址偏移量本身就是指令的操作數(shù),根據(jù)地址偏移量得到跳轉(zhuǎn)地址是指令自身的功能。從硬件電路的運行過程看,新的地址由指令譯碼電路直接獲得,跳轉(zhuǎn)類指令并不存在取操作數(shù)的過程。3.1 尋址方式 3.1.2 尋址方式符
8、號說明 Rn: R7R0(n=07)Ri: R0和R1(i=0或1): 寄存器間接尋址符 direct: 內(nèi)部數(shù)據(jù)存儲單元的地址(8位,00H0FFH) #data: 8位2進制立即數(shù)#data16: 16位2進制立即數(shù)addr11: 11位目標地址,2KB的程序存儲器地址空間內(nèi) addr16: 16位目標地址3.1 尋址方式 rel: 相對地址,用8位的補碼表示bit: 片內(nèi)RAM或SFR的直接尋址位地址/bit: 將相應(yīng)位求反后參與操作DPTR: 數(shù)據(jù)指針,用作16位的地址寄存器A: 累加器B: 專用寄存器C或CY: PSW中的進位標志位 (X): 片內(nèi)RAM中的X單元或寄存器X中的內(nèi)容(
9、X): 由X所指向的片內(nèi)RAM存儲單元的內(nèi)容3.2 指令概述單片機所能執(zhí)行的指令的集合就是其指令系統(tǒng)。MCS51單片機指令系統(tǒng)是種簡明易掌握、效率較高的指令系統(tǒng),其一大特點是在硬件結(jié)構(gòu)中有一個位處理機(也稱布爾處理機),對應(yīng)這個位處理機,指令系統(tǒng)中相應(yīng)地設(shè)計了一個處理位變量的指令子集,這個子集在開發(fā)需大量處理位變量的程序時十分有效、方便,非常適合測量、控制系統(tǒng)的應(yīng)用。指令的表示方法稱為指令格式。一條指令通常由兩部分組成,即操作碼和操作數(shù)。操作碼用來規(guī)定指令進行什么操作,而操作數(shù)則是指令操作的對象。操作數(shù)可能是一個具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號。3.2 指令概述對于機器而言,
10、指令實質(zhì)上就是一些二進制數(shù)碼(機器碼),包括操作碼和操作數(shù)。如果用一個個二進制數(shù)(機器碼)來表示指令,則編程、記錄時都不直觀,因此,匯編語言采用一些與指令功能相關(guān)的英文字母來代表指令操作碼,稱為助記符,用具有特定含義的符號代表操作數(shù),稱為標號或變量名。3.2 指令概述在匯編語言指令說明中,一般包括以下幾個內(nèi)容:機器碼格式指令字長 指令周期數(shù)指令執(zhí)行的過程 3.2 指令概述3.3 指令功能描述(1) ACALL指令指令格式:ACALL addr11指令描述:短調(diào)用地址為addr11的子程序。實際編程時不用這么復雜計算,可以用標號代替addr11,例如:ACALL DISP指令執(zhí)行時,將調(dià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指令的功能也可以簡單的描述為:將被尋址數(shù)據(jù)單元的值加到累加器A中。 3.3 指令功能描述ADD指令完成兩個8位二進制數(shù)加法運算,其中一個加數(shù)總是來自累加器A,而另一個加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址
12、和立即尋址等不同的尋址方式得到。其相加的結(jié)果總是放在累加器A中。3.3 指令功能描述使用加法指令時,要注意運算結(jié)果對標志位的影響: 如果位7有進位,則置“1”進位標志C,否則清“0”C。 如果位3有進位,置“1”輔助進位標志AC,否則清“0”AC。 如果位6、位7沒有同時進位,則溢出標志位OV置“1”,否則清“0”O(jiān)V。3.3 指令功能描述3.3 指令功能描述關(guān)于溢出的概念,在數(shù)字電路中已經(jīng)學習過,在此說明如下:設(shè)兩個8位二進制數(shù)11111001B(-7)和00001000B(8)相加,結(jié)果為00000001B,加的過程中,最高位(位7)和次高位(位6)同時發(fā)生了進位,此時結(jié)果是正確的,沒有發(fā)
13、生溢出,加法只影響進位位。設(shè)兩個8位二進制數(shù)01111111B(127)和01000000B(64)相加,結(jié)果為10111111B(-63),顯然結(jié)果是錯誤的。加的過程中,次高位(位6)發(fā)生了進位,而最高位(位7)沒有發(fā)生進位,這就是溢出。同樣,如果兩個絕對值較大的負數(shù)相加,結(jié)果也會變成正數(shù),加的過程中,最高位發(fā)生了進位而次高位沒有發(fā)生進位。3.3 指令功能描述減法運算也有類似的效應(yīng),絕對值較大的兩個有符號數(shù)相減,可能會發(fā)生溢出,絕對值較小的兩個有符號數(shù)相減,不會發(fā)生溢出。因此,判斷兩數(shù)之和(之差)是否溢出,就是看加(減)的過程中最高位和次高位是否同時發(fā)生進位(借位),如果同時發(fā)生進位(借位)
14、或都不發(fā)生進位(借位),則沒有溢出,否則就是溢出。3.3 指令功能描述避免加法溢出現(xiàn)象的最簡單方法是減少有效數(shù)位數(shù),保留兩位符號位。比如兩個00111111B(前兩位為符號位)相加,結(jié)果仍為正數(shù)。因此,在編程時,應(yīng)注意加數(shù)(減數(shù))的絕對值不能過大。從數(shù)字電路的角度來說,只有加、減法運算才會發(fā)生溢出。MCS-51硬件電路中,乘、除法運算也會影響溢出標志位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稱為帶進位加法指令,其進行加法運算的特點是進位標志位C參與運算,因此帶進位加法運算是三個數(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é)為單位進行邏輯與運算,也可以以位為單位進行邏輯與運算。以字節(jié)為單位進行邏輯與運算以字節(jié)為單位進行邏輯與運算時,基本功能是將源操作數(shù)與目標操作數(shù)按位進行邏輯與運算,結(jié)果放到目標操作數(shù)存儲單元中。3.3 指令功能描述以位為單位進行邏輯與運算指令格式中最后一條是以位為單位進行邏輯與運算,其功能是將進位標志位C(位“累加器”)的值與直接尋址位的值進行邏輯與運算,結(jié)果存放到進位標志位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)移指令,當源尋址單元的值與目標存儲單元的值(或立即數(shù))不相等時,程序跳轉(zhuǎn)到rel設(shè)定的地址處執(zhí)行,否則,程序順序執(zhí)行。CJNE指令的功能是比較前面兩個操作數(shù)的大小,如果兩者的值不相等則轉(zhuǎn)移,把程序指針PC的值增量為下一條指令的起始地址后,再把指令最后一個字節(jié)的有符號的相對偏移量加到PC上,并計算出轉(zhuǎn)向的目標地址。3.3 指令功能描述CJNE A,50H,NEXT1AJMPNEXT2NEXT1:LJMPNEXTNEXT2:3.3 指令功
18、能描述(7) CLR指令指令格式:CLR A CLR C CLR bit指令描述:CLR稱為清零指令,可以以字節(jié)為單位將累加器A中的值清0,也可以以位為單位,將進位位C或位地址為bit的位清0。 3.3 指令功能描述(8) CPL指令 指令格式:CPL A CPL CCPL bit指令描述:CPL稱為取反指令。 3.3 指令功能描述(9) DA指令指令格式:DA A 指令描述:DA稱為十進制調(diào)整指令,用于對累加器A中的BCD碼十進制數(shù)加法運算結(jié)果的修正。 3.3 指令功能描述(10) DEC指令指令格式:DEC A DEC RnDEC directDEC Ri 指令描述:DEC指令稱為減1指令
19、 3.3 指令功能描述(11) DIV指令指令格式:DIV AB指令描述:DIV指令稱為除法指令,其功能是把累加器A中8位無符號整數(shù)(被除數(shù))除以B中的8位無符號整數(shù)(除數(shù)),所得的商(為整數(shù))存放在累加器A中,余數(shù)在寄存器B中,并將C和溢出標志位OV清“0”。如果執(zhí)行指令前B的內(nèi)容為“0”(即除數(shù)為“0”),則存放結(jié)果的A、B中的內(nèi)容不定,并置“1”溢出標志位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í)行,同時將被測試位清0;如果bit位的值為0則程序順序執(zhí)行。
21、JBC指令和JB指令的區(qū)別在于,JBC指令在跳轉(zhuǎn)的時候會將被測試位清0,而JB指令不將被測試位清0。3.3 指令功能描述(16) JC指令指令格式:JC rel 指令描述:如果進位位C為1,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;如果C為0則程序順序執(zhí)行。JC指令和JB指令的區(qū)別在于,JB指令測試的是直接地址位,而JC指令測試的是進位位C。3.3 指令功能描述(17) JMP指令指令格式: JMP A+DPTR指令描述:JMP指令稱為分支跳轉(zhuǎn)指令,跳轉(zhuǎn)的目標地址由累加器A中8位無符號數(shù)與DPTR中的16位無符號數(shù)之和來確定。3.3 指令功能描述JMP指令的實用形式如下: 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指令測試直接地址位bit是否為1,JNB指令測試直接地址位bit是否為0。3.3 指令功能描述(19) JNC指令指令格式:JNC rel 指令描述:如果進位位C不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNC指令和JB指令的區(qū)別在于,JB指令測試直接地址位bit是否為1
23、,JNC指令測試進位位C的值是否為0。3.3 指令功能描述(20) JNZ指令指令格式:JNZ rel 指令描述:如果累加器A中的值不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNZ指令和JB指令的區(qū)別在于,JB指令測試的是直接地址位bit是否為1,JNZ指令測試的是累加器A中的值(8位)是否不為0。3.3 指令功能描述(21) JZ指令指令格式:JZ rel指令描述:如果累加器A中的值為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JZ指令和JB指令的區(qū)別在于,JB指令測試的是直接地址位bit是否為1,JZ指令測試的是累加器A中的值(8位)是否為0。3.3 指令
24、功能描述(22) LCALL指令指令格式: LCALL addrl6指令描述:LCALL稱為長調(diào)用指令,可以調(diào)用64K字節(jié)范圍內(nèi)程序存儲器中的任何一個子程序。3.3 指令功能描述(23) LJMP指令指令格式:LJMP addr16指令描述:LJMP稱為長跳轉(zhuǎn)指令,可以跳轉(zhuǎn)到64K字節(jié)范圍內(nèi)程序存儲器中的任何一個地址處執(zhí)行。3.3 指令功能描述(24) MOV指令指令格式: MOV 目標操作數(shù),源操作數(shù)指令描述:MOV稱為一般數(shù)據(jù)傳送指令,是使用最頻繁,指令格式最多的一條指令。上面給出的指令格式,是MOV指令的通用格式,其具體格式根據(jù)目標操作數(shù)不同而有多種類型。以下針對不同目標操作數(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中。這是整個指令系統(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的位中的值傳送到進位位C中,第二行把進位位C中的值傳送到直接地址為bit的位中。位傳送指令中,一個操作數(shù)必須為進位位C,另個可以是任何直接尋址
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ù)存儲器之間數(shù)據(jù)傳送。
28、 3.3 指令功能描述(27) MUL指令指令格式:MUL AB指令描述:MUL指令稱為乘法指令,其功能是把累加器A和寄存器B中的無符號8位整數(shù)相乘,其16位積的低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255,則置“1”溢出標志位OV,否則清“0”O(jiān)V。MUL指令執(zhí)行后,進位標志位C總是被清“0”。3.3 指令功能描述(28) NOP指令指令格式:NOP指令描述:NOP指令稱為空操作指令,NOP指令不進行任何實際操作,只消耗一個機器周期的時間,常用于程序中的等待或時間的延遲。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é)為單位進行邏輯或運算,也能以位為單位進行運算。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的高位和低位,同時把堆棧指針SP減2。3.3 指令功能描述(33) RETI指令指令格式:RETI指令描述:RETI稱為中斷返回指令,功能是從堆棧中退出PC的高位和低位,把堆棧指針SP減2,同時清0相應(yīng)的中斷請求標志位。3.3 指令功能描述(34) RL指令指令格式:RL A指令描述:RL指令將累加器A的8位值向左循環(huán)移一位 3.3 指令功能描述(35) RLC指令指令格式:RLC A指令描述:RLC指令將累加器A的8位值和進位標志位C一起向左循環(huán)移一位,C移入累加器最低位ACC.0,累加器最高位ACC
31、.7移入進位位C 3.3 指令功能描述(36) RR指令指令格式:RR A指令描述:RR指令將累加器A的8位值向右循環(huán)移一位 3.3 指令功能描述(37) RRC指令指令格式:RRC A指令描述:RRC指令將累加器A的8位值和進位標志位C一起向右循環(huán)移一位 3.3 指令功能描述(38) SETB指令指令格式:SETB C SETB bit 指令描述:SETB指令將進位位C或直接位地址為bit的位中的值置為1,SETB指令中的直接地址值只能是位地址 3.3 指令功能描述(39) SJMP指令指令格式:SJMP rel指令描述:由于SJMP指令的字長、執(zhí)行時間與AJMP指令完全相同,但是跳轉(zhuǎn)范圍遠
32、小于AJMP指令,因而沒有任何實用價值。 3.3 指令功能描述(40) SUBB指令指令格式:SUBB A,Rn SUBB A,direct SUBB A,Ri SUBB A,#data指令描述:帶借位的減法指令,其進行減法運算的特點是進位標志位C參與運算,因此帶借位減法運算是三個數(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ù)存儲單元的值相互交換。 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é)為單位進行邏輯異或運算。3.3 指令功能描述3.4 匯編語言程序開發(fā)的過程軟件一般是以硬件為基礎(chǔ)工作的,軟件的設(shè)計要結(jié)合硬件
34、來進行。根據(jù)系統(tǒng)硬件的功能和性能指標,首先設(shè)計出軟件功能,然后對一個個功能模塊進行編程實現(xiàn)。1)編譯的基本概念如前所述,最終的程序,就是儲存在存儲器中的高、低電平物理信號,即二進制數(shù)值。MCS-51的程序存儲器是以字節(jié)(8位)為單位的,因此在單片機的程序存儲器中存放的是一個個8位的二進制數(shù)字。例1:01110101 01110000 000100013.4 匯編語言程序開發(fā)的過程程序可以用這樣的二進制數(shù)來編寫,然后采用特定的方法將這些二進制數(shù)燒寫到EEPROM、FLASH等程序存儲器中。這種二進制數(shù)表示的指令,稱為機器碼。 3.4 匯編語言程序開發(fā)的過程機器碼指令一般由操作碼和操作數(shù)兩部分構(gòu)成
35、,有些指令只有操作碼,沒有操作數(shù),有些指令有兩個操作數(shù)。例1的三個數(shù)值可以分為兩個部分:機器碼指令: 01110101 01110000 00010001(操作碼) (操作數(shù))3.4 匯編語言程序開發(fā)的過程但是利用這樣的二進制數(shù)表示程序,畢竟不直觀,書寫、分析起來都很困難,于是將操作碼用具有一定含義的助記符來代替,操作數(shù)用十進制或十六進制數(shù)來代替。例2中的機器碼指令可以用下面的程序語句來代替:程序語句:MOV70H,#11H(操作碼助記符)(操作數(shù))3.4 匯編語言程序開發(fā)的過程其中操作數(shù)如果用十六進制數(shù)表示,則后面帶后綴“H”,如果不帶后綴,則默認為十進制數(shù)。例3中的兩個數(shù)值還是有些不直觀,
36、可以用兩個具有一定含義的符號來代替,即替兩個數(shù)值取個名字。例4令:COUNTER=70HSTAGE=11H3.4 匯編語言程序開發(fā)的過程則例3的程序語句可以寫為:程序語句: MOV COUNTER,#STAGE形如例3、例5所示的指令,稱為匯編語言指令,由匯編語言指令構(gòu)成的程序,稱為匯編語言程序。例4中的COUNTER、STAGE也稱為符號、標號或變量名。 3.4 匯編語言程序開發(fā)的過程在PC機(個人計算機)還不普及的時候,開發(fā)人員一般先在紙上利用匯編語言指令編寫程序,并進行仔細推敲、修改,再人工翻譯成機器碼。因為要在機器碼和匯編語言之間反復相互翻譯,所以開發(fā)編程人員都很熟悉機器碼指令,有些簡
37、單的程序甚至直接用機器碼指令編寫。3.4 匯編語言程序開發(fā)的過程將匯編語言程序翻譯成機器碼程序,是一個繁雜的過程,不僅要對指令的機器碼比較熟悉,還要熟悉每條指令的機器碼長度,并要經(jīng)常對程序的長度進行精確計算。有些指令對于匯編語言來說是確定的,對于機器碼指令來說,是變化的。例如:1000HJCNEXT1020HNEXT:NOP第一行指令機器碼為:4020H3.4 匯編語言程序開發(fā)的過程因此,修改匯編程序是容易的,但是要修改機器碼程序,添加或刪除指令,則所有的跳轉(zhuǎn)類指令,都要重新計算跳轉(zhuǎn)長度,從而修改有關(guān)的指令機器碼。這就是許多MCS-51的資料中,在介紹跳轉(zhuǎn)類指令時,都要介紹比較繁雜的地址計算方
38、法的原因。3.4 匯編語言程序開發(fā)的過程隨著PC機的普及應(yīng)用,一般在PC機上以文本文檔的格式編寫匯編語言程序,這種文本文檔稱為匯編語言源程序或源代碼,文件擴展名為.asm。用助記符、標號和變量名代表指令機器碼的匯編語言源程序,必須經(jīng)過PC機上的編譯軟件翻譯成機器碼文件,才能通過專門的硬件編程器燒寫到程序存儲器中執(zhí)行。對于現(xiàn)在的應(yīng)用程序開發(fā)人員來說,沒有必要熟悉指令的機器碼,通常也沒有必要了解指令的機器碼長度和計算跳轉(zhuǎn)的目標地址,這些翻譯、計算工作,都由PC機上的專門編譯軟件來完成。3.4 匯編語言程序開發(fā)的過程將匯編語言源程序文件翻譯成機器碼文件的過程稱為匯編或編譯,完成編譯功能的PC機軟件稱
39、為編譯器或匯編器(Assembler)。編譯形成的機器碼文件,稱為目標文件,擴展名一般為.obj。將機器碼程序翻譯成匯編語言程序的過程稱為反匯編。3.4 匯編語言程序開發(fā)的過程令:COUNTER=70HSTAGE=11H也可以寫成指令的形式,如:COUNTEREQU70HSTAGE EQU11H這兩行語句,在形式上與匯編語言指令是相同的,但是并不能夠翻譯成機器碼指令,只是告訴翻譯人員或編譯軟件,翻譯時遇到“COUNTER”就換成數(shù)值“70H”,遇到“STAGE”就換成“11”。類似這種不能翻譯成機器碼的指令,稱為偽指令。3.4 匯編語言程序開發(fā)的過程指令是與機器硬件對應(yīng)的,不同的機器硬件具有不
40、同的指令集;偽指令是與編譯軟件對應(yīng)的,不同的編譯軟件支持不同的偽指令集。3.4 匯編語言程序開發(fā)的過程用C語言等高級語言編寫的源程序,還要先翻譯成匯編語言源程序,再編譯成機器碼目標文件。相對來說,匯編語言、機器碼語言屬于低級語言,高級語言必須翻譯成低級語言,才能被機器硬件接受。將C語言源程序翻譯成匯編語言源程序的PC機軟件,稱為C編譯器。每一行高級語言語句,實際上可能對應(yīng)若干條匯編語言指令,并且因編譯軟件(翻譯人員)不同而存在差異。而將匯編語言翻譯成機器碼,則不管誰來翻譯,結(jié)果都是一樣的。 3.4 匯編語言程序開發(fā)的過程2)用戶程序開發(fā)的過程 匯編語言源程序文件,以擴展名.asm表示。匯編語言
41、程序可以編寫在一個源程序文件中,也可以編寫在兩個或多個源文件中;可以由一個人編寫,也可以由不同的人分開來寫。不同的文件中保存的可以分別是匯編代碼或C代碼,以便于程序的模塊化設(shè)計。只要編譯軟件支持,同一個源程序文件中,可以一段匯編指令、一段C語言函數(shù)交替編寫。3.4 匯編語言程序開發(fā)的過程某些常用功能的程序內(nèi)容,比如各種計算類程序,可以先編寫好多個通用源文件,然后用PC機上專門的軟件將這些通用源文件組合成一個源文件庫。實現(xiàn)這種組合功能的PC機軟件稱為存檔器(Archiver)。也可以將各個通用源文件分別編譯,形成各自的目標文件,再建立一個目標文件庫。3.4 匯編語言程序開發(fā)的過程編譯器將各個源文
42、件、源文件庫編譯成相應(yīng)的目標文件,目標文件一般用擴展名.obj表示。這些目標文件還要按一定的方式進一步組合起來,才能燒寫到程序存儲器中在機器上執(zhí)行。將不同的目標文件、目標文件庫中的內(nèi)容組合到一起的過程,稱為程序的鏈接(也稱為連接)。完成鏈接功能的PC機軟件,稱為鏈接器(Linker)。鏈接生成的目標文件,稱為可執(zhí)行目標文件,一般用擴展名.hex表示。即使只有一個源文件,也必須進行鏈接,以把目標文件變成可執(zhí)行的目標文件。3.4 匯編語言程序開發(fā)的過程庫文件、多個文件組合成一個文件,一般都是針對C語言源程序的。對于匯編語言源文件來說,一般沒有必要弄出多個源文件來。早期的編譯軟件也有將匯編源文件直接生成可執(zhí)行的.hex十六進制目標文件,或者直接生成可執(zhí)行的.bin二進制目標文件,而不必經(jīng)過鏈接的過程。3.4 匯編語言程序開發(fā)的過程為了便于編程者閱讀和分析程序,鏈接器在生成目標文件的同時,還能產(chǎn)生一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電子廚房秤項目立項申請報告
- 2025年試用策劃平臺標準協(xié)議書樣本
- 2025年公交運營協(xié)議綜合概述
- 2025年單組元肼、雙組元液體推力器項目規(guī)劃申請報告模板
- 2025年毒素類診斷抗原項目申請報告模板
- 2025年全球創(chuàng)新資源共享協(xié)議
- 2025年端子機項目提案報告
- 2025年企業(yè)臨時文員雇傭合同
- 2025年度婚紗禮服租賃策劃協(xié)議
- 2025年指定購買化工材料中介服務(wù)合同樣本
- 計算機文化基礎(chǔ)單元設(shè)計-windows
- 創(chuàng)建動物保護家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(操作手冊)
- DNA 親子鑒定手冊 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 廣東中小學教師職稱評審申報表初稿樣表
- 部編一年級語文下冊教材分析
- 火炬及火炬氣回收系統(tǒng)操作手冊
- 北師大七年級數(shù)學下冊教學工作計劃及教學進表
- 菜肴成本核算(課堂PPT)
評論
0/150
提交評論