




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)第二章第一頁,共五十三頁,編輯于2023年,星期日
單片機(jī)指令系統(tǒng)概述一、MCS-51指令分類
MCS-51單片機(jī)共有111條指令。
1.按指令所占的字節(jié)數(shù)分類
①單字節(jié)指令49條
②雙字節(jié)指令46條
③三字節(jié)指令16條每條指令的平均字節(jié)數(shù):第二頁,共五十三頁,編輯于2023年,星期日2.按指令執(zhí)行時(shí)間長(zhǎng)短分
①單周期指令65條
②雙周期指令44條
③四周期指令2條每條平均執(zhí)行時(shí)間:第三頁,共五十三頁,編輯于2023年,星期日2-1指令格式一.
匯編語言指令格式[標(biāo)號(hào):]操作碼操作數(shù)1,操作數(shù)2[;注釋]換行表示一條指令結(jié)束。
例:
LOOP:MOVA,#40H;取參數(shù)1.標(biāo)號(hào):指令的符號(hào)地址2.操作碼:指明指令功能。3.操作數(shù):指令操作對(duì)象數(shù)據(jù)、地址、寄存器名及約定符號(hào)。4.注釋行:說明指令在程序中的作用。
操作碼和操作數(shù)是指令主體。第四頁,共五十三頁,編輯于2023年,星期日MOV__move傳送XCH__exchange交換ANL__andlogic與邏輯運(yùn)算XRL__exclusiveor異或運(yùn)算MUL__Multiply乘法RR__rotateright右循環(huán)SJMP__shortjump短跳轉(zhuǎn)RET__return子程序返回第五頁,共五十三頁,編輯于2023年,星期日二.機(jī)器語言指令格式操作碼[操作數(shù)1][操作數(shù)2] 有單字節(jié)、雙字節(jié)和三字節(jié)指令。匯編語言指令中操作碼和操作數(shù)是指令主體,稱為指令可執(zhí)行部分,指令表中可查出對(duì)應(yīng)指令代碼。舉例:
匯編語言:
機(jī)器語言:
MOVA,R0 E8H MOVR6,#32H 7E32H MOV40H,#100 754064H111010000111111000110010011101010100000001100100第六頁,共五十三頁,編輯于2023年,星期日2-2指令尋址方式2-2-1 操作數(shù)類型位(b)─位尋址區(qū)中的一位二進(jìn)制數(shù)據(jù)字節(jié)(B)─8位二進(jìn)制數(shù)據(jù)字(W)─16位雙字節(jié)數(shù)據(jù)2-2-2尋址方式一.立即尋址方式指令中給出實(shí)際操作數(shù)據(jù)(立即數(shù)),一般用于為寄存器或存儲(chǔ)器賦常數(shù)初值。舉例:8位立即數(shù):MOVA,#40H ;A?40H16位立即數(shù):MOVDPTR,#2100H;DPTR?2100H第七頁,共五十三頁,編輯于2023年,星期日二.直接尋址方式指令操作數(shù)是存儲(chǔ)器單元地址,數(shù)據(jù)在存儲(chǔ)器單元中。 MOVA,40H ;A?(40H)
直接尋址方式對(duì)數(shù)據(jù)操作時(shí),地址是固定值,而地址所指定的單元內(nèi)容為變量形式。41H
78H40H
56H56H
例:設(shè)存儲(chǔ)器兩個(gè)單元的內(nèi)容如圖所示,執(zhí)行指令MOVA,40H后A=?思考題:直接尋址方式指令和立即尋址方式指令的形式有什么不同?第八頁,共五十三頁,編輯于2023年,星期日三.寄存器尋址方式
指令操作數(shù)為寄存器名,數(shù)據(jù)在寄存器中。
例:
MOVA,R0 ;A?R0
設(shè)指令執(zhí)行前A=20H,R0=40H,
執(zhí)行指令后,A=?,R0=?四.寄存器間接尋址方式 指令的操作數(shù)為寄存器名,寄存器中為數(shù)據(jù)地址。存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。例:
MOVA,@R0 ;A?(R0)
設(shè)指令執(zhí)行前A=20H,R0=40H,地址為40H存儲(chǔ)器單元內(nèi)容如圖所示。執(zhí)行指令后,A=?,R0=?,(40H)=?
41H 67H
40H34H34H40H34H40H40H01000000A00100000R001000000R0→第九頁,共五十三頁,編輯于2023年,星期日五.變址間接尋址方式
數(shù)據(jù)在存儲(chǔ)器中,指令給出的寄存器中為數(shù)據(jù)的基地址和偏移量。
數(shù)據(jù)地址=基地址+偏移量。例: MOVCA,@A+DPTR ;A?(A+DPTR)設(shè)指令執(zhí)行前A=09H,DPTR=2000H,存儲(chǔ)器單元內(nèi)容如圖所示。執(zhí)行指令后,A=? DPTR=?12H2000H六.位尋址方式指令給出位地址。一位數(shù)據(jù)在存儲(chǔ)器位尋址區(qū)。例:
MOVC,40H ;Cy?(位地址40H)設(shè)指令執(zhí)行前Cy=1,位地址40H存儲(chǔ)器單元如圖,執(zhí)行指令后,Cy=?28H0110001029H11010111位尋址區(qū)02008H 89H2009H12H第十頁,共五十三頁,編輯于2023年,星期日2-4 MCS-51指令系統(tǒng)分析指令功能分類: 數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。
2-4-1數(shù)據(jù)傳送指令 實(shí)現(xiàn)寄存器、存儲(chǔ)器之間的數(shù)據(jù)傳送。 一.內(nèi)部傳送指令: 片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。二.外部傳送指令: 片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。 三.交換指令: 片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。四.堆棧操作指令: 片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送。五.查表指令: 程序存儲(chǔ)器數(shù)據(jù)傳送。 第十一頁,共五十三頁,編輯于2023年,星期日(一)內(nèi)部傳送指令:實(shí)現(xiàn)片內(nèi)數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)傳送。
指令格式:
MOV
目的操作數(shù),源操作數(shù)
尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間址。
習(xí)題1:找出配對(duì)指令,實(shí)現(xiàn)反向傳送。指令機(jī)器碼:11101rrrE8~EF11100101nE5
n1110011iE6、E7
01110100d74d
10101rrrn 1010011in85n1n2 90d1d2MOVA,Rn;A←Rn,Rn=R0~R7MOVA,n;A←(n),
MOVA,@Ri;A←(Ri),Ri=R0、R1MOVA,#d;A←d,
MOVRn,n;Rn←(n) MOV@Ri,n;(Ri)←(n) MOVn1,n2;(n1)←(n2)
MOVDPTR,#d1d2;DPTR←d1d2第十二頁,共五十三頁,編輯于2023年,星期日例2-4-1:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H例:用兩種尋址方式實(shí)現(xiàn),將片內(nèi)RAM60H單元的數(shù)據(jù)傳送給累加器A。解1:MOVA,#60H?解2:MOVR0,#60HMOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30H解2:MOVR0,60H?MOVA,@R0解1:MOVA,60H第十三頁,共五十三頁,編輯于2023年,星期日說明:
只有指令表中的指令才有對(duì)應(yīng)指令代碼,計(jì)算機(jī)才
能執(zhí)行。編程時(shí),不能隨意“創(chuàng)造發(fā)明”指令。1.一條指令中不能同時(shí)出現(xiàn)兩個(gè)工作寄存器:
非法指令: MOVR1,R2
MOVR2,@R02.間址寄存器只能使用R0、R1。
非法指令:MOVA,@R23.SFR區(qū)只能直接尋址,不能用寄存器間接尋址。
非法指令:MOVR0,#80H
MOVA,@R04.指令表: B:指令字節(jié)數(shù),M:機(jī)器周期數(shù)第十四頁,共五十三頁,編輯于2023年,星期日(二)外部傳送指令
實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器和A累加器之間的數(shù)據(jù)傳送。
指令格式:MOVX
目的操作數(shù),源操作數(shù)尋址方式:片外數(shù)據(jù)存儲(chǔ)器用寄存器間址方式。1.DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間 MOVXA,@DPTR ;A←(DPTR)
MOVX@DPTR,A ;(DPTR)←A 2.Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間
MOVX A,@Ri ;A←(Ri)
MOVX @Ri,A ;(Ri)←A第十五頁,共五十三頁,編輯于2023年,星期日例2-4-2:實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送(2000H)?(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A習(xí)題3:將片外RAM0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的60H單元。 ;DPTR=2000H ;A=X ;DPTR=2100H ;(2100H)=X片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。下列為非法指令:
MOVXA,2000HMOVX2100H,2000H思考題:為什么對(duì)DPTR的數(shù)據(jù)傳送使用內(nèi)部傳送指令?第十六頁,共五十三頁,編輯于2023年,星期日(三)交換指令
實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。1.字節(jié)交換指令
XCHA,Rn;A?Rn
XCHA,@Ri;A?(Ri)
XCHA,n;A?(n)習(xí)題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。例:設(shè)A=29H,執(zhí)行指令XCHA,2AH后,A=? (2AH)=?38H29HXCH60H,61H←對(duì)嗎?29H第十七頁,共五十三頁,編輯于2023年,星期日2.半字節(jié)交換指令
XCHDA,@Ri;A0~3
?(Ri)0~3SWAPA ;A4~7
?A0~3例2-4-3:將片內(nèi)RAM2AH和2BH單元中的ASCII碼轉(zhuǎn)換成壓縮式BCD碼存入20H單元。交換片內(nèi)RAM40H單元和41H單元的低半字節(jié)。第十八頁,共五十三頁,編輯于2023年,星期日(四)堆棧操作指令
入棧指令:PUSHn;SP?SP+1,(SP)?(n)
出棧指令:POP n;(n)?(SP),SP?SP-1例:設(shè)A=02,B=56H,執(zhí)行下列指令后,SP=?,A=?,B=?
×
×
×
×
SP→ ×
×
×
×
SP→
02
× × ×SP→ 56H
02
×02HA00H02H00H×02H02HSBR:MOVSP,#30H;設(shè)棧底
PUSHA PUSHB MOVA,#0 MOV B,#01
…
POP B POPA × ×
SP→ 56H
02
× × ×SP→ 56H
02
×
×
× 56H
SP→
02
×
×
×
56H
02HSP→ ×第十九頁,共五十三頁,編輯于2023年,星期日(五)查表指令
實(shí)現(xiàn)從程序存儲(chǔ)器讀取數(shù)據(jù)到A累加器,只能使用變址間接尋址方式。
多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。1.DPTR為基址寄存器
MOVC A,@A+DPTR;A?(A+DPTR) 查表范圍為64KB程序存儲(chǔ)器任意空間,稱為遠(yuǎn)程查表指令。2.PC為基址寄存器
MOVC A,@A+PC ;A?(A+PC)
常數(shù)表只能在查表指令后256B范圍內(nèi)。第二十頁,共五十三頁,編輯于2023年,星期日例:查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。1)
ORG1000H SQU: MOVDPTR,#TAB ;確定表首地址(基地址)
MOVA,20H ;取X(偏移量)
MOVCA,@A+DPTR ;查表求Y=X2 MOV21H,A ;保存Y RET ;子程序結(jié)束
… ;其它程序段
ORG3000H ;常數(shù)表格首地址TAB: DB00,01,04,09,…,225 ;平方表第二十一頁,共五十三頁,編輯于2023年,星期日2)指令地址 源程序
ORG1000H ;程序起始地址 1000H SQU: MOVA,20H ;取X 1002H ADDA,#3 ;修正偏移量 1004H MOVCA,@A+PC
;查表求Y=X2 1005H MOV21H,A ;存結(jié)果 1007H RET ;子程序結(jié)束 1008H TAB: DB00,01,04 ;平方表 100BH DB09,…,225 思考題:當(dāng)0≤X≤255時(shí),如何用查表法編程求Y=X2。例:查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。第二十二頁,共五十三頁,編輯于2023年,星期日習(xí)題:找出指令錯(cuò)誤并改正:1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片內(nèi)RAM:(61H)←(60H) MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片內(nèi)RAM←片外RAM第二十三頁,共五十三頁,編輯于2023年,星期日2-4-2 算術(shù)運(yùn)算指令與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運(yùn)算指令會(huì)影響標(biāo)志位的狀態(tài),即CPU執(zhí)行算術(shù)運(yùn)算指令后,根據(jù)數(shù)據(jù)操作情況自動(dòng)設(shè)置標(biāo)志位的狀態(tài)。2-3狀態(tài)標(biāo)志
MCS-51的程序狀態(tài)字寄存器
PSW為標(biāo)志寄存器。其格式如下:第二十四頁,共五十三頁,編輯于2023年,星期日1.標(biāo)志位(自動(dòng)設(shè)置狀態(tài))1)Cy:進(jìn)位標(biāo)志位 保存運(yùn)算后最高位的進(jìn)位/借位狀態(tài),當(dāng)有進(jìn)位/借位,Cy=1,否則Cy=0。2)AC:輔助進(jìn)位標(biāo)志位 保存低半字節(jié)的進(jìn)位/借位狀態(tài),當(dāng)D3產(chǎn)生進(jìn)位/借位,AC=1,否則AC=0。用于十進(jìn)制調(diào)整。3)OV:溢出標(biāo)志位
OV=Cy7?Cy6,補(bǔ)碼運(yùn)算產(chǎn)生溢出OV=1,否則OV=0。4)P:奇偶標(biāo)志位 反映累加器A中數(shù)據(jù)的奇偶性。當(dāng)1的個(gè)數(shù)為奇數(shù),P=1,否則P=0。第二十五頁,共五十三頁,編輯于2023年,星期日2.用戶選擇位(編程設(shè)置狀態(tài))1)F0:用戶自定義標(biāo)志位。
2)RS1、RS0:
工作寄存器區(qū)選擇位。
復(fù)位時(shí),PSW=00HRS1RS0工作寄存器000區(qū)011區(qū)102區(qū)113區(qū)例:復(fù)位后,設(shè)置使用工作寄存器2區(qū),其余標(biāo)志位不變。解:
MOVPSW,#18H第二十六頁,共五十三頁,編輯于2023年,星期日2-4-2算術(shù)運(yùn)算指令
完成片內(nèi)RAM和A中數(shù)據(jù)的加減乘除運(yùn)算。
一.加減指令
1.加法指令
00111011
+00111011
0111011076H0011 1)不帶進(jìn)位加法:ADD
A,源操作數(shù)
ADDA,R2;A←A+R2,影響Cy、OV、AC、P例1:A=3BH,PSW=0,執(zhí)行指令A(yù)DDA,#3BH求:A=,Cy=,OV=,AC=,P=, PSW=?01000001=41H第二十七頁,共五十三頁,編輯于2023年,星期日
1001101011100011
+0101111101 2)帶進(jìn)位加法:ADDCA,源操作數(shù)
ADDCA,R2;A←A+R2+Cy,影響Cy、OV、AC、P7DH1100
例2:A=9AH,R2=E3H,PSW=0,執(zhí)行指令
ADDCA,R2
后求:
A=,Cy=,OV=,AC=,P=, PSW=?10000100=84H第二十八頁,共五十三頁,編輯于2023年,星期日帶進(jìn)位加法指令A(yù)DDC用于多字節(jié)運(yùn)算例:設(shè)雙字節(jié)數(shù)X存在片內(nèi)RAM41H、40H單元,Y存在42H、43H單元,編程求Z=X+Y,并存入片內(nèi)RAM單元44H、45H、46H。ADDS:MOVA,40H ADDA,42H MOV44H,A MOVA,41H ADDCA,43H MOV45H,A MOVA,#0 ADDCA,#0 MOV46H,A RET;取被加數(shù)低字節(jié);加上加數(shù)低字節(jié);保存和的低字節(jié);取被加數(shù)高字節(jié);加上加數(shù)高字節(jié);保存和的高字節(jié);求高字節(jié)進(jìn)位;子程序結(jié)束;低字節(jié)相加;高字節(jié)相加;計(jì)算高字節(jié)進(jìn)位;子程序結(jié)束第二十九頁,共五十三頁,編輯于2023年,星期日十進(jìn)制加法指令:
ADDA,源操作數(shù)
DAA帶進(jìn)位十進(jìn)制加法指令:
ADDCA,源操作數(shù)
DAA十進(jìn)制加1運(yùn)算:ADDA,#01DAA作業(yè):BCD碼加法編程。 設(shè)X、Y為4位壓縮BCD碼,求Z=X+Y。BCD調(diào)整指令:DA A;對(duì)A
中加法結(jié)果進(jìn)行調(diào)整第三十頁,共五十三頁,編輯于2023年,星期日2.減法指令
SUBBA,源操作數(shù) ;帶借位減法指令
SUBBA,R2 ;A←A-R2-Cy, ;影響Cy、OV、AC、P000000
習(xí)題:編程求雙字節(jié)減法。設(shè)X、Y存在片內(nèi)RAM60H起始單元,計(jì)算Z=X-Y。例:A=5AH,R2=5AH,Cy=0,執(zhí)行下列指令
SUBBA,R2求: A=,Cy=,OV=,P=,AC=?第三十一頁,共五十三頁,編輯于2023年,星期日3.增量、減量指令
INC
單操作數(shù) 如: INCR2 ;R2←R2+1
DEC
單操作數(shù)如:DECR2 ;R2←R2-1
INCDPTR ;DPTR←DPTR+1
不影響標(biāo)志位狀態(tài)。
注意:沒有指令DECDPTR 可用指令DECDPL 代替
企圖十進(jìn)制加1:INCA
DAA;非法十進(jìn)制加1:ADDA,#01;合法DAA
第三十二頁,共五十三頁,編輯于2023年,星期日4.乘除指令
MULAB ;BA←A×B,Cy←0, ;當(dāng)積高字節(jié)B=0,OV←0;B≠0,則OV←1
例:A=96(60H),B=192(C0H),執(zhí)行指令MULAB后, 求:A=,B=,Cy=,OV=,P=?
解:96×192=18432(4800H)00H48H010思考題:如何實(shí)現(xiàn)多字節(jié)數(shù)據(jù)的乘除運(yùn)算。
DIVAB ;A÷B,A←商,B←余數(shù),Cy←0, ;當(dāng)除數(shù)B=0,OV←1;B≠0,則OV←0
例:A=156(F6H),B=13(0DH),執(zhí)行指令DIVAB后求:A=,B=,Cy=,OV=,P=? 解:156÷13=18(12H),余數(shù)=12(0CH)。12H0CH000第三十三頁,共五十三頁,編輯于2023年,星期日
2-4-2 邏輯運(yùn)算指令一.單操作數(shù)指令(A累加器為操作數(shù)) 1.A清0指令:CLRA;A←0 2.A取反指令:CPLA;A←/A3.循環(huán)移位指令:1)8位循環(huán)指令:
RLA;A循環(huán)左移一位
RRA;A循環(huán)右移一位2)9位循環(huán)指令:
RLCA;帶Cy循環(huán)左移一位
RRCA;帶Cy循環(huán)右移一位第三十四頁,共五十三頁,編輯于2023年,星期日例2-4-7:設(shè)
A=11000101,Cy=0,分別執(zhí)行下列單條指令: CPLA 求:A=,Cy=
RLA
RLCA
001110100100010110100010101用9位循環(huán)指令實(shí)現(xiàn)多字節(jié)移位
例:編程將寄存器R6R5中的雙字節(jié)數(shù)X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0,設(shè)R6=55H,R5=AAH;R6=01010101,R5=10101010,Cy=0;R6=01010101,R5=01010100,Cy=1;R6=10101011,R5=01010100,Cy=0思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。第三十五頁,共五十三頁,編輯于2023年,星期日(二)雙操作數(shù)邏輯運(yùn)算指令(對(duì)位邏輯運(yùn)算):
ANL、ORL、XRL習(xí)題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?
習(xí)題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?例3-5-8
A=01××××××B,×表示隨機(jī)狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何?
XRLA,#0C0H ;將累加器A的內(nèi)容D7、D6取反
ORLA,#03H ;將累加器A的內(nèi)容D1、D0置1
ANLA,#0E7H ;將累加器A的內(nèi)容D4、D3清0
解:執(zhí)行上述指令后,A=10×00×11B。第三十六頁,共五十三頁,編輯于2023年,星期日
2-4-4布爾變量操作指令
對(duì)片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址b。一.位傳送
MOVC,b;Cy?(b)
MOVb,C;(b)?Cy例:將位地址20H的一位數(shù)傳送到位地址30H中:
MOVC,20H MOV30H,C二.位清0、置1、取反:CLR、SETB、CPL: CLRC ;Cy?0, CLR40H ;(位地址40H)?0第三十七頁,共五十三頁,編輯于2023年,星期日三.邏輯運(yùn)算:ANL、ORL:
ANLC,40H;C←C∧(40H)
ANLC,/40H;C←C∧/(40H)例:設(shè)Cy=1,(位地址40H)=1,執(zhí)行指令
ANLC,/40H后,
Cy=?,(位地址40H)=?位地址表示法:
位地址40H,位寄存器F0,字節(jié)加位ACC.00習(xí)題:設(shè)累加器A中數(shù)據(jù)為29H,Cy=0,執(zhí)行指令 ORLC,0E3H后,Cy=?1第三十八頁,共五十三頁,編輯于2023年,星期日2-4-5轉(zhuǎn)移指令
轉(zhuǎn)移指令通過改寫PC的當(dāng)前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉(zhuǎn)。
按轉(zhuǎn)移條件分類:1)無條件轉(zhuǎn)移: 執(zhí)行無條件轉(zhuǎn)移指令,程序無條件轉(zhuǎn)移到指定處。2)條件轉(zhuǎn)移: 指令中給出轉(zhuǎn)移條件,執(zhí)行指令時(shí),先測(cè)試條件,若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行程序。第三十九頁,共五十三頁,編輯于2023年,星期日按轉(zhuǎn)移方式分類:1)絕對(duì)轉(zhuǎn)移:指令給出轉(zhuǎn)移目的的絕對(duì)地址nn,執(zhí)行指令后,PC?nn。2)相對(duì)轉(zhuǎn)移:指令給出轉(zhuǎn)移目的與轉(zhuǎn)移指令的相對(duì)偏移量e,執(zhí)行指令后,PC?PC+e。例: 地址 源程序 1000H LJMP2000H 1003H …
…
2000H … ;轉(zhuǎn)移目的指令例: 地址 源程序 1000HSJMP02
…
1004H …;轉(zhuǎn)移目的指令第四十頁,共五十三頁,編輯于2023年,星期日
一.無條件轉(zhuǎn)移指令
1.長(zhǎng)轉(zhuǎn)移指令:
LJMP nn
;PC?nn
指令機(jī)器碼:02nnHnnL
指令轉(zhuǎn)移范圍:64KB
2.絕對(duì)轉(zhuǎn)移指令:
AJMP
pn ;PC?PC+2 ;PC10~0?pn10~0 ;PC15~11不變指令機(jī)器碼:pn10~800001,pn7~0
指令轉(zhuǎn)移范圍:2KB(祥見P65)轉(zhuǎn)移時(shí)要求轉(zhuǎn)移前后保持PC15~11不變。第四十一頁,共五十三頁,編輯于2023年,星期日相對(duì)偏移量e的計(jì)算式:
e=目的指令地址-(轉(zhuǎn)移指令地址+指令字節(jié)數(shù)) =目的地址-PC當(dāng)前值
3.短轉(zhuǎn)移指令:
SJMP
e ;PC?PC+2,PC?PC+e指令機(jī)器碼:80H,e相對(duì)偏移量e為8位補(bǔ)碼。
指令轉(zhuǎn)移范圍:向前128~向后127字節(jié)編程時(shí),用標(biāo)號(hào)代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作數(shù)交給匯編程序計(jì)算。
LJMPNEXT;也可AJMPNEXT;或SJMPNEXT
…
NEXT:NOP第四十二頁,共五十三頁,編輯于2023年,星期日例1:計(jì)算轉(zhuǎn)移指令的相對(duì)偏移量e,并判斷是否超出轉(zhuǎn)移范圍。 例2:求原地踏步指令的指令代碼
HERE:SJMPHERE
求出指令代碼為:80FEH 相對(duì)偏移量=2150H-(2130H+2)=001EH, 只取低8位:e=1EH 指令機(jī)器碼:801EH 指令地址 源程序 2130H SJMPNEXT
…
2150H NEXT:MOVA,R2習(xí)題:計(jì)算程序中轉(zhuǎn)移指令的相對(duì)偏移量e,并判斷是否超出轉(zhuǎn)移范圍。
地址 源程序
2130H LOOP: …
…
21B0H SJMPLOOP第四十三頁,共五十三頁,編輯于2023年,星期日4.間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令---散轉(zhuǎn)) JMP@A+DPTR.;PC?A+DPTR指令機(jī)器碼73H,指令轉(zhuǎn)移范圍64KB。KEY: MOVDPTR,#KTABMOVA,40HADDA,A
JMP@A+DPTRKTAB: AJMPFUNC0
AJMPFUNC1
…FUNC0:…
FUNC1:…
應(yīng)用:處理功能鍵。要求不同功能鍵執(zhí)行不同程序段。設(shè)每個(gè)功能鍵對(duì)應(yīng)一個(gè)鍵值X(0≤X≤FH)。
設(shè)X已存入片內(nèi)RAM的40H單元中。若X=0,則執(zhí)行程序段FUNC0若X=1,則執(zhí)行程序段FUNC1
…。第四十四頁,共五十三頁,編輯于2023年,星期日二.條件轉(zhuǎn)移指令1.判零轉(zhuǎn)移指令 JZe ;PC←PC+2, ;若A=00H,PC←PC+e(轉(zhuǎn)移), ;若A≠00H,PC不變(不轉(zhuǎn)移)條件轉(zhuǎn)移指令形成程序的分支,賦予計(jì)算機(jī)判斷決策能力
轉(zhuǎn)移條件:1)標(biāo)志位的狀態(tài)2)位地址中的狀態(tài)
JNZe ;PC←PC+2,若A≠00H, ;PC←PC+e(轉(zhuǎn)移) ;若A=00H,PC不變(不轉(zhuǎn)移)2.判Cy轉(zhuǎn)移指令 JCe;Cy=1則轉(zhuǎn)移,Cy=0不轉(zhuǎn)移
JNCe ;Cy=0則轉(zhuǎn)移,Cy=1不轉(zhuǎn)移第四十五頁,共五十三頁,編輯于2023年,星期日3.判位轉(zhuǎn)移指令
JBb,e ;(b)=1轉(zhuǎn)移,否則不轉(zhuǎn)移 JNBb,e ;(b)=0轉(zhuǎn)移,否則不轉(zhuǎn)移4.判位清0轉(zhuǎn)移指令: JBCb,e;(b)=1轉(zhuǎn)移,且(b)?0,否則不轉(zhuǎn)移5.比較不相等轉(zhuǎn)移指令:
CJNE
操作數(shù)1,操作數(shù)2,e
CJNEA,n,e;PC←PC+3 ;若A≠(n),則PC←PC+e ;且當(dāng)A>(n),Cy=0,當(dāng)A<(n),Cy=1; ;若A=(n),PC不變,且Cy=0。
相當(dāng)于兩個(gè)操作數(shù)相減,僅影響標(biāo)志狀態(tài),不保存結(jié)果第四十六頁,共五十三頁,編輯于2023年,星期日
6.循環(huán)轉(zhuǎn)移指令:
DJNZ操作數(shù),e
DJNZR2,e;PC←PC+2,R2←R2-1 ;若R2≠0,PC←PC+e, ;若R2=0,順序執(zhí)行。
例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次
MOVR2,#100 ;設(shè)循環(huán)計(jì)數(shù)器初值LOOP: … ;多次循環(huán)程序段
DJNZR2,LOOP ;循環(huán)控制 … ;循環(huán)結(jié)束
思考:當(dāng)循環(huán)計(jì)數(shù)器初值為0,循環(huán)次數(shù)是多少?第四十七頁,共五十三頁,編輯于2023年,星期日2-4-6子程序定義:具有完整功能的程序片段,供主程序調(diào)用。
功能:
供主程序在需要時(shí)調(diào)用。子程序可以在程序中反復(fù)多次使用,以簡(jiǎ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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)土地征收合同范例
- 傳媒臨時(shí)合同范例
- 管道廢除施工方案
- 農(nóng)村小院征用合同范例
- 倉(cāng)庫(kù)平房出售合同范例
- 鍍鋅鋼管埋地施工方案
- 公司承包土地合同范例
- 農(nóng)機(jī)車合同范例
- 倉(cāng)儲(chǔ)廠房建設(shè)合同范本
- 利用合同范例
- 廣東省廣州市越秀區(qū)2022-2023學(xué)年六年級(jí)下學(xué)期期末數(shù)學(xué)試卷
- 《成功之路+進(jìn)步篇+1》第1課課件
- (2024年)特種設(shè)備安全法律法規(guī)培訓(xùn)課件
- 關(guān)愛老人婚姻法知識(shí)講座
- (高清版)TDT 1013-2013 土地整治項(xiàng)目驗(yàn)收規(guī)程
- 內(nèi)蒙古機(jī)電職業(yè)技術(shù)學(xué)院?jiǎn)为?dú)招生(機(jī)電類)專業(yè)知識(shí)考試題庫(kù)(必練500題)
- 2022年4月自考00150金融理論與實(shí)務(wù)試題及答案含解析
- 早期矯正知識(shí)培訓(xùn)課件模板
- 化工建設(shè)行業(yè)分析
- 教師事業(yè)單位獎(jiǎng)勵(lì)審批表主要事跡六篇
- 私樁共享商業(yè)計(jì)劃書
評(píng)論
0/150
提交評(píng)論