計算機指令系統(tǒng)課件_第1頁
計算機指令系統(tǒng)課件_第2頁
計算機指令系統(tǒng)課件_第3頁
計算機指令系統(tǒng)課件_第4頁
計算機指令系統(tǒng)課件_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2.計算機指令系統(tǒng)

.

指令格式

匯編語言指令格式

[標號:]操作碼操作數(shù)1,操作數(shù)2[;注釋]

換行表示一條指令結(jié)束。

例:LOOP:MOVA,#40H;取參數(shù)

1.標號:指令的符號地址MOV_move傳送

2.操作碼:指明指令功能。XCH二exchange交換

_andlogic與邏輯運算

3.操作數(shù):指令操作對象_exclusiveor異或運算

數(shù)據(jù)、地址、寄存器名及約定施gultiply乘法

4.注釋行:說明指令在程序麴哪FHright右循環(huán)

jump短跳轉(zhuǎn)

oRETreturn子程序返回

操作碼和操作數(shù)是指令主體。一

偽指令只對匯編程序提供必要的控制信息,

?從不產(chǎn)生任何指令代碼。

■(1)ORG:起始地址偽指令。

——定義程序、數(shù)據(jù)匯編存放時的起始地址。

■(2)EQU:標號或變量賦值偽指令。

——用來將表達式的值賦給EQU左面的標號或變量。

■(3)END:匯編語言程序結(jié)束偽指令。

——一般用在程序的末尾,表示程序結(jié)束。

■(4)DBnum定義字節(jié)單元偽指令

■(5)DWnum定義字單元偽指令

機器語言指令格式

操作碼[操作數(shù)1][操作數(shù)2]

有單字節(jié)、雙字節(jié)和三字節(jié)指令。

匯編語言指令中操作碼和操作數(shù)是指令主體,稱為

指令可執(zhí)行部分,指令表中可查出對應(yīng)指令代碼。

舉例:

匯編語言:機器語言:

MOVA,ROE8H-inoiooQ

MOVR6,#32H7E32H

onioioi

MOV40H,#100H754064H00H0010

01000000

01100100

指令尋址方式

操作數(shù)類型

位⑹一位尋址區(qū)中的一位二進制數(shù)據(jù)

字節(jié)(B)—8位二進制數(shù)據(jù)

字(W)—16位雙字節(jié)數(shù)據(jù)

尋址方式

一.立即尋址方式

指令中給出實際操作數(shù)據(jù)(立即數(shù)),一般用于為

寄存器或存儲器賦常數(shù)初值。

舉例:

8位立即數(shù):MOVA,#40H;A-40H

16位立即數(shù):MOVDPTR,#2100H;DPTR―2100H

二.直接尋址方式

指令操作數(shù)是存儲器單元地址,數(shù)據(jù)在存儲器單元中。

MOVA,40H;A—(40H)

一例:設(shè)存儲器兩個單元的內(nèi)容如圖所

小,56H_______

執(zhí)行指令MOVA,40H后A=?41H78H

直接尋址方式對數(shù)據(jù)操作時,地址是

固定值,而地址所指定的單元內(nèi)容為

變量形式。

思考題:直接尋址方式指令和立即尋址方式指令的形

式有什么不同?

三.寄存器尋址方式

01000000y01000000

ARO

指令操作數(shù)為寄存器名,數(shù)據(jù)在寄存器中。

例:MOVA,RO;A<-RO

設(shè)指令執(zhí)行前A=20H,R0=40H,

執(zhí)行指令后,A=40H,RO=40H

四.寄存器間接尋址方式

指令的操作數(shù)為寄存器名,寄存器中為數(shù)據(jù)地址。

存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。

例:MOVA,@R0;A—(RO)

設(shè)指令執(zhí)行前A=20H,R0=40H,地址為40H存儲器

單元內(nèi)容如圖所示。執(zhí)行指令后,

A=34H,R0=40H(40H)=34H..

41H67H

R0―40H34H

五.變址間接尋址方式

數(shù)據(jù)在存儲器中,指令給出的寄存器中為數(shù)據(jù)

的基地址和偏移量。

數(shù)據(jù)地址二基地址+偏移量。

MOVCA,@A+DPTR;A<-(A+DPTR)

例:設(shè)指令執(zhí)行前A=09H,DPTR=2000H,存儲器單元內(nèi)

容如圖所示。

執(zhí)行指令后,A=?12H

DPTR二?2Q00H

2008H89H

2009H12H

六.位尋址方式

指令給出位地址。一位數(shù)據(jù)在存儲器位尋址區(qū)。

例:MOVC,40H;Cy一(位地址40H)

設(shè)指令執(zhí)行前Cy=L位地址40H存儲器單元如

圖,執(zhí)彳丁指令后,Cy=?o

I位尋址區(qū)|

28H0H00010

29H—11010111

MCS-51指令系統(tǒng)分析

指令功能分類:

數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。

2.4.1數(shù)據(jù)傳送指令

實現(xiàn)寄存器、存儲器之間的數(shù)據(jù)傳送。

一.內(nèi)部傳送指令:片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。

二.外部傳送指令:片外數(shù)據(jù)存儲器數(shù)據(jù)傳送。

三.交換指令:片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。

四.堆棧操作指令:片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。

五.查表指令:程序存儲器數(shù)據(jù)傳送。

(一)內(nèi)部傳送指令:實現(xiàn)片內(nèi)數(shù)據(jù)存儲器中數(shù)據(jù)傳送。

指令格式:MOV目的操作數(shù),源操作數(shù)

尋址方式:立即尋址、直接尋址、寄存器尋址、寄存

器間址。

指令機器碼:

MOVA,Rn;A-Rn,Rn=R-RlllOlrrrE8?

07EF

MOVA,n;A-(n),11100101nE5n

MOVA,@Ri;A-(Ri),Ri=R0>R:IHOOlliE6、

MOVA,#d;A-d,E7

MOVRn,n;Rn-(n)01110100d74d

lOlOlrrrn

MOV@Ri,n;(Ri)-(n)lOlOOllin

MOVnl,n2;(nl)—(n2)85nln2

MOVDPTR,#dld2;DPTR-dld290dld2

例2.4.L順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。

MOVA,#30H;A=30H

MOV4FH,A;(4FH)=30H

;R0=20H

MOVRO,#20H

;(20H)=30H

MOV@R0,4FH;(21H)=30H

MOV21H,20H

習(xí)題2:用兩種尋址方式實現(xiàn),將片內(nèi)RAM60H單元的數(shù)

據(jù)傳送給累加器A。

地址內(nèi)容

MOVRO,60H???

解:MOVA,#60HMOVA,@R060H32H

???

解:MOVA,60HMOVRO,#60H32H58H

MOVA,@R0

說明:

1.一條指令中不能同時出現(xiàn)兩個工作寄存器:

非法指令:MOVRI,R2

MOVR2,@R0

2.間址寄存器只能使用RO、Rio

非法指令:MOVA,@R2

3.SFR區(qū)只能直接尋址,不能用寄存器間接尋址。

非法指令:MOVRO,#80H

MOVA,@R0

4.指令表:B:指令字節(jié)數(shù),M:機器周期數(shù)

只有指令表中的指令才有對應(yīng)指令代碼,計算機才

能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。

(二)外部傳送指令

實現(xiàn)片外數(shù)據(jù)存儲器和A累加器之間的數(shù)據(jù)傳送。

指令格式:MOVX目的操作數(shù),源操作數(shù)

尋址方式:片外數(shù)據(jù)存儲器用寄存器間址方式。

1.DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間

MOVXA,@DPTR;A-(DPTR)

MOVX@DPTR,A;(DPTR)-A

2.Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間

MOVXA,@Ri;A-(Ri)

MOVX@Ri,A;(Ri)-A

例3.4.2:

實現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送(2000H)-(2100H)。

MOVDPTR,#2000H;DPTR=2000H

MOVXA,@DPTR;A=X

MOVDPTR,#2100H;DPTR=2100H

MOVX@DPTR,A;(2100H)=X

片外RAM片外數(shù)據(jù)存儲器不能直接

地址內(nèi)容尋址。下列為非法指令:

DPTRf2000H______XMOVXA,2000H

???

MOVX2100H,2000H

21OOH

習(xí)題:為什么對DPTR的數(shù)據(jù)傳送使用內(nèi)部傳送指令?

將片外RAM0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的

60H單元。

(三)交換指令

實現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。片內(nèi)RAM

地址內(nèi)容

1.字節(jié)交換指令2BH35H

XCHA,Rn;A—Rn2AH29H

???

XCHA,@Ri;A—(Ri)

20H

XCHA,n;A—(n)

例:設(shè)A=29H,執(zhí)行指令XCHA,2AH后,A=38H

?(2AH)=29H

習(xí)題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。

XCH60H,61H一對嗎?

2.半字節(jié)交換指令

UHDA,啾1;Ao?3—(Ri)0?3

SWAPA;A4?7—A。?3

單字節(jié)BCD

壓縮式碼

BCD0000千位

千位百位

BCD碼的格式0000百位

十位個位0000十位

0000個位

例3-4-3:將片內(nèi)RAM2AH和2BH單元中的ASCII碼轉(zhuǎn)換

成壓縮式BCD碼存入20H單元。

片內(nèi)RAM

地址內(nèi)容

MOVA,#00000000000R12BH35H

R0一2AH38H

MOVRO,#2AH???

MOVRI,#2BH20H85H

XCHDA,@R0|ooinooo0000100008H

SWAPA1000000080H

XCHDA,@R100110101

XCHA,20H1000010185H

題:交換片內(nèi)RAM40H單元和41H單元的低半字節(jié)。

(四)堆棧操作指令

進棧操作只能以直接尋址方式來取得操作數(shù)

入棧指令:PUSHn;SP—SP+1,(SP)<-(n)

出棧指令:POPn;(n)—(SP),SP<-SP-1

例:設(shè)A=02,B=56H,執(zhí)行下列指令后,

SP=?,A=?,B=?

片內(nèi)RAM

ORG0000H

JMPSTART34H

ORG2000H33H

START:MOVA,#02H32H

MOVB,#56H31H

MOVSP,#30H

PUSHACC30H

PUSHB02H

MOVA,#0H

MOVB,#01HA

POPACC

IPOPB

END

(五)查表指令

實現(xiàn)從程序存儲器讀取數(shù)據(jù)到A累加器,只能使用變

址間接尋址方式。

多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。

1.DPTR為基址寄存器

MOVCA,@A+DPTR;A<-(A+DPTR)

查表范圍為64KB程序存儲器任意空間,稱為遠程

查表指令。

2.PC為基址寄存器

MOVCA,@A+PC;A—(A+PC)

常數(shù)表只能在查表指令后256B范圍內(nèi)。

例:查表法求Y=X2。設(shè)X(0WXW15)在片內(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;平方表

例:查表法求Y=X2。設(shè)X(0WXW15)在片內(nèi)RAM的20H單

元中,要求將查表求Y,存入片內(nèi)RAM21H單元。

2)指令地址源程序

ORG1000H;程序起始地址

1000HSQU:MOVA,20H;取X

1002HADDA,#3;修正偏移量

1004HMOVCA,@A+PC;查表求Y=X2

1005HMOV21H,A;存結(jié)果

1007HRET;子程序結(jié)束

1008HTAB:DB00,01,04;平方表

100BHDB09,…,225

思考題:當0WXW255時,如何用查表法編程求Y=X2。

習(xí)題:找出指令錯誤并改正:

1.MOVA,ftlOOOH;A-1000H

2.MOVXA,1000H;A-(1000H)片外RAM

3.MOVCA,1000H;A-(1000H)片外ROM

4.MOVX60H,A;片外RAM(60H)-A

5.MOVRO,60H;片內(nèi)RAM:(61H)-(60H)

MOV61H,@R0

6.XCHRI,R2;Rl<-->R2

7.MOVXDPTR,#2000H;DPTR-2000H

8.MOVX60H,@DPTR;片內(nèi)RAM一片外RAM

3-4-2算術(shù)運算指令

與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運算指令會影響

標志位的狀態(tài),即CPU執(zhí)行算術(shù)運算指令后,根據(jù)

數(shù)據(jù)操作情況自動設(shè)置標志位的狀態(tài)。

2.3狀態(tài)標志

MCS-51的程序狀態(tài)字寄存器PSW為標志寄存器。

其格式如下:

CyACFORSIRSOOV—p

1.標志位(自動設(shè)置狀態(tài))

1)Cy:進位標志位

保存運算后最高位的進位/借位狀態(tài),當有進位/

借位,Cy=l,否則Cy二0。

2)AC:輔助進位標志位

保存低半字節(jié)的進位/借位狀態(tài),當產(chǎn)生進位/

借位,AC=1,否則AC二0。用于十進制調(diào)整。

3)OV:溢出標志位

0V=Cy7十Cy6,補碼運算產(chǎn)生溢出0V=1,否貝l」0V二0。

4)P:奇偶標志位

反映累加器A中數(shù)據(jù)的奇偶性。當1的個數(shù)為奇數(shù),

P=h否則P=0。

2.用戶選擇位(編程設(shè)置狀態(tài))

1)F0:用戶自定義標志位。

RSIRSO工作寄存器

2)RSI、RSO:000區(qū)

工作寄存器區(qū)選擇位。011區(qū)

復(fù)位時,PSW=OOH102區(qū)

-i-ior-r

113區(qū)

例:復(fù)位后,設(shè)置使用工作寄存器

2區(qū),其余標志位不變。

解:MOVPSW,#10H

CyACFORSIRSOOV—p

3-4-2算術(shù)運算指令

完成片內(nèi)RAM和A中數(shù)據(jù)的加減乘除運算。

一.加減指令00111011

工.加法指令+00111011

01110110

1)不帶進位加法:ADDA,源操作數(shù)2

ADDA,R2;A-A+R2,影響Cy、0V、AC、P

例1:A=3BH,PSW=O,執(zhí)行指令A(yù)DDA,#3BH

求:A=76H,Cy=0,0V=0,AC=1,P=1,

PSW=9

01000001=41H

CyACFORSIRSOov—p

2)帶進位加法:ADDCA,源操作數(shù)

ADDCA,R2;A-A+R2+Cy,影響Cy、OV、AC、P

例2:A=9AH,R2=E3H,PSW=0,執(zhí)行指令

ADDCA,R2后求:

A=7DH,Cy=i,0V=i,AC=o,P二o,

PSW=?10011010

11100011

10000100=84H

+0

101111101

2

CyACFORSIRSOov—p

帶進位加法指令A(yù)DDC用于多字節(jié)運算

例:設(shè)雙字節(jié)數(shù)X存在片內(nèi)RAM41H、40H單元,Y存在

42H、43H單元,編程求Z=X+Y,并存入片內(nèi)RAM單元

44H、45H、46Ho

DMOV/40H

DsADDA,42H片內(nèi)RAM

MOV4HA低字節(jié)相加地址內(nèi)容

5

MOVA41H46HZH

ADDcA45HZJVI

MOV4HA高字節(jié)相加44HZL

OV,

MA#o43HY

DDH

AcA#o計算高字節(jié)進位42H

MOVYL

4HA41H

RET,XH

子程序結(jié)束40HXL

2.減法指令

SUBBA,源操作數(shù);帶借位減法指令

SUBBA,R2;A-A-R2-Cy,

;影響Cy、OV、AC、P

例:A=5AH,R2=5AH,Cy=0,執(zhí)行下列指令

SUBBA,R2

求:A=00,Cy=0,0V=0,P=0,AC=0?

思考題:如果需要做不帶位的減法指令(在做第一次相減

時),應(yīng)該怎樣實現(xiàn)?

3.增量、減量指令

INC單操作數(shù)

如:INCR2;R2-R2+1

INCDPTR;DPTR-DPTR+1

和相ADDA,#1比較

1、單字節(jié),單周期指令

2、不影響標志位狀態(tài)。

注意:沒有指令DECDPTR

可用指令DECDPL代替

DEC單操作數(shù)

如:DECR2;R2-R2-1

4.乘除指令

MULAB;BA-AXB,Cy-0,

;當積高字節(jié)B=0,0V-0;BWO,則OV-1

在乘法運算中,0V=1表示乘積超過255

例:A=96(60H),B=192(COH),執(zhí)行指令MULAB后

,求:A=OOH,B=48H,Cy=0,0V=1,P=0?

解:96X192=18432(4800H)

DIVAB;A+B,A-商,B-余數(shù),Cy-O,

;當除數(shù)B=0,OVT;BWO,則OV-O

在除法運算中,OV=1表示除數(shù)為0。

例:A=156(F6H),B=13(0DH),執(zhí)行指令DIVAB后

求:A=12H,B=OCH,Cy=0,0V=0,P=0?

解:1564-13=18(12H),余數(shù)=12(0CH)o

邏輯運算指令

-.單操作數(shù)指令(A累加器為操作數(shù))

LA清0指令:CLRA;A-0

2.A取反指令:CPLA;A-/A

3.循環(huán)移位指令:

1)8位循環(huán)指令:

RLA;A循環(huán)左移一位QF

RRA;A循環(huán)右移一位—

2)9位循環(huán)指令:

RLCA;帶Cy循環(huán)左移一位[二

RRCA;帶Cy循環(huán)右移一位r-

例3-4-7:設(shè)A=11000101,Cy=0,分別執(zhí)行下列單

條指令:

CPLAA=00111010,Cy=0

RLAA=10001011,Cy=0

RLCAA=10001010,Cy=1

用9位循環(huán)指令實現(xiàn)多字節(jié)移位

例:編程將寄存器R6R5中的雙字節(jié)數(shù)X左移一位。

CyR6R5Cy

?—<------<—?------<—0

CLRC;Cy=0,設(shè)R6=55H,R5=AAH

MOVA,R5;R6=01010101,R5=10101010,Cy=0

RLCA

MOVR5,A;R6=01010101,R5=01010100,Cy=l

MOVA,R6

RLCA

MOVR6,A;R6=10101011,R5=01010100,Cy=0

一個暗點流動的例子

K2560139

PLOPO.O(ADO)

238

Pl.lPOJ(AD1)

337

R3560Pl.2P0.2(AD2)

436

Pl.3P0.3(AD3)

535

Pl,4P0.l(AD<l)

654

7Pl.5PO.5(AD5)

33

Pl.6P0.6(AD6)

s32

Pl.7P0.7(AD7)

VCCO

1321

INT1(P3.3)P2.0(A8)

1222

INT0(P3.2)P2.1(A9)-W

P2.2(A10)

15

TI(P3.5)P2.3(A11)

1425

T0(P3.4)P2.4(A12)

26

P2.5(A13)

31-27-

EAATP2.6(A14)

I——ll-24Wz28

P2.7(A15)

19

XTAL1

—^-C218no

hXTAL2VCCOVCC

I30pF20

GND

910

------1I-RESETKXD(P3.0)

IT11

TXD(P3.1)

R1S.2K1730

RD(P3.7)ALE/PROG

1629GND

早=10uF標(P3.6)PSEN

ATS9c51

O

VCC

■ORGOOOOH?delay:問題:

■LJMPSTART?movr7,#2551.如何實現(xiàn)亮點

■ORG30H?dl:movr6,#255流動?

■START:?d2:nop

2.如何改變流動

■MOVSP,#5FH?nop的方向?

■MOVA,#80H?nop

答案:

■LOOP:?nop

■MOVPl,A?djnzr6,d21、將A中的初始

■RLA?djnzr7,dl值改為7FH即可。

■LCALLDELAY?ret2、將RLA改為RR

■LJMPLOOP?ENDA即可。

(二)雙操作數(shù)邏輯運算指令(對應(yīng)位的邏輯運算):

ANL、ORL、XRL

例3-5-8A=01XXXX義XB,X表示隨機狀態(tài),為1

或0,執(zhí)行下述一組指令執(zhí)行后A的值如何?

XRLA,#0C0H;將累加器A的內(nèi)容D7、口6取反

ORLA,#03H;將累加器A的內(nèi)容D0置1

ANLA,#0E7H;將累加器A的內(nèi)容D4、D3清。

解:執(zhí)行上述指令后,A=10X00XllBo

思考題L如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?

思考題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?

布爾變量操作指令

對片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址b。

.位傳送

MOVC,b;Cy—(b)

MOVb,C;(b)—Cy

:.位清0、置1、取反:CLR、SETB、CPL:

CLRC;Cy―0,

CLR40H;(位地址40H)—0

7FHX2?

2FH7F7£707C787科797847

2EHf/7675J7372717046

2DH6F6E60<5C6B696845

2CH6764565646362<5160QQ

2BH5F5E5D5C5B5A595S43

例:將位地址20H的一位數(shù)2AH5736S5543352515042

29H4F4E4D4c4B4H494841

傳送到位地址30H中:28H464342?1040

27H3F3£303C383fl3s3839

26H3736353-f32313038

MOVC,20H2SH2F2E202C2B2rt2S2837

-一

24H2726252423.—212036

MOV30H,C23HIFIEIDICIB1A191835

22H171615141312111034

21HOF■i-0DocOBOA090833

2OH050132

1FH3A

26H1011010118H24

17H

25H1000011023

ion16

24H01110000OFH15

OBH8

O7H7

OOHo

三.邏輯運算:ANL、ORL:

ANLC,40H;C-CA(40H)

ANLC,/40H;C-C八/(40H)

例:設(shè)Cy=1,(位地址40H)=l,執(zhí)行指令

ANLC,/40H后,

Cy=0,(位地址40H)=1

位地址表示法:

位地址40H,位寄存器F0,字節(jié)加位ACC.0

FOHB

EOHACC

DOHPSM

習(xí)題:設(shè)累加器A中數(shù)據(jù)為C8HT2CON

29H,Cy=O,執(zhí)行指令B8HIP

BOHP3

ORLC,0E3Ha8HIE

AOHP2

98HSCON

9

后,Cy=9OHPl

88HICON

SOHPO

轉(zhuǎn)移指令

轉(zhuǎn)移指令通過改寫PC的當前值,從而改變CPU執(zhí)

行程序的順序,使程序發(fā)生跳轉(zhuǎn)。

按轉(zhuǎn)移條件分類:

1)無條件轉(zhuǎn)移:

執(zhí)行無條件轉(zhuǎn)移指令,程序無條件轉(zhuǎn)移到指定處。

2)條件轉(zhuǎn)移:

指令中給出轉(zhuǎn)移條件,執(zhí)行指令時,先測試條件,

若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行

程序。

一.無條件轉(zhuǎn)移指令

1.長轉(zhuǎn)移指令:

LJMPnn;PC—nn

指令轉(zhuǎn)移范圍:64KB

2.絕對轉(zhuǎn)移指令:

AJMPpn;PC—PC+2

;PC1。?0—pn“

;PC15?不變

指令轉(zhuǎn)移范圍:2KB

轉(zhuǎn)移時要求轉(zhuǎn)移前后保持PC/?11不變。

3.短轉(zhuǎn)移指令:

SJMPe;PC—PC+2,PC—PC+e

指令機器碼:80H,e

相對偏移量e為8位補碼。

指令轉(zhuǎn)移范圍:前128?后127字節(jié)

編程時,用標號代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作

數(shù)交給匯編程序計算。

LJMPNEXTAJMPNEXTSJMPNEXT

NEXT:

4.間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令)

JMP@A+DPTR.;PC—A+DPTR

指令機器螞當二指令轉(zhuǎn)移范圍64KB。

應(yīng)用:處理功能鍵。KEY:MOVDPTR,#KTAB

要求不同功能鍵執(zhí)行不同程MOVA,40H

序段。設(shè)每個功能鍵對應(yīng)一ADDA,A

個鍵值X(0<X<FH)oJMP@A+DPTR

設(shè)X已存入片內(nèi)RAM的40HKTAB:AJMPFUNCO

單元中。AJMPFUNCI

若XR,則執(zhí)行程序段FUNC0???

若X=l,則執(zhí)行程序段FUNC1FUNCO:...

FUNCI:...

二.條件轉(zhuǎn)移指令

條件轉(zhuǎn)移指令形成程序的分支,賦予計算機判斷決策能力

轉(zhuǎn)移條件:1)標志位的狀態(tài)2)位地址中的狀態(tài)

1.判零轉(zhuǎn)移指令

JZe;PC-PC+2,

;若A=OOH,PC-PC+e(轉(zhuǎn)移),

;若AWOOH,PC不變(不轉(zhuǎn)移)

JNZe;PC-PC+2,若AWOOH,

;PC-PC+e(轉(zhuǎn)移)

;若A=OOH,PC不變(不轉(zhuǎn)移)

2.判Cy轉(zhuǎn)移指令

JCe;Cy=1則轉(zhuǎn)移,Cy=O不轉(zhuǎn)移

JNCe;Cy=0則轉(zhuǎn)移,Cy=l不轉(zhuǎn)移

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

;若AW(n),貝UPC-PC+e

;且當A〉(n),Cy=0,當A〈(n),Cy=l;

;若A=(n),PC不變,且Cy=0。

相當于兩個操作數(shù)相減,僅影響標志狀態(tài),不保存結(jié)果

6.循環(huán)轉(zhuǎn)移指令:

DJNZ操作數(shù),e

DJNZR2,e;PC-PC+2,R2-R2T

;若R2W0,PC-PC+e,

;若R2=0,PC不變。

例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次

MOVR2,#100;設(shè)循環(huán)計數(shù)器初值

LOOP:...;多次循環(huán)程序段

DJNZR2,LOOP;循環(huán)控制

...;循環(huán)結(jié)束

習(xí)題:當循環(huán)計數(shù)器初值為3循環(huán)次數(shù)有多少?

子程序調(diào)用和返回指令

子程序調(diào)用和返回指令也使程序發(fā)生轉(zhuǎn)移。

子程序調(diào)用過程:

與轉(zhuǎn)移指令不同:轉(zhuǎn)移時

,先用堆棧保存當前地址

主程序

子程序S

???

CALLS//???

…???

CALLS/\

...RET

?長調(diào)用指令指令調(diào)用范圍:64KB

LCALLnn

.絕對調(diào)用指令指令調(diào)用范圍2KBO

ACALLpn

三.子程序返回指令

RET

指令從堆棧彈出保存的PC地址,實現(xiàn)子程序返回。

例:子程序嵌套

程序存儲器

MAIN:MOVSP,#30H;設(shè)置棧底2000HMOVSP,#3OH

LCALFSUB;調(diào)用子程序???

208FHLCALL2100H

SUB:二;子程序段???

2100H???

RET…;返回主程序???

2150HLCALL2200H

???

21FFHRET

片內(nèi)RAM2200H???

35H???

SPf34H21H2250HRET

33H53H

32H

SP-20HPC

31H92H

2Hm

SP一30HX

注意:1?子程序起始指令要使用標號,用作子程序名。

2?執(zhí)行返回指令RET之前,保證棧頂內(nèi)容為主

程序返回地址,以便正確返回主程序。

常用格式:

MAIN:...;主程序

LCALLSUBR;調(diào)用SUBR

SUBR:;子程序首地址

RET;子程序返回

下述程序執(zhí)行后,SP=?A=?

B=?

■ORG2000H

■2000H:MOVSP,#40H

■2003H:MOVA,#30H

■2005H:LCALL2500H

■2008H:ADDA,#10H

■200AH:MOVB,A

■200CH:LI:SJMPL1

■ORG2500H

■2500H:MOVDPTR,#200AH

2503H:PUSHDPL

■2505H:PUSHDPH

■2507H:RET

下述程序執(zhí)行后,SP=?A=?

B=?

------------ORG0000H

JMPSTART

ORG2000H

START:MOVSP,#40H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論