版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版實習(xí)就業(yè)服務(wù)合同范本(2025年度)2篇
- 2025版大型養(yǎng)殖場與超市直供鮮蛋銷售合同3篇
- 二零二五年計算機耗材及配件銷售合同3篇
- 二零二五版嬰幼兒奶粉電商平臺銷售合同模板頁2
- 2025版學(xué)校教師培訓(xùn)與職稱評定合作合同3篇
- 農(nóng)業(yè)機械化與農(nóng)業(yè)科技創(chuàng)新發(fā)展考核試卷
- 單板加工企業(yè)綠色生產(chǎn)與環(huán)保責任落實考核試卷
- 2025版塔吊租賃合同樣板(安全與環(huán)保并重)3篇
- 2025年醫(yī)療耗材供應(yīng)合同
- 礦長聘用合同二零二五年度執(zhí)行范本(礦山行業(yè)適用)3篇
- 2023-2024學(xué)年度人教版一年級語文上冊寒假作業(yè)
- 軟件運維考核指標
- 空氣動力學(xué)仿真技術(shù):格子玻爾茲曼方法(LBM)簡介
- 對表達方式進行選擇與運用
- GB/T 18488-2024電動汽車用驅(qū)動電機系統(tǒng)
- 投資固定分紅協(xié)議
- 高二物理題庫及答案
- 職業(yè)發(fā)展展示園林
- 七年級下冊英語單詞默寫表直接打印
- 2024版醫(yī)療安全不良事件培訓(xùn)講稿
- 中學(xué)英語教學(xué)設(shè)計PPT完整全套教學(xué)課件
評論
0/150
提交評論