




已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章 51單片機(jī)的指令系統(tǒng),單片機(jī)原理、接口及應(yīng)用,內(nèi) 容 提 要,尋址方式 數(shù)據(jù)傳送與交換指令 算術(shù)運(yùn)算、邏輯運(yùn)算指令 控制轉(zhuǎn)移指令 位操作指令,計(jì)算機(jī)通過執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識(shí)別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。 MCS-51單片機(jī)匯編語(yǔ)言指令格式: 操作符 目的操作數(shù),源操作數(shù),操作符指明該指令完成什么操作; 操作數(shù)是指明該指令的操作對(duì)象。 目的操作數(shù)是存放結(jié)果的。 指令中操作數(shù)提供的方式稱為尋址方式。,指令中的常用符號(hào) Rn: n=(07),表示當(dāng)前工作寄存器R0R7中的一個(gè) Ri: i=(0、1),代表R0和R1寄存器中的一個(gè),用作間接尋址寄存器 dir : 8 位直接字節(jié)地址(片內(nèi) RAM 和 SFR ) #data: 8位立即數(shù),即8位常數(shù)??梢詾?進(jìn)制(B)、10進(jìn)制、 16進(jìn)制(H)、 字符( ) #data16: 表示16位立即數(shù),即16位常數(shù),取值范圍為#0000H#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址 rel : 相對(duì)偏移量(為一字節(jié)補(bǔ)碼)用于相對(duì)轉(zhuǎn)移指令中 bit :位地址,在位地址空間中。 $: 表示當(dāng)前指令的地址。,2.1 尋址方式,1、立即尋址 指令中直接給出操作數(shù)的尋址方式。在51系列單片機(jī)的指令系統(tǒng)中,立即數(shù)用一個(gè)前面加 “#“號(hào)的8位數(shù)(#data,如#30H)或16位數(shù)(#data16,如#2052H)表示。立即尋址中的數(shù),稱為立即數(shù)。 例如指令:MOV A,#30H,2、直接尋址 操作數(shù)的地址直接出現(xiàn)在指令中。 尋址對(duì)象: 內(nèi)部數(shù)據(jù)存貯器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可以 直接使用寄存器名。,例:MOV A,40H ; A=56H 機(jī)器碼 E540,MOV P0,#45H ;45HP0, P0為直接尋址的 SFR,其地址為 80H, 機(jī)器碼為758045,MOV 40H,41H ; 機(jī)器碼為854140 內(nèi)部RAM (41H)(40H) (40H)=(41H)=78H,3、寄存器尋址 操作數(shù)存放在寄存器中。 尋址對(duì)象:A,B,DPTR,R0R7 。 B 僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。 A 可以寄存器尋址又可以直接尋址,直接尋址時(shí)寫作ACC 例如:MOV A,R0 ;R0A,A、R0均為寄 存器尋址,機(jī)器碼E8 MUL AB ;A*BBA,A、B為寄 存器尋址,機(jī)器碼A4,MOV B,R0 ;R0B,R0為寄存器尋 址,B為直接尋址 機(jī)器碼 88F0,其中 F0為B的 字節(jié)地址(見表1-2) PUSH ACC ;A的內(nèi)容壓入堆棧 機(jī)器碼C0E0,4、寄存器間址 操作數(shù)存放在以寄存器內(nèi)容為地址的單元中。 例如: MOV R0,#20H MOV R0,A ;A(20H) 地址的內(nèi)部RAM MOVX A,R1 ;外部RAM(地址為P2 R1 ) 的 內(nèi)容A MOVX DPTR,A ;A以DPTR內(nèi)容為地址的 外部RAM,5、變址尋址 以DPTR或PC寄存器內(nèi)容為基地址,和A的內(nèi)容為相加形成操作數(shù)的地址。其中累加器A內(nèi)容是可變的。 例如: MOVC A, A+DPTR 6、相對(duì)尋址 相對(duì)尋址是將程序計(jì)數(shù)器PC的當(dāng)前值與指令第二字節(jié)給出的偏移量相加,從而形成轉(zhuǎn)移的目標(biāo)地址。 例如:JZ 61H,7、位尋址 對(duì)片內(nèi)RAM中20H2FH中的128個(gè)位地址及SFR中的可位尋址的位地址尋址。 例如: MOV C,20H;20H位的內(nèi)容送CY標(biāo)志 位,C稱為位累加器。 MOV A,20H ;字節(jié)尋址,將內(nèi)部 RAM中20H單元中的 內(nèi)容送給累加器A。 以上兩條指令均為尋址,究竟是位尋址還是字節(jié)尋址,根據(jù)兩操作數(shù)類型一致的原則,由另一個(gè)操作數(shù)決定。,dir,Ri,Rn,#data,A,MOV A ,Rn #data dir Ri,MOV dir ,A Rn Ri #data dir,MOV Rn ,MOV Ri,A dir #data,1、內(nèi)部RAM、SFR之間的傳送MOV指令,A dir #data,2.2 數(shù)據(jù)傳送與交換指令,2.2.1 傳送類指令,例 R1=20H,(20H)=55H, 指令MOV A,R1執(zhí)行后,A=55H。 例 (40H)=30H,指令 MOV R7,40H 執(zhí)行后,R7=30H。 例 MOV R7,40H 執(zhí)行后,R7=40H。,例 判斷下列指令的正誤: MOV 29H,R7 MOV 25H,P1 MOV 56H,#70H MOV 34H,28H MOV R3,R7 MOV R3,R7 MOV R3,#D2H MOV #34H,28H MOV A,#280H MOV P3,P1,編程將R3的內(nèi)容送R1。 MOV A,R3 MOV R1,A, , ,A,外部數(shù)據(jù) 存儲(chǔ)器,程序 存儲(chǔ)器,Ri , A DPTR , A A , Ri A , DPTR,MOVX,MOVC,A , A+PC A , A+DPTR,2、外部存儲(chǔ)器和A累加器之間的傳送,MOVX,MOVC,MOVX指令舉例 例: 實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送 (2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。下列為非法指令: MOVX A,2000H MOVX 2100H,2000H ,使用P2口和8位寄存器Ri間址: MOV P2,#20H ;高位地址 MOV R0,#00 ;低位地址 MOVX A,R0 ;讀片外RAM MOV P2,#21H ;改變高位地址 MOVX R0,A ;寫片外RAM,查表指令MOVC 注:只能從程序存儲(chǔ)器讀取數(shù)據(jù)到A累加器。 只能使用變址間接尋址方式 多用于查常數(shù)表程序,直接求取常數(shù)表中的函數(shù)值,1)DPTR為基址寄存器 MOVC A,A+DPTR ;A(A+DPTR) 查表范圍為 64KB 程序存儲(chǔ)器任意空間。,2)PC為基址寄存器 MOVC A,A+PC ;A (A+PC) 常數(shù)表只能在查表指令后 256B 范圍內(nèi)。,例 查表法求 Y=X2。設(shè) X(0X15)在片內(nèi) RAM 20H單元,要求將查表求 Y,存入片內(nèi) RAM 21H單元,1)用DPTR作基址寄存器 ORG 0100H SQU: MOV DPTR,#TAB ;確定表首地址 MOV A,20H ;取 X MOVC A,A+DPTR ;查表求 Y=X2 MOV 21H,A ;保存Y RET ;子程序結(jié)束 ;其它程序段,ORG 0200H ;常數(shù)表格首地址 TAB: DB 00,01,04,09,225 ;平方表,2)用PC作基址寄存器 指令地址 源程序 ORG 0100H ;程序起始地址 0100H SQU: MOV A,20H ;取X 0102H ADD A,#3 ;修正偏移量 0104H MOVC A,A+PC ;查表求Y=X2 0105H MOV 21H,A ;存結(jié)果 0107H RET ;子程序結(jié)束 0108H TAB: DB 00,01,04 ;平方表 010BH DB 09,225,思考題 當(dāng)0X255時(shí),如何用查表法編程求Y=X2,3.堆棧操作指令,例:設(shè) A=02,B=56H,執(zhí)行下列指令序列后,SP = ?A = ? ,B = ?,SBR:MOV SP,#30H PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A RET,;設(shè)棧底,;保護(hù)現(xiàn)場(chǎng),;恢復(fù)現(xiàn)場(chǎng),入棧指令:PUSH dir ;SPSP+1,(SP) (dir ) 出棧指令:POP dir ;(dir )(SP),SPSP-1, SP 02 , SP 56 02 , 56 SP 02 , 56 02 SP , SP ,堆棧操作示意:,2.2.2 交換指令 實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送,1. 字節(jié)交換指令 XCH A,Rn ;ARn XCH A,Ri ;A(Ri) XCH A,n ;A (n),習(xí)題 將片內(nèi)RAM 60H單元與 61H單元的數(shù)據(jù)交換,例 設(shè)A= 29H,(2AH ) 38H 執(zhí)行指令 XCH A,2AH 后, A= ? ,(2AH)= ?,38H,29H,XCH 60H,61H 對(duì)嗎?,2. 半字節(jié)交換指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47A03,例3-4-3:將片內(nèi) RAM 2AH和 2BH單元中的 ASCII碼轉(zhuǎn)換成壓縮式 BCD碼存入 20H單元,數(shù)字 09的ASCII碼30H39H,85H,壓縮的BCD碼和非壓縮的BCD碼見圖 如 1823壓縮的BCD碼為1823H 非壓縮的BCD碼為01080203H,A,A,08,例 將片內(nèi)RAM 2AH和 2BH單元中的ASCII碼轉(zhuǎn)換成壓縮式BCD碼存入 20H單元,MOV A,#00H ;A=00 MOV R0,#2AH MOV R1,#2BH XCHD A,R0 SWAP A XCHD A,R1 XCH A,20H,85H,R1,R0,習(xí)題:交換片內(nèi)RAM 40H單元和 41H單元的低半字節(jié),0,0,;低4位交換A=08,; A=80H,; 低4位交換,;(20H)=85H,3 8,0 0,A,3 5,8 0,8 5,R1,R0,3 0,3 0,ADD ADDC SUBB ANL ORL XRL,A ,Rn, Ri #data dir,加 進(jìn)位加 借位減 與 或 異或,1.以A為目的操作數(shù)的算術(shù)、邏輯運(yùn)算指令(24條),以dir為目的操作數(shù)邏輯運(yùn)算指令(6條),與 ANL 或 ORL 異或 XRL,2.3算術(shù)運(yùn)算和邏輯運(yùn)算指令,算術(shù)類指令的操作意義非常明確,不一一贅述, 注意減指令只有帶借位減,因此在多字節(jié)減法中, 最低字節(jié)作減法時(shí),注意先清CY。 邏輯運(yùn)算是按位進(jìn)行的,兩數(shù)運(yùn)算的運(yùn)算法則是: 與:有“0”則“0”; 或:有“1”則“1” 異或:同為“0” , 異為“1”; 與“0”異或值不變:與“1”異或值變反。 邏輯指令常用于對(duì)數(shù)據(jù)位進(jìn)行加工。,例:A=0FH, 執(zhí)行XRL A,#86H 后 A06HH,例:A=0FH, 執(zhí)行ORL A,#86H 后 A8FH,例:A=0FH, 執(zhí)行XRL A,#86H 后 A89H,INC,減 1 指令:,DEC,加 1 指令:,提問:沒有DEC DPTR指令,怎么解決DPTR的減 1?,2.加1、減1指令,3. 十進(jìn)制調(diào)整指令 計(jì)算機(jī)完成二進(jìn)制加法其和也為二進(jìn)制,如果是十進(jìn)制相加(即BCD碼相加)想得到十進(jìn)制的結(jié)果,就必須進(jìn)行十進(jìn)制調(diào)整(即BCD 碼調(diào)整)。 調(diào)整指令: DA A ;將A中二進(jìn)制相加和調(diào)整成BCD碼 調(diào)整方法:和低4位大于9或有半進(jìn)位則低4位加6; 和的高4位大于9或有進(jìn)位,則高4位加6。 指令根據(jù)相加和及標(biāo)志自行進(jìn)行判斷,因此該指令應(yīng)緊跟在加指令之后,至少在加指令和該指令之間不能有影響標(biāo)志的指令。 DA A指令只對(duì)一個(gè)字節(jié)和調(diào)整,如為多字節(jié)相加必須進(jìn)行多次調(diào)整。此指令不能對(duì)減法結(jié)果進(jìn)行調(diào)整。,例 完成56+17的編程。 MOV A,#56H ;A存放BCD碼56H MOV B,#17H ;B存放BCD碼17H ADD A, B ;A=6dH DA A ;A=73H SJMP $,指令對(duì)標(biāo)志位的影響有如下規(guī)律: 1) 凡是對(duì)A 操作指令(包括傳送指令)都將A中1個(gè)的奇偶反映到PSW的P標(biāo)志位上。即A中奇數(shù)個(gè)“1”,P=1;偶數(shù)個(gè)“1”,P=0。 2) 傳送指令、加 1、減 1 指令、邏輯運(yùn)算指令不影響Cy、 OV、AC 標(biāo)志位。 3) 加減運(yùn)算指令影響標(biāo)志位,乘除指令使Cy=0,當(dāng)乘積大于255,或除數(shù)為0時(shí),OV置1。 4) 對(duì)進(jìn)位位Cy(指令中用C表示)進(jìn)行操作的指令和大環(huán)移指令,顯然會(huì)影響Cy。 具體指令對(duì)標(biāo)志位的影響可參閱附錄A。 標(biāo)志位的狀態(tài)是控制轉(zhuǎn)移指令的條件,因此指令對(duì)標(biāo)志位的影響應(yīng)該記住。,例:A= 9AH,R2= E3H,PSW= 0,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= PSW= ?,1001 1010 1110 0011 + 0 1 0111 1101,7DH 1 1 0 0,10000100 = 84H,CY,CY,RR A,RL A,RLC A,RRC A,4.移位指令(僅對(duì) A ),10010110,00101101,A,A,設(shè),01001011,A,1,CY,11001011,A,0,00101101,A,1,CY,CY,2.4 控制轉(zhuǎn)移指令,這一類指令的功能是改變指令的執(zhí)行順序,轉(zhuǎn)到指令指示的新的PC地址執(zhí)行。 MCS-51單片機(jī)的控制轉(zhuǎn)移指令有以下類型: 無(wú)條件轉(zhuǎn)移:無(wú)需判斷,執(zhí)行該指令就轉(zhuǎn)移到目的地址。 條件轉(zhuǎn)移:需判斷標(biāo)志位是否滿足條件,滿足條件轉(zhuǎn)移到目的地址,否則順序執(zhí)行。 絕對(duì)轉(zhuǎn)移:轉(zhuǎn)移的目的地址用絕對(duì)地址指示,通常為無(wú)條件轉(zhuǎn)移。 相對(duì)轉(zhuǎn)移:轉(zhuǎn)移的目的地址用相對(duì)于當(dāng)前PC的偏差(偏移量)指示,通常為條件轉(zhuǎn)移。 長(zhǎng)轉(zhuǎn)移或長(zhǎng)調(diào)用:目的地址距當(dāng)前PC 64KB地址范圍內(nèi)。 短轉(zhuǎn)移或短調(diào)用:目的地址距當(dāng)前PC 2KB地址范圍。,1.長(zhǎng)調(diào)用 LCALL addrl16 ;addr16PC015 說明: (1)該指令功能是 保護(hù)斷點(diǎn),即當(dāng)前PC(本指令的下一條指令的首地 址)壓入堆棧。 子程序的入口地址 addr16 送PC,轉(zhuǎn)子程序執(zhí)行。 (2)本指令為64KB地址范圍內(nèi)的調(diào)子程序指令,子程序可在64KB地址空間的任一處。 (3)本指令的機(jī)器碼為三字節(jié) 12 addr16。,2.4.1 調(diào)用程序和返回類指令,2.短調(diào)用 ACALL addr11 ;addr11PC010 說明: (1)該指令的功能是 保護(hù)斷點(diǎn),即當(dāng)前PC壓入堆棧。 addrl11PC010,而PC1115保持原值不變。 (2)本指令為2KB地址范圍的調(diào)子程序指令,子程序入口距當(dāng)前PC不得超過2KB地址范圍。 (3)本指令的機(jī)器碼為二字節(jié),設(shè)addr11的各位是a10a9a8a2a1a0,則ACALL指令機(jī)器碼a10a9a810001a7a6a5a4a3a2a1a0,其中10001是ACALL指令的操作碼。,例 子程序調(diào)用指令A(yù)CALL在 程序存儲(chǔ)器中的首地址為0100H,子程序入口地址為0205H。試確定能否使用ACALL指令實(shí)現(xiàn)調(diào)用?如果能使用,確定該指令的機(jī)器碼。 解: 因?yàn)锳CALL指令首地址在0100H,而ACALL是 2字節(jié)指令,所以下一條指令的首地址在0102H。0102H和0250H在同一2KB地址范圍內(nèi),故可用ACALL調(diào)用。調(diào)用入口地址為0250H,ACALL指令的機(jī)器碼形式為:0101000101010000B=5150H。,3.子程序返回指令 RET ;從調(diào)用子程序返回。 功能:從棧頂彈出斷點(diǎn)到PC。 RETI ; 從中斷服務(wù)程序返回。 功能:從棧頂彈出斷點(diǎn)到PC,并恢復(fù)中斷優(yōu)先級(jí)狀態(tài)觸發(fā)器。,2.4.2 轉(zhuǎn)移指令 1. 無(wú)條件轉(zhuǎn)移指令 (1)短轉(zhuǎn)移 AJMP addr11 ;addr11PC010 說明: 轉(zhuǎn)移范圍:本指令為2KB地址范圍內(nèi)的轉(zhuǎn)移指令。對(duì)轉(zhuǎn)移目的地址的要求與ACALL指令對(duì)子程序入口地址的要求相同。 機(jī)器碼形式:本指令為2字節(jié)指令。設(shè)addr11的各位是a10a9a8a2a1a0,則指令的機(jī)器碼為a10a9a800001a7a6a5a4a3a2a1a0。,(2)長(zhǎng)轉(zhuǎn)移 LJMP addr16 ;addr16PC015 說明: 本指令為64KB程序存儲(chǔ)空間的全范圍轉(zhuǎn)移指令。轉(zhuǎn)移地址可為16位地址中的任意值。 本指令為3字節(jié)指令02 addr16。 (3)間接轉(zhuǎn)移 JMP A+DPTR ;A+DPTRPC 例 A=02H,DPTR=2000H,指令JMP A+DPTR執(zhí)行后,PC=2002H。也就是說,程序轉(zhuǎn)移到2002H地址單元去執(zhí)行。,例 現(xiàn)有一段程序如下: MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP PROC0 AJMP PROC1 AJMP PROC2 AJMP PROC2 根據(jù)JMP A+DPTR指令的操作可知, 當(dāng)A=00H時(shí),程序轉(zhuǎn)入到地址 PROC0 處執(zhí)行; 當(dāng)A=02H時(shí),轉(zhuǎn)到PROC1處執(zhí)行 可見這是一段多路轉(zhuǎn)移程序,進(jìn)入的路數(shù)由A確定。因?yàn)锳JMP指令是2字節(jié)指令,所以 A 必須為偶數(shù)。 以上均為絕對(duì)轉(zhuǎn)移指令,下面介紹相對(duì)轉(zhuǎn)移指令。,(4)無(wú)條件相對(duì)轉(zhuǎn)移 SJMP rel ;PC+relPC, 即As2relPC,機(jī)器碼為80 rel 說明: As為源地址(本指令的首地址),該指令為2字節(jié)指令,執(zhí)行本指令時(shí) 當(dāng)前PCAs+2,rel 為轉(zhuǎn)移的偏移量,轉(zhuǎn)移可以向前轉(zhuǎn)(目的地址小于源地址),也可以向后轉(zhuǎn)(目的地址大于源地址),因此偏移量rel 是 1 字節(jié)有符號(hào)數(shù),用補(bǔ)碼表示(128127),所以指令轉(zhuǎn)移范圍在離源地址As的126129字節(jié)之間。,2. 條件轉(zhuǎn)移指令 (1)累加器為零(非零)轉(zhuǎn)移 JZ rel ;A=0 則轉(zhuǎn)移(As+2+relPC) JNZ rel ;A0 程序順序執(zhí)行,機(jī)器碼為60rel,(2)減 1 不等于零轉(zhuǎn)移 DJNZ Rn , rel ;Rn-1 DJNZ dir , .rel 本指令有自動(dòng)減 1 功能。,(3)比較轉(zhuǎn)移指令 CJNE A,dir , rel CJNE A , #data , rel CJNE Rn , #data , rel CJNE Ri , #data , rel,說明: CJNE指令都是3字節(jié)指令,作減操作,不回送結(jié)果,影響CY標(biāo)志。 若第一操作數(shù)大于或等于第二 操作數(shù),則標(biāo)志CY=0。若第一操作數(shù)小于第二操作數(shù),則CY=1。 這幾條指令除實(shí)現(xiàn)兩操作數(shù)相等與否的判斷外,利用對(duì)CY的判斷,還可完成兩數(shù)大小的比較。,試說明以下一段程序運(yùn)行后A中的結(jié)果。 MOV 23H,#0AH CLR A LOOP:ADD A,23H DJNZ 23H,LOOP SJMP $ 根據(jù)程序可知 A=10+9+8+7+6+5+4+3+2+1=55=37H,例 編寫程序,要求讀P1 端口上的信息,若不為55H,則程序等待,直到P1端口為55H時(shí),程序才往下順序執(zhí)行。 程序: MOV A,#55H ;A55H CJNE A,P1,$ ;P155H,則程序循環(huán)執(zhí)行本指令 在實(shí)際編程中,轉(zhuǎn)移的目的地址不管是addr11、addr16、還是rel ,均是一符號(hào)地址表示的(如SJMP ABC,AJMP LOOP),轉(zhuǎn)移的類型是通過指令的操作符來決定的。,3.相對(duì)偏移量rel的求法 在相對(duì)轉(zhuǎn)移中,用偏移量 rel 和轉(zhuǎn)移指令所處的 地址值來計(jì)算轉(zhuǎn)移的目的地址,rel 是 1 字節(jié)補(bǔ)碼. 在填機(jī)器碼時(shí),需計(jì)算rel,下面介紹計(jì)算rel 的方法。 設(shè) 本條轉(zhuǎn)移指令的首地址為As源地址, 指令字節(jié)數(shù)為Bn2字節(jié)或3字節(jié), 要轉(zhuǎn)移的目標(biāo)地址為Ad目的地址, 當(dāng)前PC= As+ Bn 因?yàn)樵趫?zhí)行本條指令時(shí),PC 已經(jīng)指向了下一條指令,見下圖:,Ad 0100 MN: . As 0125 BF 05 rel CJNE R7,#06,MN 當(dāng)前PC 0128 當(dāng)前PC= As +Bn=0125+3=0128,Bn=3,于是 rel =Ad-當(dāng)前PC =Ad(As+Bn)= Ad - As - Bn 在上例中 rel=Ad當(dāng)前PC =0100H0128H=28H 28求補(bǔ)得D8H 于是 rel=(Ad-As-Bn)補(bǔ) 這就是在已知源地址,目的地址和指令的長(zhǎng)度時(shí),計(jì)算rel 大小的公式。,例 MCS-51單片機(jī)指令系統(tǒng)中,沒有停機(jī)指令,通常用短轉(zhuǎn)移指令SJMP $ ($為本條指令的首地址)來實(shí)現(xiàn)動(dòng)態(tài)停機(jī)的操作,試寫出這條指令中機(jī)器碼。 解: 查附錄A ,SJMP rel 的指令碼為80rel 據(jù)題意 本條指令的首地址 As=$,轉(zhuǎn)移的目的地址是本條指令地址,即Ad=$ 該指令為兩字節(jié),即Bn=2, rel= (Ad-As-Bn)補(bǔ)= ($2)補(bǔ)=(2)補(bǔ)=FEH 所以SJMP $指令的機(jī)器碼是80FEH。,例 計(jì)算下面程序中CJNE指令的偏移量。 LOOP:MOV A,P1 CJNE A,#55H,LOOP 解: 由于MOV A,P1是2字節(jié)指令,故CJNE指令的首 地址是LOOP+2。又因?yàn)镃JNE是3字節(jié)指令,于是 有:Ad=LOOP ,As=LOOP+2, Bn=3 rel=LOOP-(LOOP+2)-3補(bǔ)=-5補(bǔ)=FBH 所以CJNE A,#55H,LOOP的指令碼為B455FBH。 2.4.3 空操作指令 NOP 機(jī)器碼 00 該指令經(jīng)取指,譯碼后不進(jìn)行任何操作(空操作)而轉(zhuǎn)到下一條指令,常用于生產(chǎn)一個(gè)機(jī)器周期的延時(shí),或上機(jī)修改程序時(shí)作填充指令,以方便增減指令。,例 將A累加器的低四為取反四次、高四位不變。每變換一次,從P1輸出。 方法一 加 1 計(jì)數(shù): MOV R0,#0 ;計(jì)數(shù)初值送0 LL:XRL A,#0FH ;高4位不變,低四位取反 INC R0 ;次數(shù)加1 MOV P1,A ;從P1輸出 CJNE R0,#04,LL ;不滿四次循環(huán) RET 方法二 減1計(jì)數(shù): MOV R0,#04H ;計(jì)數(shù)初值送4 LL: XRL A,#0FH MOV P1,A DJNZ R0,LL ;次數(shù)減1不等于0循環(huán) RET,例 在內(nèi)部RAM的40H地址單元中,有1字節(jié)符號(hào)數(shù),編寫求其絕對(duì)值后放回原單元的程序。 程序如下: MOV A,40H ANL A,#80H JNZ NEG ;為負(fù)數(shù)轉(zhuǎn)移 SJMP $ ;為正數(shù),絕對(duì)值=原數(shù),不 改變?cè)瓎卧獌?nèi)容 NEG:MOV A,40H ;為負(fù)數(shù)求補(bǔ),得其絕對(duì)值 CPL A INC A MOV 40H,A SJMP $ 有符號(hào)數(shù)在計(jì)算機(jī)中以補(bǔ)碼形式存放,例如5,存放在內(nèi)部RAM中為FBH,求補(bǔ)后得5, 即|5|=5。,2.5 位操作指令,MCS-51單片機(jī)的特色之一就是具有豐富的位處理功能,以進(jìn)位標(biāo)志CY為位累加器C,使得開關(guān)量控制系統(tǒng)的設(shè)計(jì)變得十分方便。 在程序中位地址的表達(dá)有多種方式: 1)用直接位地址表示,如D4H。 2)用“”操作符號(hào)表示,如PSW.4,或D0H.4 3)用位名稱表示,如RS1。 4)用用戶自定義名表示。如ABC BIT D4H,其中ABC定義為D4H位的位名,BIT為位定義偽指令。以上各例均表示PSW.4的RS1位。 位操作類指令的對(duì)象是C和直接位地址,由于C是位累加器,所以位的邏輯運(yùn)算指令目的操作數(shù)只能是C,這
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一節(jié)景區(qū)活動(dòng)方案
- 六一葵花義賣活動(dòng)方案
- 六送入企活動(dòng)方案
- 蘭州雙十二活動(dòng)策劃方案
- 共享書籍活動(dòng)方案
- 共享菜園活動(dòng)方案
- 共同策劃活動(dòng)方案
- 推進(jìn)城中村更新改造實(shí)施方案
- 體育游戲在幼兒籃球教學(xué)中的創(chuàng)新應(yīng)用
- 綠色投入對(duì)污染企業(yè)財(cái)務(wù)績(jī)效的影響研究
- 第4章 頜位(雙語(yǔ))
- 課程綜述(數(shù)電)
- 塔吊負(fù)荷試驗(yàn)方案
- 購(gòu)買社區(qū)基本公共養(yǎng)老、青少年活動(dòng)服務(wù)實(shí)施方案
- 傷口和傷口敷料基礎(chǔ)知識(shí).ppt
- 安徽省中等職業(yè)學(xué)校學(xué)歷證明書辦理申請(qǐng)表
- 《慢性腎臟病》PPT課件.ppt
- 例析物理競(jìng)賽中純電阻電路的簡(jiǎn)化和等效變換
- 六年級(jí)下冊(cè)美術(shù)課件第13課《祖國(guó)美景知多少》浙美版
- 智能照明系統(tǒng)的外文文獻(xiàn)原稿和譯文.doc
- 氣象觀測(cè)場(chǎng)坪防雷設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論