單片機(jī)第二章_第1頁
單片機(jī)第二章_第2頁
單片機(jī)第二章_第3頁
單片機(jī)第二章_第4頁
單片機(jī)第二章_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論