




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章 MCS-51指令系統(tǒng)3.1 簡 介 3.1.1 指令概述一臺微機(jī)所具有的所有指令的集合,就構(gòu)成了指令系統(tǒng)。指令系統(tǒng)越豐富,說明CPU的功能越強(qiáng)。例如,Z80 CPU中,沒有乘法和除法指令,乘法和除法運(yùn)算必須用軟件來實(shí)現(xiàn),因此執(zhí)行速度相對較慢;而MCS-51單片機(jī)提供了乘法和除法指令,實(shí)現(xiàn)乘法和除法運(yùn)算時(shí)就要快得多。 一臺微機(jī)能執(zhí)行什么樣的操作,是在微機(jī)設(shè)計(jì)時(shí)確定的。一條指令對應(yīng)著一種基本操作。由于計(jì)算機(jī)只能識別二進(jìn)制數(shù),所以指令也必須用二進(jìn)制形式來表示,稱為指令的機(jī)器碼或機(jī)器指令。 MCS-51單片機(jī)指令系統(tǒng)共有33種功能,42種助記符,111條指令。 3.1.2 指令格式不同指令翻譯
2、成機(jī)器碼后字節(jié)數(shù)也不一定相同。按照機(jī)器碼個(gè)數(shù),指令可以分為以下三種: MCS-51單片機(jī)指令系統(tǒng)包括49條單字節(jié)指令、46條雙字節(jié)指令和16條三字節(jié)指令。 采用助記符表示的匯編語言指令格式如下: 標(biāo)號是程序員根據(jù)編程需要給指令設(shè)定的符號地址,可有可無;標(biāo)號由18個(gè)字符組成,第一個(gè)字符必須是英文字,不能是數(shù)字或其它符號;標(biāo)號后必須用冒號。 操作碼表示指令的操作種類,如MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作等。 操作數(shù)或操作數(shù)地址表示參加運(yùn)算的數(shù)據(jù)或數(shù)據(jù)的有效地址。操作數(shù)一般有以下幾種形式:沒有操作數(shù)項(xiàng),操作數(shù)隱含在操作碼中,如RET指令;只有一個(gè)操作數(shù),如CPL A指令;有兩個(gè)操作數(shù),如MO
3、V A,#00H指令,操作數(shù)之間以逗號相隔;有三個(gè)操作數(shù),如CJNE A,#00H,NEXT指令,操作數(shù)之間也以逗號相隔。 注釋是對指令的解釋說明,用以提高程序的可讀性;注釋前必須加分號。 操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)的地址。尋找操作數(shù)地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強(qiáng)。 MCS-51指令系統(tǒng)共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址等。我們初步接觸了寄存器尋址、立即數(shù)尋址、直接尋址和寄存器間接尋址等4種尋址方式。 3.2 尋 址 方 式
4、1. 寄存器尋址 寄存器尋址是指將操作數(shù)存放于寄存器中,寄存器包括工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的數(shù)據(jù)傳送到寄存器R1中,其操作數(shù)存放在累加器A中,所以尋址方式為寄存器尋址。 如果程序狀態(tài)寄存器PSW的RS1RS0=01(選中第二組工作寄存器,對應(yīng)地址為08H0FH),設(shè)累加器A的內(nèi)容為20H,則執(zhí)行MOV R1,A指令后,內(nèi)部RAM 09H單元的值就變?yōu)?0H,如圖3.1所示。采用寄存器尋址的指令如下: MOV P1,A;將累加器A的內(nèi)容送 到P1口 MOV P1,R4 ;將寄存器R4的內(nèi)容送到P1口 CLR
5、A;將累加器A清0 CPL A;將累加器A中的內(nèi)容取反 RL A;將累加器A的內(nèi)容循環(huán)左移圖3.1 寄存器尋址示意圖 圖3.2 直接尋址示意圖 2. 直接尋址 直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機(jī)中,可以直接尋址的存儲器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。 例如,指令MOV A,3AH執(zhí)行的操作是將內(nèi)部RAM 中地址為3AH的單元內(nèi)容傳送到累加器A中,其操作數(shù)3AH就是存放數(shù)據(jù)的單元地址,因此該指令是直接尋址。 設(shè)內(nèi)部RAM 3AH單元的內(nèi)容是88H,那么指令MOV A,3AH的執(zhí)行過程如圖3.2所示。采用直接尋址的指令如下: MOV P1,20
6、H ;將20H單元的內(nèi)容傳送到P1口 3. 立即數(shù)尋址 立即數(shù)尋址是指將操作數(shù)直接寫在指令中。 例如,指令MOV A,#3AH執(zhí)行的操作是將立即數(shù)3AH送到累加器A中,該指令就是立即數(shù)尋址。注意:立即數(shù)前面必須加“#”號,以區(qū)別立即數(shù)和直接地址。該指令的執(zhí)行過程如圖3.3所示。 圖3.3 立即數(shù)尋址示意圖采用立即數(shù)尋址的指令如下: MOVP1,#55H;將立即數(shù)55H送P1口 MOV20H,#55;將立即數(shù)55H送20H 單元 MOVA,#0F0H;將立即數(shù)0F0H送累加器A MOVR4,#0FH;將立即數(shù)0FH送寄存器R4中 MOVR0,#20H;將立即數(shù)20H送寄存器R0口 AND A,#
7、0FH;累加器A的內(nèi)容與立即數(shù)0FH進(jìn)行邏輯與操作 OR A,#0F0H;累加器A的內(nèi)容與立即數(shù)0F0H進(jìn)行邏輯或操作 MOVA,#01H ;將立即數(shù)01H送累加器A中 MOV A,#55H ;將立即數(shù)55H送累加器A中 4. 寄存器間接尋址 寄存器間接尋址是指將存放操作數(shù)的內(nèi)存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時(shí),首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應(yīng)操作。 在MCS-51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。 注意:間接尋址寄存器前面必須加上符號“”。例如,指令MOV A,R0執(zhí)行的
8、操作是將R0的內(nèi)容作為內(nèi)部RAM的地址,再將該地址單元中的內(nèi)容取出來送到累加器A中。 設(shè)R0=3AH,內(nèi)部RAM 3AH中的值是65H,則指令MOV A,R0的執(zhí)行結(jié)果是累加器A的值為65H,該指令的執(zhí)行過程如圖3.4所示。采用寄存器間接尋址的指令如下: MOV P1,R0;將R0所指的存 儲單元的內(nèi)容送P1口圖3.4 寄存器間接尋址示意圖 5. 變址尋址 變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。 例如,指令MOVC A,A+DPTR執(zhí)行的操作是將累加器A和基址寄存器DPTR的內(nèi)容相加
9、,相加結(jié)果作為操作數(shù)存放的地址,再將操作數(shù)取出來送到累加器A中。 設(shè)累加器A=02H,DPTR=0300H,外部ROM中,0302H單元的內(nèi)容是55H,則指令MOVC A,A+DPTR的執(zhí)行結(jié)果是累加器A的內(nèi)容為55H。該指令的執(zhí)行過程如圖3.5所示。 圖3.5 變址尋址示意圖 6. 相對尋址 相對尋址是指程序計(jì)數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。該類尋址方式主要用于跳轉(zhuǎn)指令。 例如,指令SJMP 54H執(zhí)行的操作是將PC當(dāng)前的內(nèi)容與54H相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。 設(shè)指令SJMP 54H的機(jī)器碼80H 54H存放在
10、2000H處,當(dāng)執(zhí)行到該指令時(shí),先從2000H和2001H單元取出指令,PC自動(dòng)變?yōu)?002H;再把PC的內(nèi)容與操作數(shù)54H相加,形成目標(biāo)地址2056H,再送回PC,使得程序跳轉(zhuǎn)到2056H單元繼續(xù)執(zhí)行。該指令的執(zhí)行過程如圖3.6所示。圖3.6 相對尋址示意圖 7. 位尋址 位尋址是指按位進(jìn)行的尋址操作,而上述介紹的指令都是按字節(jié)進(jìn)行的尋址操作。MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)為單位進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)我們把某一位作為操作數(shù)時(shí),這個(gè)操作數(shù)的地址稱為位地址。位尋址區(qū)包括專門安排在內(nèi)部RAM中的兩個(gè)區(qū)域:一是內(nèi)部RAM的位尋址區(qū),地址范圍是20H2FH,共16個(gè)RAM單元,位
11、地址為00H7FH;二是特殊功能寄存器SFR中有11個(gè)寄存器可以位尋址,參見有關(guān)章節(jié)中位地址定義。 例如,指令SETB 3DH執(zhí)行的操作是將內(nèi)部RAM位尋址區(qū)中的3DH位置1。 設(shè)內(nèi)部RAM 27H單元的內(nèi)容是00H,執(zhí)行SETB 3DH后,由于3DH對應(yīng)內(nèi)部RAM 27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過程如圖3.7所示。圖3.7 位尋址示意圖3.3 指 令 系 統(tǒng) MCS-51單片機(jī)指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類 數(shù)據(jù)傳送指令(29條) 算術(shù)運(yùn)算指令(24條) 邏輯運(yùn)算指令(24條) 控制轉(zhuǎn)移指令(17條) 位操作指令(17條)
12、3.3.1 指令系統(tǒng)中的符號說明 指令的書寫必須遵守一定的規(guī)則,為了敘述方便,我們采用表3.2的約定。表3.2 指令描述約定符 號含 義Rn表示當(dāng)前選定寄存器組的工作寄存器R0R7Ri表示作為間接尋址的地址指針R0R1#data表示8位立即數(shù),即00HFFH#data16表示16位立即數(shù),即0000HFFFFHaddr16表示16位地址,用于64K范圍內(nèi)尋址addr11表示11位地址,用于2K范圍內(nèi)尋址direct8位直接地址,可以是內(nèi)部RAM區(qū)的某一單元或某一專用功能寄存器的地址Rel帶符號的8位偏移量(-128+127)Bit位尋址區(qū)的直接尋址位(X)X地址單元中的內(nèi)容,或X作為間接尋址寄
13、存器時(shí)所指單元的內(nèi)容將 后面的內(nèi)容傳送到前面去 3.3.2 數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送指令是MCS-51單片機(jī)匯編語言程序設(shè)計(jì)中使用最頻繁的指令,包括內(nèi)部 RAM、寄存器、外部RAM以及程序存儲器之間的數(shù)據(jù)傳送。 數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變。 數(shù) 據(jù)目的地址 源地址 1. 內(nèi)部8位數(shù)據(jù)傳送指令(15條) 內(nèi)部8位數(shù)據(jù)傳送指令共15條,主要用于MCS-51單片機(jī)內(nèi)部RAM與寄存器之間的數(shù)據(jù)傳送。指令基本格式: MOV , 1) 以累加器A為目的地址的傳送指令(4條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV A,Rn11101rrrA(Rn)n=07,
14、 rrr=0001111MOV A,direct11100101 directA (direct)1MOV A,Ri1110011iA (Ri)i=0,1 1MOV A,#data01110100 dataA #data1 注意:以上傳送指令的結(jié)果均影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 例3.1 已知相應(yīng)單元的內(nèi)容如下,請指出每條指令執(zhí)行后相應(yīng)單元內(nèi)容的變化。 累加器A40H寄存器R050H內(nèi)部RAM:40H30H內(nèi)部RAM:50H10H (1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,R0解:(1) MOV A,#20H執(zhí)行后A=20H
15、。 (2) MOV A,40H執(zhí)行后A=30H。 (3) MOV A,R0執(zhí)行后A=50H。 (4) MOV A,R0執(zhí)行后A=10H。 2) 以Rn為目的地址的傳送指令(3條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV Rn,A11111rrr(Rn)An=07, rrr=0001111MOV Rn,direct10101rrr directRn (direct)n=07, rrr=0001111MOV Rn,#data01111rrr dataRn #datan=07, rrr=0001111 注意:以上傳送指令的結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。3) 以直接地址為目的地址的
16、傳送指令(5條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV direct,A11111010 direct(direct) A1MOV direct,Rn10001rrr direct(direct )Rnn=07, rrr=0001111MOV direct2,direct110000101direct1 direct2(direct2) direct12MOV direct,Ri1000011i direct(direct )(Ri)i=0,12MOV direct,#data01110101direct data(direct)#data2 注意:以上傳送指令的結(jié)果不影響程序狀
17、態(tài)字寄存器PSW標(biāo)志。 4) 以寄存器間接地址為目的地址的傳送指令(3條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV Ri,A1111011i(Ri)Ai=0,11MOV Ri,direct1110011i direct(Ri)(direct)2MOV Ri,#data0111010i data(Ri)#data1 注意:以上傳送指令的結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。 例3.2 已知相應(yīng)單元的內(nèi)容如下,請指出下列指令執(zhí)行后各單元內(nèi)容相應(yīng)的變化。寄存器R050H寄存器R166H寄存器R630H內(nèi)部RAM:50H60H內(nèi)部RAM:66H45H內(nèi)部RAM:70H40H(1) MOV
18、A,R6 (2) MOV R6,70H(3) MOV 70H,50H(4) MOV 40H,R0(5) MOV R1,#88H解:(1) MOV A,R6執(zhí)行后A=30H。(2) MOV R6,70H執(zhí)行后R6=40H。(3) MOV 70H,50H執(zhí)行后(70H)=60H。(4) MOV 40H,R0執(zhí)行后(40H)=60H。(5) MOV R1,#88H執(zhí)行后(66H)=88H。3. 16位 數(shù)據(jù)傳送指令(1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV DPTR,#data1610010000 data158 data70(DPTR) #data16把16位常數(shù)裝入數(shù)據(jù)指針2#
19、data16 入數(shù)據(jù)指針 注意:以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。 3. 外部數(shù)據(jù)傳送指令(4條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOVX A,DPTR11100000A(DPTR)把DPTR所對應(yīng)的外部RAM地址中的內(nèi)容傳送給累加器A2MOVX A,Ri1110001iA (Ri)i=0,12MOVX DPTR,A11110000(DPTR) A結(jié)果不影響P標(biāo)志2MOVX Ri,A1110001i(Ri) Ai=0,1,結(jié)果不影響P標(biāo)志2 注意: 外部RAM只能通過累加器A進(jìn)行數(shù)據(jù)傳送。 累加器A與外部RAM之間傳送數(shù)據(jù)時(shí)只能間接尋址方式,間接尋址寄存器為DPTR,
20、R0,R1。 以上傳送指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 例3.3 把外部數(shù)據(jù)存儲器2040H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲器2560H單元中去。 解:MOV DPTR,#2040H MOVX A,DPTR;先將2040H單元的內(nèi)容傳送到累加器A中 MOV DPTR,#2560H MOVX DPTR,A;再將累加器A中的內(nèi)容傳送到2560H單元中4. 交換和查表類指令(9條)1) 字節(jié)交換指令(3條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期XCH A,Rn11001rrr ARn A與Rn內(nèi)容互換1XCH A,direct11000101 directA(direct)1X
21、CH A,Ri1100011iA(Ri)i=0,11注意:以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的P標(biāo)志。2) 半字節(jié)交換指令(1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期XCHD A,Ri1101011iA30(Ri)30低4位交換,高4位不變1 注意:上面指令結(jié)果影響程序狀態(tài)字寄存器PSW的P標(biāo)志。3) 累加器A中高4位和低4位交換(1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期SWAP A11000100A 30A74 高、低4位互相交換1 注意:上面指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。 例3.4 設(shè)內(nèi)部數(shù)據(jù)存儲區(qū)2AH、2BH單元中連續(xù)存放有4個(gè)BCD碼(1個(gè)BCD
22、碼占 a3 a2a0 a1 a1 a0 a2 a3 2AH 2BH 2AH 2BH 4) 查表指令(2條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOVC A,A+PC10000011A(A+PC)A+PC所指外部程序存儲單元的值送A2MOVC A,A+DPTR10010011A(A+DPTR)A+DPTR所指外部程序存儲單元的值送A2 注意: 以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 查表指令用于查找存放在程序存儲器中的表格。 5) 堆棧操作指令(2條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期PUSH direct11000000directSPSP+1(SP)(di
23、rect)將SP加1,然后將源地址單元中的數(shù)傳送到SP所指示的單元中去2POP direct11010000direct(direct) (SP)SPSP-1將SP所指示的單元中的數(shù)傳送到direct地址單元中,然后SPSP-12 注意: 堆棧是用戶自己設(shè)定的內(nèi)部RAM中的一塊專用存儲區(qū),使用時(shí)一定先設(shè)堆棧指針,堆棧指針缺省為SP=07H。 堆棧遵循后進(jìn)先出的原則安排數(shù)據(jù)。 堆棧操作必須是字節(jié)操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫成: PUSH/POP ACC 或 PUSH/POP 0E0H而不能寫成: PUSH/POP A 堆棧通常用于臨時(shí)保護(hù)數(shù)據(jù)及子程序調(diào)用時(shí)保護(hù)現(xiàn)場和恢復(fù)現(xiàn)
24、場。 以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。 例3.5 設(shè)堆棧指針為30H,把累加器A和DPTR中的內(nèi)容壓入,然后根據(jù)需要再把它們彈出,編寫實(shí)現(xiàn)該功能的程序段。 解:MOV SP,#30H ;設(shè)置堆棧指針,SP=30H為棧底地址 PUSH ACC ;SP+1SP,SP=31H,ACC (SP) PUSH DPH ;SP+1SP,SP=32H,DPH (SP) 3.3.3 算術(shù)運(yùn)算類指令 1. 加、減法指令(22條) 1) 加法指令(8條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ADD A,Rn00101rrrA(A+Rn)n=07, rrr=0001111ADD A,direct
25、00100101AA+(direct)1ADD A,Ri0010011iA(A+(Ri)i=0,11ADD A,#data00100100 dataAA+#data1ADDC A,Rn00111rrrAA+Rn+CYn=07, rrr=0001111ADDC A,direct00110101 directAA+(direct)+CY1ADDC A,Ri0011011iAA+(Ri)+CYi=0,11ADDC A,#data00110100 dataAA+#data+CY1 注意: ADD與ADDC的區(qū)別為是否加進(jìn)位位CY。 指令執(zhí)行結(jié)果均在累加器A中。 以上指令結(jié)果均影響程序狀態(tài)字寄存器PSW
26、的CY、OV、AC和P標(biāo)志。 2) 減法指令(4條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期SUBB A,Rn1001rrrAA-(Rn)-CYn=07 rrr=0001111SUBB A,direct10010101 directAA-(direct)-CY1SUBB A,Ri1001011iAA- (Ri)-CYi=0,11SUBB A,#data10010100 dataAA-(#data)-CY1 注意: 減法指令中沒有不帶借位的減法指令,所以在需要時(shí),必須先將CY清0。 指令執(zhí)行結(jié)果均在累加器A中。 減法指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標(biāo)志。 例3.6
27、編寫計(jì)算12A4H+0FE7H的程序,將結(jié)果存入內(nèi)部RAM 41H和40H單元,40H存低8位,41H存高8位。 解:單片機(jī)指令系統(tǒng)中只提供了8位的加減法運(yùn)算指令,兩個(gè)16位數(shù)(雙字節(jié))相加可分為兩步進(jìn)行,第一步先對低8位相加,第二步再對高8位相加。 3) BCD碼調(diào)整指令(1條)助記符格式機(jī)器碼(B)指令說明機(jī)器周期DA A11010100BCD碼加法調(diào)整指令1 注意: 結(jié)果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標(biāo)志。 BCD(Binary Coded Decimal)碼是用二進(jìn)制形式表示十進(jìn)制數(shù),例如十進(jìn)制數(shù)45,其BCD碼形式為45H。BCD碼只是一種表示形式,與其數(shù)值沒有關(guān)系
28、。 BCD碼用4位二進(jìn)制碼表示一位十進(jìn)制數(shù),這4位二進(jìn)制數(shù)的權(quán)為8421,所以BCD碼又稱為8421碼。十進(jìn)制數(shù)碼09所對應(yīng)的二進(jìn)制碼如表3.3所示。表3.3 十進(jìn)制數(shù)碼與BCD碼對應(yīng)表十進(jìn)制數(shù)碼0123456789二進(jìn)制碼0000000100100011010001010110011110001001 在表3.3中,用4位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,例如56D和87D的BCD碼表示為 0101 0110 (56D) 1000 0111 (87D) 0001 0100 0011 (143D) DAA指令將A中的二進(jìn)制碼自動(dòng)調(diào)整為BCD碼。 DAA指令只能跟在ADD或ADDC加法指令后. 例3.
29、7 說明指令MOV A,#05H和ADD A,#08H及DA A的執(zhí)行結(jié)果。 解:MOV A,#05H ;05HA ADD A,#08H ;05H+08HA,A=0DH DA A ;自動(dòng)調(diào)整為BCD碼,A=13H4) 加1減1指令(9條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期INC A00000100AA+1影響PSW的P標(biāo)志1INC Rn00001rrrRnRn+1n=07, rrr=0001111INC direct0101 direct(direct)(direct)+11INC Ri0000011i(Ri)(Ri)+1i=0,11INC DPTR10100011DPTRDPT
30、R+12DEC A00010100AA-1影響PSW的P標(biāo)志1DEC Rn00011rrrRnRn-1n=07, rrr=0001111DEC direct00010101 direct(direct)(direct)+11DEC Ri0001011i(Ri)(Ri)-1i=0,11 注意:以上指令結(jié)果通常不影響程序狀態(tài)字寄存器PSW。 例3.8 分別指出指令I(lǐng)NC R0和INC R0的執(zhí)行結(jié)果。設(shè)R0=30H,(30H)=00H。 解: INC R0 ;R0+1=30H+1=31HR0,R0=31H INCR0 ;(R0)+1=(30H)+1(R0),(30H)=01H,R0中內(nèi)容不變 2.
31、 乘、除法指令 1) 乘法指令(2條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MUL AB10100100BAA*B無符號數(shù)相乘,高位存B,低位存A4 注意:乘法結(jié)果影響程序狀態(tài)字寄存器PSW的OV(積超過0FFH則置1,否則為0)和CY(總是清0)以及P標(biāo)志。 2) 除法指令(1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期DIV AB10000100AA/B的商BA/B的余數(shù)無符號數(shù)相除,商存A,余數(shù)存B4 注意: 除法結(jié)果影響程序狀態(tài)字寄存器PSW的OV(除數(shù)為0則置1,否則為0)和CY(總是清0)以及P標(biāo)志。 當(dāng)除數(shù)為0時(shí)結(jié)果不能確定。3.3.4 邏輯運(yùn)算及移位類指令1. 邏
32、輯運(yùn)算指令(20條)1) 邏輯與指令(6條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL A,direct01010101 directAAdirect按位相與1ANL A,Rn01011rrrAARnn=07, rrr=0001111ANL A,Ri0101011iAA(Ri)i=0,11ANL A,#data01010100 dataAA#data1ANL direct,A01010010 direct(direct)(direct)A不影響PSW的P標(biāo)志1ANL direct,#data01010011 direct data(direct)(direct)#data不影響PSW
33、的P標(biāo)志2 注意: 以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 邏輯與指令通常用于將一個(gè)字節(jié)中的指定位清0,其它位不變。 2) 邏輯或指令(6條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ORL A,direct01000101 directAAdirect按位相或1ORL A,Rn01001rrrAARnn=07, rrr=0001111ORL A,Ri0100011iAA(Ri)i=0,11ORL A,#data01000100 dataAA#data1ORL direct,A01000010 direct(direct)(direct)A不影響PSW的P標(biāo)志1ORL dir
34、ect,#data01000011 direct data(direct)(direct)#data不影響PSW的P標(biāo)志2 注意: 以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 邏輯或指令通常用于將一個(gè)字節(jié)中的指定位置1,其余位不變。 3) 邏輯異或指令(6條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期XRL A,direct01100101 directAA(direct)按位相異或1XRL A,Rn01101rrrAARnn=07, rrr=0001111XRL A,Ri0110011iAA (Ri)i=0,11XRL A,#data01100100 dataAA#data1X
35、RL direct,A01100010 direct(direct)(direct)A不影響PSW的P標(biāo)志1XRL direct,#data01100011 direct data(direct)(direct)#data不影響PSW的P標(biāo)志2 注意: 以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。 “異或”原則是相同為0,不同為1。 4) 累加器A清0和取反指令(2條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期CLR A11100100A00HA中內(nèi)容清0,影響P標(biāo)志1CPL A11110100AA中內(nèi)容按位取反,影響P標(biāo)志12. 循環(huán)移位指令(4條)助記符格式機(jī)器碼(B)相應(yīng)操作
36、指令說明機(jī)器周期RL A00100011A7A0循環(huán)左移1RLC A00110011CYA7A0帶進(jìn)位循環(huán)左移,影響CY標(biāo)志1RR A00000011A7A0循環(huán)右移1RRC A00010011CYA7A0帶進(jìn)位循環(huán)右移,影響CY標(biāo)志1 注意:執(zhí)行帶進(jìn)位的循環(huán)移位指令之前,必須給CY置位或清0。 3.3.5 控制轉(zhuǎn)移類指令 控制轉(zhuǎn)移類指令的本質(zhì)是改變程序計(jì)數(shù)器PC的內(nèi)容,從而改變程序的執(zhí)行方向??刂妻D(zhuǎn)移指令分為:無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令和調(diào)用/返回指令。 1. 無條件轉(zhuǎn)移指令(4條) 1) 長轉(zhuǎn)移指令(1條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期LJMP addr16000000
37、10 addr158 addr70PCaddr16程序跳轉(zhuǎn)到地址為addr16開始的地方執(zhí)行2 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 該指令可以轉(zhuǎn)移到64 KB程序存儲器中的任意位置。 2) 絕對轉(zhuǎn)移指令 (1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期AJMP addr11a10a9a800001addr70PC100addr11程序跳轉(zhuǎn)到地址為PC1511addr11開始的地方執(zhí)行,2 KB內(nèi)絕對轉(zhuǎn)移2 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 該指令轉(zhuǎn)移范圍是2 KB。 例3.9 指令KWR: AJMP KWR1的執(zhí)行結(jié)果。 解:設(shè)KWR標(biāo)號地址=1030H,K
38、WR1標(biāo)號地址=1100H,該指令執(zhí)行后PC首先加2變?yōu)?032H,然后由1032H的高5位和1100H的低11位拼裝成新的PC值0001000100000000B,即程序從1100H開始執(zhí)行。 3) 相對轉(zhuǎn)移指令 (1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期SJMP rel10000000 relPCPC+rel-80H(-128)7FH(127)短轉(zhuǎn)移2 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 該指令的轉(zhuǎn)移范圍是以本指令的下一條指令為中心的-128+127字節(jié)以內(nèi)。 在實(shí)際應(yīng)用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用標(biāo)號來代替的,不
39、一定寫出它們的具體地址。4) 間接尋址的無條件轉(zhuǎn)移指令(1條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期JMP A+DPTR01110011PCA+DPTR64 KB內(nèi)相對轉(zhuǎn)移2 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 該指令通常用于散轉(zhuǎn)(多分支)程序。 2. 條件轉(zhuǎn)移指令(8條) 1) 累加器A判0指令(2條) 助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期JZ rel0110000若A=0, 則PCPC+rel, 否則程序順序執(zhí)行 2JNZ rel01110000若A0, 則PCPC+rel, 否則程序順序執(zhí)行2 注意: 以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 轉(zhuǎn)移范圍與指令S
40、JMP相同。 2) 比較轉(zhuǎn)移指令(4條) 助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期CJNE A,#data,rel10110100 data rel若A#data, 則PCPC+rel,否則順序執(zhí)行;若 A#data,則CY=1,否則CY=02CJNE Rn,#data,rel10111rrrdata rel若 Rn#data,則PCPC+rel,否則順序執(zhí)行;若Rn#data,則CY=1,否則CY=02CJNE Ri,#data,rel1011011idata rel若(Ri)#data,則PCPC+rel,否則順序執(zhí)行;若(Ri)#data,則CY=1,否則CY=02CJNE A,direc
41、t,rel10110101direct rel若A(direct),則PCPC+rel,否則順序執(zhí)行;若A(direct),則CY=1,否則CY=02 注意: 以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY標(biāo)志。 轉(zhuǎn)移范圍與SJMP指令相同。 3) 減1非零轉(zhuǎn)移指令(2條)助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期DJNZ Rn,rel11011rrr relRnRn-1,若Rn0,則PCPC+rel, 否則順序執(zhí)行2DJNZ direct,rel11010101 direct rel(direct)(direct)-1,若(direct)0,則PCPC+rel,否則順序執(zhí)行2 注意: DJNZ指令
42、通常用于循環(huán)程序中控制循環(huán)次數(shù)。 轉(zhuǎn)移范圍與SJMP指令相同。 以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 3. 調(diào)用和返回指令(5條) 1) 絕對調(diào)用指令(1條)助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期ACALL addr11a10a9a810001addr70PC PC+2SP SP+1,(SP)PC07SP SP+1,(SP)PC815PC010 addr112 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 調(diào)用范圍與AJMP指令相同。 2) 長調(diào)用指令(1條) 助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期LCALL addr1600010010addr158addr70PCPC+3SP S
43、P+1,SPPC07SP SP+1,SPPC815PC addr162 注意: 該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。 調(diào)用范圍與LJMP指令相同。3) 返回指令(2條) 助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期RET00100010PC815 (SP), SP SP-1PC07 (SP), SP SP-1子程序返回指令2RETI00110010PC815 SP, SP SP-1PC07 SP, SP SP-1中斷返回指令2 注意:該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。4) 空操作(1條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明NOP00000000空操作消耗1個(gè)機(jī)器周期注意:該指令結(jié)果不影響
44、程序狀態(tài)字寄存器PSW。 3.3.6 位操作類指令 位操作指令的操作數(shù)是“位”,其取值只能是0或1,故又稱之為布爾操作指令。位操作指令的操作對象是片內(nèi)RAM的位尋址區(qū)(即20H2FH)和特殊功能寄存器SFR中的11個(gè)可位尋址的寄存器。片內(nèi)RAM的20H2FH共16個(gè)單元128個(gè)位,我們?yōu)檫@128個(gè)位的每個(gè)位均定義一個(gè)名稱:00H7FH,稱為位地址,如表3.4所示。對于特殊功能寄存器SFR中可位尋址的寄存器的每個(gè)位也有名稱定義,如表3.5所示。 表3.4 片內(nèi)RAM位尋址區(qū)的位地址分布位地址/位名稱字節(jié)地址D7D6D5D4D3D2D1D07F7E7D7C7B7A79782FH7776757473
45、7271702EH6F6E6D6C6B6A69682DH67666564636261602CH5F5E5D5C5B5A59582BH57565554535251502AH4F4E4D4C4B4A494829H474645444342414028H3F3E3D3C3B3A393827H373635343332313026H2F2E2D2C2B2A292825H272625242322212024H1F1E1D1C1B1A191823H171615141312111022H0F0E0D0C0B0A090821H070605040302010020H續(xù)表(2)表3.5 SFR中的位地址分布SFR位地
46、址/位名稱字節(jié)地址D7D6D5D4D3D2D1D0BF7HF6HF5HF4HF3HF2HF1HF0HF0HACCE7HE6HE5HE4HE3HE2HE1HE0HE0HACC.7ACC.6ACC.5ACC.4ACC.3ACC.2ACC.1ACC.0PSWD7HD6HD5HD4HD3HD2HD1HD0HD0HCYACF0RS1RS0OVF1P 續(xù)表(2)IPBFHBEHBDHBCHBBHBAHB9HB8HB8HPSPT1PX1PT0PX0P3B7HB6HB5HB4HB3HB2HB1HB0HB0HP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IEAFHAEHADHACHABHAAH
47、A9HA8HA8HEAESET1EX1ET0EX0P2A7HA6HA5HA4HA3HA2HA1HA0HA0HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0續(xù)表(3)SCON9FH9EH9DH9CH9BH9AH99H98H98HSM0SM1SM2RENTB8RB8TIRIP197H96H95H94H93H92H91H90H90HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TCON8FH8EH8DH8CH8BH8AH89H88H88HTF1TR1TF0TR0IE1IT1IE0IT0P087H86H85H84H83H82H81H80H80HP0.7P0.6P0.
48、5P0.4P0.3P0.2P0.1P0.0 對于位尋址,有以下三種不同的寫法。 第一種是直接地址寫法, 如 MOV C,0D2H,其中,0D2H表示PSW中的OV位地址。 第二種是點(diǎn)操作符寫法,如 MOV C , 0D0H.2。 第三種是位名稱寫法,在指令格式中直接采用位定義名稱,這種方式只適用于可以位尋址的SFR,如MOV C,OV。 1. 位傳送指令(2條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期MOV C,bit10100010CY bit位傳送指令,結(jié)果影響CY標(biāo)志2MOV bit,C10010010bit CY位傳送指令,結(jié)果不影響PSW2 注意:位傳送指令的操作數(shù)中必須有一個(gè)
49、是進(jìn)位位C,不能在其它兩個(gè)位之間直接傳送。進(jìn)位位C也稱為位累加器。 2. 位置位和位清零指令(4條)助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期CLR C11000011CY 0位清0指令,結(jié)果影響CY標(biāo)志1CLR bit11000010 bitbit 0位清0指令,結(jié)果不影響PSW1SETB C11010011CY1位置1指令,結(jié)果影響CY標(biāo)志1SETB bit11010010 bitbit 1位置1指令,結(jié)果不影響PSW13. 位運(yùn)算指令(6條) 助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110
50、010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C1011001
51、1CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位
52、與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY C
53、Y位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2c機(jī)器碼(B)相應(yīng)操作指令說明機(jī)器周期ANL C,bit10000010 bitCY CYbit位與指令2ANL C/bit10110010 bitCY CY位與指令2ORL C,bit01110010 bitCY CYbit位或指令2ORL C/bit10100010 bitCY CY位或指令2CPL C10110011CY位取反指令2CPL bit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機(jī)器碼(B)相應(yīng)操作機(jī)器周期JB bit,rel00100000 bit rel若bit=1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- “JUZI漢語”軟件在HSK詞匯教學(xué)中的應(yīng)用研究
- JS銀行ESG管理體系優(yōu)化研究
- 讀后續(xù)寫教學(xué)中高中英語教師的教學(xué)信念對其教學(xué)行為影響的個(gè)案研究
- 玩具設(shè)計(jì)核心要素與創(chuàng)新實(shí)踐
- 孩子作業(yè)書寫培訓(xùn)
- 電信網(wǎng)絡(luò)安全班會(huì)
- 腦動(dòng)靜脈畸形MRI診斷
- 頤和園英文課件
- 三減三健健康知識教育
- 心內(nèi)科胸悶氣促的護(hù)理診斷
- JBT 14449-2024 起重機(jī)械焊接工藝評定(正式版)
- DL-T5017-2007水電水利工程壓力鋼管制造安裝及驗(yàn)收規(guī)范
- 海上風(fēng)電場選址與環(huán)境影響評估
- 《陸上風(fēng)電場工程概算定額》(NB-T 31010-2019)
- 《早期教育概論》課程標(biāo)準(zhǔn)
- 藥物分析年終述職報(bào)告
- 農(nóng)發(fā)行信貸業(yè)務(wù)考試題庫題庫附答案
- 2024普通高中物理課程標(biāo)準(zhǔn)解讀
- 精神分裂癥護(hù)理查房
- 建筑物聯(lián)網(wǎng)工程綜合實(shí)訓(xùn) 課件 第1-3章 物聯(lián)網(wǎng)技術(shù)導(dǎo)論、物聯(lián)網(wǎng)領(lǐng)域的關(guān)鍵技術(shù)、智能建造工程場景中的物聯(lián)網(wǎng)
- 初中數(shù)學(xué)中心對稱圖形訓(xùn)練50題(含參考答案)
評論
0/150
提交評論