天才教育網(wǎng)合作機(jī)構(gòu) > 設(shè)計(jì)軟件培訓(xùn)機(jī)構(gòu) > PS培訓(xùn)機(jī)構(gòu) >

東莞電工培訓(xùn)網(wǎng)

歡迎您!
朋友圈

400-850-8622

全國統(tǒng)一學(xué)習(xí)專線 9:00-21:00

位置:設(shè)計(jì)軟件培訓(xùn)資訊 > PS培訓(xùn)資訊 > 程序控制指令

程序控制指令

日期:2009-11-23 10:26:42     瀏覽:874    來源:東莞電工培訓(xùn)網(wǎng)

表 3-6 程序控制指令

1. 程序控制指令的一般性說明

* 程序控制指令又分“無條件轉(zhuǎn)移”、“調(diào)用與返回”和“條件轉(zhuǎn)移”等三類。

* 對(duì)程序控制指令應(yīng)掌握:轉(zhuǎn)移地址如何生成及其轉(zhuǎn)移范圍。

* 注意!MCS-51條件轉(zhuǎn)移指令的運(yùn)用與計(jì)算并無特別的聯(lián)系。

* 位值判別轉(zhuǎn)移使程序設(shè)計(jì)更為靈活,是MCS-51指令系統(tǒng)的特色。

* 應(yīng)特別注意變址轉(zhuǎn)移指令JMP與比較轉(zhuǎn)移指令CJNE的用法。

操作碼

操作數(shù)

條 件

轉(zhuǎn) 移 地 址

說 明

AJMP

addr11

無條件

(PC)←(PC)+2

(PC)0-10←addr11

短轉(zhuǎn)移,只改變PC的低11位,轉(zhuǎn)移范圍2K。

LJMP

addr16

無條件

(PC)←addr16

長轉(zhuǎn)移,轉(zhuǎn)移范圍全64K空間

SJMP

rel

無條件

(PC)←(PC)+2+rel

相對(duì)轉(zhuǎn)移 ,范圍-126~+129。

JMP

@A+DPTR

無條件

(PC)←(A)+(DPTR)

散轉(zhuǎn)指令,根據(jù)A值變址轉(zhuǎn)移

ACALL

addr11

無條件

(PC)←(PC)+ 2

(PC)L、(PC)H壓棧

(PC)0-10←addr11

短調(diào)用,只改變PC的低11位,轉(zhuǎn)移范圍2K。

LCALL

addr16

無條件

(PC)←(PC)+ 3

(PC)L、(PC)H壓棧

(PC)←addr16

長調(diào)用,調(diào)用范圍全64K空間

RET

隱含

((SP))

無條件

(PC)H←((SP))

(PC)L←((SP)-1))

子程序返回。

RETI

中斷返回。

JZ

rel

(A)= 0

(PC)←(PC)+2+rel

根據(jù)A的值條件轉(zhuǎn)移。

JNZ

(A)≠0

JC

rel

(C)= 0

(PC)←(PC)+2+rel

根據(jù)C的值條件轉(zhuǎn)移。

JNC

(C)= 1

JNB

bit, rel

(bit)=0

(PC)←(PC)+3+rel

位值判別轉(zhuǎn)移。(負(fù)邏輯)

JB

(bit)=1

位值判別轉(zhuǎn)移。(正邏輯)

JBC

(bit)=1

同 JB ,加(bit)清零功能。

DJNZ

Rn, rel

(Rn)-1≠0

(PC)←(PC)+2+rel

循環(huán)指令。循環(huán)計(jì)數(shù)器自動(dòng)

減1,歸0則退出循環(huán)。

dir, rel

(dir)-1≠0

(PC)←(PC)+3+rel

操作碼

操作數(shù)

條 件

轉(zhuǎn) 移 地 址

說 明

CJNE

A,dir,rel

A,#data,rel Rn,#data,rel

@Ri,#data,rel

(A)≠(direct)

(A)≠#data

(Rn)≠#data

((Ri))≠#data

(PC)←(PC)+3+rel

無符號(hào)數(shù)比較,兩數(shù)不等則轉(zhuǎn)移。若前一數(shù)小,C置1;若前一數(shù)不小于后一數(shù),C清零。

NOP

(PC)←(PC)+1

空操作,順序執(zhí)行。

2. AJMP、LJMP及SJMP的轉(zhuǎn)移范圍

指令

轉(zhuǎn)移地址

轉(zhuǎn)移范圍

說明

AJMP addr11

(PC)+2的高5位

+ addr11

(PC)+2所在的2k頁

2k頁:X000H~X7FFH

X800H~XFFFH

LJMP addr16

addr16

全64k空間

SJMP rel

(PC)+2+rel

(PC)-126~(PC)+129

Rel是8位有符號(hào)數(shù)

注:①表中的(PC)是轉(zhuǎn)移指令的地址。

②在實(shí)際使用時(shí),地址一般用標(biāo)號(hào)表示。

3. 變址轉(zhuǎn)移指令JMP的使用

* JMP的轉(zhuǎn)移地址 = 基址(DPTR)+變址偏移量(A)。

* 應(yīng)用例:按照(A)= 0,1,2,分別轉(zhuǎn)向三個(gè)不同的程序分支。

MOV DPTR,#GO ;設(shè)立散轉(zhuǎn)入口地址

MOV B A, ;

RL A ; (A) ←(A)+3

ADD A,B ;

JMP @A+DPTR

GO: LJMP GO1 ;指令地址為GO

LJMP GO2 ;指令地址為GO+3

LJMP GO3 ;指令地址為GO+6

* 問題一:上例中,如果由LJMP改用AJMP,程序應(yīng)如何變化?

* 問題二:上例中,如果A的值大于2會(huì)如何?怎樣解決?

4. 條件轉(zhuǎn)移指令的使用

* 因?yàn)锳與C的值并不一定由計(jì)算操作而改變,故JZ、JNZ、JC、JNC等指令的運(yùn)用與計(jì)算并無特別的聯(lián)系,

* 位值判別轉(zhuǎn)移指令使條件轉(zhuǎn)移的功能更豐富和靈活。例如:

* 如果(B)³0,轉(zhuǎn)向POS分支:JNB B.7,POS

* 如果計(jì)算溢出,轉(zhuǎn)向FL分支: JB OV,F(xiàn)L

* 如果C=1,將C清零并轉(zhuǎn)向NEG分支:JBC C,NEG

* 由P1.4檢測(cè)火災(zāi)傳感器,1有效。傳感器報(bào)警時(shí)轉(zhuǎn)向FIRE分支:JB P1.4,F(xiàn)IRE

 

5. 比較轉(zhuǎn)移指令CJNE及其使用

* 格式:CJNE 前數(shù),后數(shù),相對(duì)偏移量

轉(zhuǎn)移條件:前數(shù)≠后數(shù)

對(duì)C的影響:按無符號(hào)數(shù)減法。前數(shù)減后數(shù),有借位C = 1,否則C = 0。

* 應(yīng)用例:A、B中為無符號(hào)數(shù),比較兩數(shù),大數(shù)存A,小數(shù)存B。

CJNE A,B,0

JNC DONE

EXC A,B

DONE:……

 

* 應(yīng)用例:A、B中為有符號(hào)數(shù),比較兩數(shù),大數(shù)存A,小數(shù)存B。

有符號(hào)數(shù)比較的算法:

以A 與B 表示A與B的無符號(hào)值。

對(duì)于A >B 有,若A>0 A>B,A<0 A;

據(jù)此可以畫出右邊的流程圖,相應(yīng)的程序如下

CJNE A,B,NEQ

SJMP DONE

NEQ:JNC AGT

XCH A,B

AGT:JNB Acc.7,DONE

XCH A,B

DONE:……

如果本頁不是您要找的課程,您也可以百度查找一下: