




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3章
MCS51指令系統(tǒng)匯編語言是一種面向機(jī)器的語言,是用符號(hào)來表示指令和地址的語言。單片機(jī)的編程,可以使用C語言等高級(jí)語言,也可以使用匯編語言。3.1
尋址方式大多數(shù)指令執(zhí)行時(shí),都需要使用操作數(shù)。尋址方式就是在指令中說明操作數(shù)所在地址的方法。一般說來,尋址方式越多,單片機(jī)的功能就越強(qiáng),靈活性越大,指令系統(tǒng)也就越復(fù)雜。3.1.1尋址方式MCS-5l單片機(jī)有以下7種尋址方式:1)立即數(shù)尋址方式立即尋址方式就是操作數(shù)在指令中直接給出。出現(xiàn)在指令中的操作數(shù)即為立即數(shù)。立即數(shù)前面加前綴標(biāo)志“#”。例如指令:
MOVA,#40H
所謂尋址,就是尋找操作數(shù)的地址,立即數(shù)尋址實(shí)際上不存在尋址的問題,操作數(shù)就是所提供的數(shù)值,因此所謂立即數(shù)尋址只是一種習(xí)慣說法。2)寄存器尋址方式寄存器尋址方式就是操作數(shù)在工作寄存器中,因此,指定了寄存器就能得到操作數(shù)。在寄存器尋址方式的指令中,以符號(hào)名稱表示寄存器。例如指令:
MOVA,Rn
;n=0~7傳送實(shí)際上是拷貝寄存器尋址范圍包括:①4組通用工作寄存區(qū)共32個(gè)工作寄存器。但只能針對(duì)當(dāng)前的工作寄存器區(qū)的8個(gè)工作寄存器進(jìn)行操作,因此指令中的寄存器的名稱只能是R0~R7。②部分特殊功能寄存器,例如累加器A、寄存器B以及數(shù)據(jù)指針DPTR(DPH、DPL)等。3)直接尋址方式直接尋址方式中,指令的操作數(shù)直接以單元地址的形式給出。例如,假設(shè)指令執(zhí)行前地址40H數(shù)據(jù)存儲(chǔ)單元的值為12H,指令:
MOVA,40H注意與立即數(shù)尋址的區(qū)別直接尋址方式只能使用8位二進(jìn)制數(shù)表示的地址,所以直接尋址方式的尋址范圍只限于:①內(nèi)部RAM的低128個(gè)單元;②特殊功能寄存器。寄存器尋址只是直接尋址方式針對(duì)寄存器的特定表示方法,在實(shí)質(zhì)上與直接尋址沒有區(qū)別。4)寄存器間接尋址方式寄存器中存放的是地址,即操作數(shù)是通過寄存器中的地址間接得到的,因此稱之為寄存器間接尋址,簡(jiǎn)稱為間址尋址。例如:MOV A,@R0寄存器間接尋址方式中的寄存器只有R0、R1和DPTR三個(gè)。寄存器間接尋址范圍為:①訪問內(nèi)部RAM低128個(gè)地址單元,其通用形式為@Ri(i=0,1);②對(duì)片外數(shù)據(jù)存儲(chǔ)器的64K字節(jié)的間接尋址,只能使用DPTR作間接尋址寄存器,其形式為@DPTR。例如:MOVXA,@DPTR5)基址寄存器加變址寄存器
間接尋址方式這種尋址方式簡(jiǎn)稱為基址加間接尋址,主要用于查程序存儲(chǔ)器中的數(shù)據(jù)表,只能以寄存器DPTR或PC作基址寄存器,以累加器A作為變址寄存器。并以兩者中的數(shù)值相加形成的16位數(shù)值作為地址尋找操作數(shù),以達(dá)到查表的目的。MOVC A,@DPTR+A
這種尋址方式的指令只有3條:
MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR6)位尋址方式MCS-51單片機(jī)有位處理功能,可以對(duì)數(shù)據(jù)按位進(jìn)行操作,因此就有相應(yīng)的位尋址方式。位尋址指令中可以直接使用位地址,例如:
MOVC,40H區(qū)別:MOVA,40H同樣一個(gè)數(shù)值,在指令中是代表字節(jié)地址還是代表位地址,除了可以由操作數(shù)的類型決定外,也可以由操作碼決定,例如:
SETB
40H位尋址的尋址范圍包括:①內(nèi)部RAM中的位尋址區(qū),字節(jié)地址為20H~2FH,共16個(gè)字節(jié)單元,128個(gè)位,位地址是00H~7FH。對(duì)這128個(gè)位的尋址使用直接地址表示。位尋址區(qū)中的位有兩種表示方法,一種是直接給出位地址;另一種是字節(jié)地址加上位數(shù),例如(20H).6。例如:
MOV C,06H
MOV C,(20H).6兩條指令的作用是等效的。②特殊功能寄存器可尋址位,有4種表示方法:特殊功能寄存器符號(hào)加位數(shù)的表示方法。例如PSW寄存器的位5表示為PSW.5;直接使用位地址。例如PSW寄存器位5的位地址為0D5H;位名稱的表示方法。例如PSW寄存器位5是F0標(biāo)志位,可使用F0表示該位;字節(jié)地址加位數(shù)的表示方法。例如PSW寄存器位5,因PSW的字節(jié)地址為0D5H,可表示為(0D0H).5。這4種位表示方法相互是等價(jià)的。7)相對(duì)尋址方式相對(duì)尋址方式是為解決程序轉(zhuǎn)移而專門設(shè)置的,為各種轉(zhuǎn)移指令所采用。這種尋址方式以當(dāng)前指令所在程序地址(程序指針PC中的值)為基數(shù),加上給定的地址偏移量,從而得到新的執(zhí)行指令地址(新的PC值)。例如:JC
50H
指令當(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ù)的過程。2.1.2尋址方式符號(hào)說明
Rn、Ri、direct、#data、#data16rel、DPTR、bit、C或CYaddr11,addrl6@3.2指令概述單片機(jī)所能執(zhí)行的指令的集合就是其指令系統(tǒng)。MCS—51單片機(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)。對(duì)于機(jī)器而言,指令實(shí)質(zhì)上就是一些二進(jìn)制數(shù)碼(機(jī)器碼),包括操作碼和操作數(shù)。如果用一個(gè)個(gè)二進(jìn)制數(shù)(機(jī)器碼)來表示指令,則編程、記錄時(shí)都不直觀,因此,匯編語言采用一些與指令功能相關(guān)的英文字母來代表指令操作碼,稱為助記符,用具有特定含義的符號(hào)代表操作數(shù),稱為標(biāo)號(hào)或變量名。在匯編語言指令說明中,一般包括以下幾個(gè)內(nèi)容:機(jī)器碼格式指令字長(zhǎng)
指令周期數(shù)指令執(zhí)行的過程
3.3
指令功能描述1)ACALL指令指令格式: ACALLaddr11指令描述:短調(diào)用地址為addr11的子程序。實(shí)際編程時(shí)不用這么復(fù)雜計(jì)算,可以用標(biāo)號(hào)代替addr11,例如:
ACALL
DISP指令執(zhí)行時(shí),將調(diào)用標(biāo)號(hào)(名稱)為DISP的子程序。2)ADD指令指令格式: ADDA,Rn
;(A)+(Rn)→A,n=0~7
ADDA,direct
;(A)+(direct)→A
ADDA,@Ri
;(A)+((Ri))→A,i=0,1
ADDA,#data
;(A)+#data→A指令描述:ADD指令稱為加法指令,其功能為:將被尋址數(shù)據(jù)單元的值(或立即數(shù))與累加器A中的值相加,結(jié)果保存到累加器A中。ADD指令的功能也可以簡(jiǎn)單的描述為:將被尋址數(shù)據(jù)單元的值加到累加器A中。
ADD指令完成兩個(gè)8位二進(jìn)制數(shù)加法運(yùn)算,其中一個(gè)加數(shù)總是來自累加器A,而另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等不同的尋址方式得到。其相加的結(jié)果總是放在累加器A中。使用加法指令時(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。關(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ā)生溢出,加法只影響進(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)位。減法運(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)位(借位)或都不發(fā)生進(jìn)位(借位),則沒有溢出,否則就是溢出。避免加法溢出現(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)ADDC指令指令格式:
ADDCA,Rn
;(A)+(Rn)+C→A, ADDCA,direct
;(A)+(direct)+C→A
ADDCA,@Ri
;(A)+((Ri))+C→A ADDCA,#data
;(A)+#data+C→A指令描述:ADDC稱為帶進(jìn)位加法指令,其進(jìn)行加法運(yùn)算的特點(diǎn)是進(jìn)位標(biāo)志位C參與運(yùn)算,因此帶進(jìn)位加法運(yùn)算是三個(gè)數(shù)相加。4)AJMP指令指令格式:AJMP
addrl1指令描述:AJMP稱為無條件近跳轉(zhuǎn)(轉(zhuǎn)移)指令,指令執(zhí)行后,將跳轉(zhuǎn)到由addrl1設(shè)定的程序地址處執(zhí)行。例如:
…
LOOP1:
…
…
AJMP
LOOP1
… AJMP LOOP2
… LOOP2: …
…5)ANL指令指令格式:ANLA,Rn
ANLA,direct
ANLA,#data
ANLA,@Ri
ANLdirect,A
ANLdirect,#data
ANLC,bit指令描述: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ǔ)單元中。②以位為單位進(jìn)行邏輯與運(yùn)算指令格式中最后一條是以位為單位進(jìn)行邏輯與運(yùn)算,其功能是將進(jìn)位標(biāo)志位C(位“累加器”)的值與直接尋址位的值進(jìn)行邏輯與運(yùn)算,結(jié)果存放到進(jìn)位標(biāo)志位C中。例如,指令:
ANL C,50H6)CJNE指令指令格式:CJNEA,direct,rel
CJNEA,#data,rel
CJNERn,#data,rel
CJNE@Ri,#data,rel指令描述: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)地址?!?/p>
CJNE A,50H,NEXT1
AJMP NEXT2NEXT1:
LJMP NEXTNEXT2: …
…7)CLR指令指令格式:
CLRA
CLRC
CLRbit指令描述:CLR稱為清零指令,可以以字節(jié)為單位將累加器A中的值清0,也可以以位為單位,將進(jìn)位位C或位地址為bit的位清0。8)CPL指令
指令格式: CPLA
CPLC
CPLbit指令描述:CPL稱為取反指令。9)DA指令指令格式: DA
A
指令描述:DA稱為十進(jìn)制調(diào)整指令,用于對(duì)累加器A中的BCD碼十進(jìn)制數(shù)加法運(yùn)算結(jié)果的修正。10)DEC指令指令格式:
DECA DECRn
DECdirect
DEC@Ri指令描述:DEC指令稱為減1指令
11)DIV指令指令格式: DIV
AB指令描述:DIV指令稱為除法指令,其功能是把累加器A中8位無符號(hào)整數(shù)(被除數(shù))除以B中的8位無符號(hào)整數(shù)(除數(shù)),所得的商(為整數(shù))存放在累加器A中,余數(shù)在寄存器B中,清“0”C和溢出標(biāo)志位OV。如果執(zhí)行指令前B的內(nèi)容為“0”(即除數(shù)為“0”),則存放結(jié)果的A、B中的內(nèi)容不定,并置“1”溢出標(biāo)志位OV。12)DJNZ指令
指令格式:
DJNZRn,rel
DJNZdirect,rel指令描述:DJNZ指令稱為減1非0跳轉(zhuǎn)指令,或者稱為循環(huán)指令
MOV R7,#5LOOP:
…
…
DJNZ R7,LOOP
…13)INC指令指令格式: INCA
INCRn
INCdirect
INC@Ri
INCDPTR指令描述:INC指令稱為增1指令14)JB指令指令格式: JBbit,rel指令描述:如果位地址bit為1,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;如果bit位為0則程序順序執(zhí)行。
…
JB 60H,NEXT
…NEXT:
…
…15)JBC指令指令格式: JBCbit,rel指令描述:如果位地址bit的值為1則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行,同時(shí)將被測(cè)試位清0;如果bit位的值為0則程序順序執(zhí)行。JBC指令和JB指令的區(qū)別在于,JBC指令在跳轉(zhuǎn)的時(shí)候會(huì)將被測(cè)試位清0,而JB指令不將被測(cè)試位清0。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。17)JMP指令指令格式:
JMP
@A+DPTR指令描述:JMP指令稱為分支跳轉(zhuǎn)指令,跳轉(zhuǎn)的目標(biāo)地址由累加器A中8位無符號(hào)數(shù)與DPTR中的16位無符號(hào)數(shù)之和來確定。JMP指令的實(shí)用形式如下:
…
MOV B,#3
MUL AB
MOV DPTR,#BRANCH
JMP
@A+DPTRBRANCH: LJMP CON0
LJMP CON1
LJMP CON2
…18)JNB指令指令格式: JNBbit,rel
指令描述:如果直接尋址位bit為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNB指令和JB指令的區(qū)別在于,JB指令測(cè)試直接地址位bit是否為1,JNB指令測(cè)試直接地址位bit是否為0。19)JNC指令指令格式: JNC
rel指令描述:如果進(jìn)位位C不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNC指令和JB指令的區(qū)別在于,JB指令測(cè)試直接地址位bit是否為1,JNC指令測(cè)試進(jìn)位位C的值是否為0。20)JNZ指令指令格式: JNZ
rel
指令描述:如果累加器A中的值不為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JNZ指令和JB指令的區(qū)別在于,JB指令測(cè)試的是直接地址位bit是否為1,JNZ指令測(cè)試的是累加器A中的值(8位)是否不為0。21)JZ指令指令格式: JZ
rel指令描述:如果累加器A中的值為0,則跳轉(zhuǎn)到rel設(shè)定的程序地址處執(zhí)行;否則程序順序執(zhí)行。JZ指令和JB指令的區(qū)別在于,JB指令測(cè)試的是直接地址位bit是否為1,JZ指令測(cè)試的是累加器A中的值(8位)是否為0。22)LCALL指令指令格式:LCALL
addrl6指令描述:LCALL稱為長(zhǎng)調(diào)用指令,可以調(diào)用64K字節(jié)范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程序。23)LJMP指令指令格式: LJMP
addrl6指令描述:LJMP稱為長(zhǎng)跳轉(zhuǎn)指令,可以跳轉(zhuǎn)到64K字節(jié)范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)地址處執(zhí)行。24)MOV指令指令格式:
MOV〈目標(biāo)操作數(shù)〉,〈源操作數(shù)〉指令描述:MOV稱為一般數(shù)據(jù)傳送指令,是使用最頻繁,指令格式最多的一條指令。上面給出的指令格式,是MOV指令的通用格式,其具體格式根據(jù)目標(biāo)操作數(shù)不同而有多種類型。以下針對(duì)不同目標(biāo)操作數(shù),分類說明MOV指令的具體格式和功能。①以累加器為目的操作數(shù)格式:
MOVA,Rn
MOVA,@Ri
MOVA,direct
MOVA,#data②以Rn為目的操作數(shù)格式:
MOVRn,A
MOVRn,direct
MOVRn,#data
③以直接地址為目的操作數(shù)格式:
MOVdirect,A
MOVdirect,Rn
MOVdirect1,direct2
MOVdirect,@Ri
MOVdirect,#data
④以寄存器間接地址為目的操作數(shù)格式:
MOV@Ri,A
MOV@Ri,direct
MOV@Ri,#data
⑤16位數(shù)傳送指令格式: MOVDPTR,#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。⑥數(shù)據(jù)位傳送指令格式:MOVC,bit
MOVbit,C功能:指令格式第一行,把直接地址為bit的位中的值傳送到進(jìn)位位C中,第二行把進(jìn)位位C中的值傳送到直接地址為bit的位中。位傳送指令中,一個(gè)操作數(shù)必須為進(jìn)位位C,另—個(gè)可以是任何直接尋址位。25)MOVC指令指令格式: MOVCA,@A+PC
MOVCA,@A+DPTR指令描述:MOVC稱為查表指令①以PC作基址寄存器
…
INC A
INC A
MOVC A,@A+PC
AJMP CONTINUTABLE: DB 00H,01H,02H,…CONTINU: …②以DPTR為基址寄存器
…
MOV DPTR,#TABLE
MOVC A,@A+DPTR
…26)MOVX指令指令格式:MOVXA,@DPTR
MOVXA,@Ri
MOVX@DPTR,A
MOVX@Ri,A
指令描述:MOVX指令用于累加器A與外部數(shù)據(jù)存儲(chǔ)器之間數(shù)據(jù)傳送。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”。28)NOP指令指令格式: NOP指令描述:NOP指令稱為空操作指令,NOP指令不進(jìn)行任何實(shí)際操作,只消耗一個(gè)機(jī)器周期的時(shí)間,常用于程序中的等待或時(shí)間的延遲。29)ORL指令指令格式: ORLA,Rn
ORLA,direct
ORLA,#data
ORLA,@Ri
ORLdirect,A
ORLdirect,#data
ORLC,bit指令描述:ORL稱為邏輯或指令,能以字節(jié)為單位進(jìn)行邏輯或運(yùn)算,也能以位為單位進(jìn)行運(yùn)算。30)POP指令指令格式: POPdirect指令描述:POP稱為出棧指令,功能是將堆棧指針SP指示的內(nèi)部RAM單元的數(shù)值送人直接地址字節(jié)單元中,堆棧指針SP減1。31)PUSH指令指令格式: PUSHdirect指令描述:PUSH稱為壓棧指令,功能是首先將棧指針SP加1,然后把直接地址單元的數(shù)值壓入棧指針SP指示的內(nèi)部RAM單元中。32)RET指令指令格式: RET指令描述:RET稱為子程序返回指令,功能是從堆棧中退出PC的高位和低位,同時(shí)把堆棧指針SP減2。33)RETI指令指令格式: RETI指令描述:RETI稱為中斷返回指令,功能是從堆棧中退出PC的高位和低位,把堆棧指針SP減2,同時(shí)清0相應(yīng)的中斷請(qǐng)求標(biāo)志位。34)RL指令指令格式: RLA指令描述:RL指令將累加器A的8位值向左循環(huán)移一位35)RLC指令指令格式: RLCA指令描述:RLC指令將累加器A的8位值和進(jìn)位標(biāo)志位C一起向左循環(huán)移一位,C移入累加器最低位ACC.0,累加器最高位ACC.7移入進(jìn)位位C
36)RR指令指令格式: RRA指令描述:RR指令將累加器A的8位值向右循環(huán)移一位37)RRC指令指令格式: RRCA指令描述:RRC指令將累加器A的8位值和進(jìn)位標(biāo)志位C一起向右循環(huán)移一位38)SETB指令指令格式: SETBC
SETBbit指令描述:SETB指令將進(jìn)位位C或直接位地址為bit的位中的值置為1,SETB指令中的直接地址值只能是位地址39)SJMP指令指令格式: SJMPrel指令描述:由于SJMP指令的字長(zhǎng)、執(zhí)行時(shí)間與AJMP指令完全相同,但是跳轉(zhuǎn)范圍遠(yuǎn)小于AJMP指令,因而沒有任何實(shí)用價(jià)值。40)SUBB指令指令格式:
SUBBA,Rn
SUBBA,direct
SUBBA,@Ri
SUBBA,#data指令描述:帶借位的減法指令,其進(jìn)行減法運(yùn)算的特點(diǎn)是進(jìn)位標(biāo)志位C參與運(yùn)算,因此帶借位減法運(yùn)算是三個(gè)數(shù)相減。41)SWAP指令
指令格式: SWAPA指令描述:SWAP稱為累加器半字節(jié)交換指令,其功能是將累加器A的高半字節(jié)和低半字節(jié)的值互換。42)XCH指令指令格式: XCHA,Rn
XCHA,direct
XCHA,@Ri
指令描述:XCH稱為字節(jié)交換指令,其功能是將累加器A中的值和被尋址內(nèi)部數(shù)據(jù)存儲(chǔ)單元的值相互交換。43)XCHD指令指令格式: XCHDA,@Ri指令描述:XCHD稱為半字節(jié)交換指令,其功能是將累加器的低4位與間接尋址內(nèi)部RAM單元的低4位交換。44)XRL指令指令格式: XRLA,Rn
XRLA,direct
XRLA,#data
XRLA,@Ri
XRLdirect,A
XRLdirect,#data指令描述:XRL稱為邏輯異或指令,XRL指令只能以字節(jié)為單位進(jìn)行邏輯異或運(yùn)算。3.4
匯編語言程序開發(fā)的過程
(本節(jié)大部分內(nèi)容課本沒有)軟件一般是以硬件為基礎(chǔ)工作的,軟件的設(shè)計(jì)要結(jié)合硬件來進(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ù)字。例如:111001010111000000010001程序可以用這樣的二進(jìn)制數(shù)來編寫,然后采用特定的方法將這些二進(jìn)制數(shù)燒寫到EEPROM、FLASH等程序存儲(chǔ)器中。這種二進(jìn)制數(shù)表示的指令,稱為機(jī)器碼。機(jī)器碼指令一般由操作碼和操作數(shù)兩部分構(gòu)成,有些指令只有操作碼,沒有操作數(shù),有些指令有兩個(gè)操作數(shù)。例一的三個(gè)數(shù)值可以分為兩個(gè)部分:機(jī)器碼指令:01110101
0111000000010001(操作碼)
(操作數(shù))但是利用這樣的二進(jìn)制數(shù)表示程序,畢竟不直觀,書寫、分析起來都很困難,于是將操作碼用具有一定含義的助記符來代替,操作數(shù)用十進(jìn)制或十六進(jìn)制數(shù)來代替。例二中的機(jī)器碼指令可以用下面的程序語句來代替:程序語句:
MOV
70H,#11(操作碼助記符)
(操作數(shù))其中操作數(shù)如果用十六進(jìn)制數(shù)表示,則后面帶后綴“H”,如果不帶后綴,則默認(rèn)為十進(jìn)制數(shù)。例三中的兩個(gè)數(shù)值還是有些不直觀,可以用兩個(gè)具有一定含義的符號(hào)來代替,即替兩個(gè)數(shù)值取個(gè)名字。例四令: COUNTER=70H STAGE=11則例三的程序語句可以寫為:程序語句:
MOV
COUNTER,#STAGE形如例三、例五所示的指令,稱為匯編語言指令,由匯編語言指令構(gòu)成的程序,稱為匯編語言程序。例四中的COUNTER、STAGE也稱為符號(hào)、標(biāo)號(hào)或變量名。在PC機(jī)(個(gè)人計(jì)算機(jī))還不普及的時(shí)候,開發(fā)人員一般先在紙上利用匯編語言指令編寫程序,并進(jìn)行仔細(xì)推敲、修改,再人工翻譯成機(jī)器碼。因?yàn)橐跈C(jī)器碼和匯編語言之間反復(fù)相互翻譯,所以開發(fā)編程人員都很熟悉機(jī)器碼指令,有些簡(jiǎn)單的程序甚至直接用機(jī)器碼指令編寫。將匯編語言程序翻譯成機(jī)器碼程序,是一個(gè)繁雜的過程,不僅要對(duì)指令的機(jī)器碼比較熟悉,還要熟悉每條指令的機(jī)器碼長(zhǎng)度,并要經(jīng)常對(duì)程序的長(zhǎng)度進(jìn)行精確計(jì)算。有些指令對(duì)于匯編語言來說是確定的,對(duì)于機(jī)器碼指令來說,是變化的。例如:1000H JC
NEXT…
…1020H NEXT:
NOP第一行指令機(jī)器碼為:4020H因此,修改匯編程序是容易的,但是要修改機(jī)器碼程序,添加或刪除指令,則所有的跳轉(zhuǎn)類指令,都要重新計(jì)算跳轉(zhuǎn)長(zhǎng)度,從而修改有關(guān)的指令機(jī)器碼。這就是許多MCS-51的資料中,在介紹跳轉(zhuǎn)類指令時(shí),都要介紹比較繁雜的地址計(jì)算方法的原因。隨著PC機(jī)的普及應(yīng)用,一般在PC機(jī)上以文本文檔的格式編寫匯編語言程序,這種文本文檔稱為匯編語言源程序或源代碼,文件擴(kuò)展名為.asm。用助記符、標(biāo)號(hào)和變量名代表指令機(jī)器碼的匯編語言源程序,必須經(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ī)上的專門編譯軟件來完成。將匯編語言源程序文件翻譯成機(jī)器碼文件的過程稱為匯編或編譯,完成編譯功能的PC機(jī)軟件稱為編譯器或匯編器(Assembler)。編譯形成的機(jī)器碼文件,稱為目標(biāo)文件,擴(kuò)展名一般為.obj。將機(jī)器碼程序翻譯成匯編語言程序的過程稱為反匯編。令: COUNTER=70H STAGE=11也可以寫成指令的形式,如:COUNTER EQU
70HSTAGE EQU
11這兩行語句,在形式上與匯編語言指令是相同的,但是并不能夠翻譯成機(jī)器碼指令,只是告訴翻譯人員或編譯軟件,翻譯時(shí)遇到“COUNTER”就換成數(shù)值“70H”,遇到“STAGE”就換成“11”。類似這種不能翻譯成機(jī)器碼的指令,稱為偽指令。指令是與機(jī)器硬件對(duì)應(yīng)的,不同的機(jī)器硬件具有不同的指令集;偽指令是與編譯軟件對(duì)應(yīng)的,不同的編譯軟件支持不同的偽指令集。用C語言等高級(jí)語言編寫的源程序,還要先翻譯成匯編語言源程序,再編譯成機(jī)器碼目標(biāo)文件。相對(duì)來說,匯編語言、機(jī)器碼語言屬于低級(jí)語言,高級(jí)語言必須翻譯成低級(jí)語言,才能被機(jī)器硬件接受。將C語言源程序翻譯成匯編語言源程序的PC機(jī)軟件,稱為C編譯器。每一行高級(jí)語言語句,實(shí)際上可能對(duì)應(yīng)若干條匯編語言指令,并且因編譯軟件(翻譯人員)不同而存在差異。而將匯編語言翻譯成機(jī)器碼,則不管誰來翻譯,結(jié)果都是一樣的。2)用戶程序開發(fā)的過程
匯編語言源程序文件,以擴(kuò)展名.asm表示。匯編語言程序可以編寫在一個(gè)源程序文件中,也可以編寫在兩個(gè)或多個(gè)源文件中;可以由一個(gè)人編寫,也可以由不同的人分開來寫。不同的文件中保存的可以分別是匯編代碼或C代碼,以便于程序的模塊化設(shè)計(jì)。只要編譯軟件支持,同一個(gè)源程序文件中,可以一段匯編指令、一段C語言函數(shù)交替編寫。某些常用功能的程序內(nèi)容,比如各種計(jì)算類程序,可以先編寫好多個(gè)通用源文件,然后用PC機(jī)上專門的軟件將這些通用源文件組合成一個(gè)源文件庫。實(shí)現(xiàn)這種組合功能的PC機(jī)軟件稱為存檔器(Archiver)。也可以將各個(gè)通用源文件分別編譯,形成各自的目標(biāo)文件,再建立一個(gè)目標(biāo)文件庫。編譯器將各個(gè)源文件、源文件庫編譯成相應(yīng)的目標(biāo)文件,目標(biāo)文件一般用擴(kuò)展名.obj表示。這些目標(biāo)文件還要按一定的方式進(jìn)一步組合起來,才能燒寫到程序存儲(chǔ)器中在機(jī)器上執(zhí)行。將不同的目標(biāo)文件、目標(biāo)文件庫中的內(nèi)容組合到一起的過程,稱為程序的鏈接(也稱為連接)。完成鏈接功能的PC機(jī)軟件,稱為鏈接器(Linker)。鏈接生成的目標(biāo)文件,稱為可執(zhí)行目標(biāo)文件,一般用擴(kuò)展名.hex表示。即使只有一個(gè)源文件,也必須進(jìn)行鏈接,以把目標(biāo)文件變成可執(zhí)行的目標(biāo)文件。庫文件、多個(gè)文件組合成一個(gè)文件,一般都是針對(duì)C語言源程序的。對(duì)于匯編語言源文件來說,一般沒有必要弄出多個(gè)源文件來。早期的編譯軟件也有將匯編源文件直接生成可執(zhí)行的.hex十六進(jìn)制目標(biāo)文件,或者直接生成可執(zhí)行的.bin二進(jìn)制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 掌握項(xiàng)目時(shí)間管理技巧試題及答案
- 注冊(cè)會(huì)計(jì)師考試專題試題及答案
- 真人圖書執(zhí)行方案范本
- 2024項(xiàng)目管理項(xiàng)目實(shí)施方案試題及答案
- 2024年項(xiàng)目管理考試實(shí)踐試題及答案
- 項(xiàng)目管理中的溝通與反饋機(jī)制試題及答案
- 2024年項(xiàng)目評(píng)估的標(biāo)準(zhǔn)題目及答案
- 地鐵拱蓋法施工方案
- 知識(shí)點(diǎn)全面覆蓋園藝師試題及答案
- 園林金屬工具生產(chǎn)工藝流程優(yōu)化考核試卷
- 2025年合肥高新美城物業(yè)有限公司招聘30人筆試參考題庫附帶答案詳解
- 2025內(nèi)蒙古中煤鄂爾多斯能源化工有限公司招聘98人筆試參考題庫附帶答案詳解
- 三年級(jí)西師大語文下學(xué)期期末知識(shí)點(diǎn)歸納復(fù)習(xí)知識(shí)點(diǎn)鞏固練習(xí)
- 河南省駐馬店市汝南縣2024-2025學(xué)年七年級(jí)下學(xué)期期中生物試題(含答案)
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 人教PEP版(一起)(2024)一年級(jí)上冊(cè)英語全冊(cè)教案(單元整體教學(xué)設(shè)計(jì))
- DZ∕T 0219-2006 滑坡防治工程設(shè)計(jì)與施工技術(shù)規(guī)范(正式版)
- MOOC 大學(xué)體育-華中科技大學(xué) 中國(guó)大學(xué)慕課答案
- 《光伏發(fā)電工程工程量清單計(jì)價(jià)規(guī)范》
- 人工智能與知識(shí)產(chǎn)權(quán)保護(hù)的關(guān)系
- 三年級(jí)下冊(cè)口算天天100題(A4打印版)
評(píng)論
0/150
提交評(píng)論