單片機應用技術項目化教程課件-項目11 C51單片機的匯編語言介紹_第1頁
單片機應用技術項目化教程課件-項目11 C51單片機的匯編語言介紹_第2頁
單片機應用技術項目化教程課件-項目11 C51單片機的匯編語言介紹_第3頁
單片機應用技術項目化教程課件-項目11 C51單片機的匯編語言介紹_第4頁
單片機應用技術項目化教程課件-項目11 C51單片機的匯編語言介紹_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第11章學習51單片機指令系統(tǒng)與匯編指令系統(tǒng)概述MCS-51單片機的尋址方式MCS-51的指令系統(tǒng)本章主要內容11.3.1指令系統(tǒng)概述

11.3.2MCS-51單片機的尋址方式

11.3.3數(shù)據(jù)傳送類指令

11.3.4算數(shù)運算類指令

11.3.5邏輯運算類指令

11.3.6控制轉移類指令

11.3.7位操作類指令1.指令的定義

指令是主機能直接識別和接受并指揮計算

機執(zhí)行某種操作的命令。指令有兩種基本表達形式:

機器碼指令和匯編語言指令。11.3.1指令與匯編語言概述2.機器碼指令與匯編語言指令機器碼指令:用二進制代碼(或十六進制數(shù))表示的指令。也常被稱為目標代碼指令。匯編語言指令:為了便于記憶以及的程序的編寫和閱讀,用助記符表示的指令。

說明:匯編語言指令必須通過某種手段(匯編)把它變成機器碼指令才能被機器執(zhí)行。匯編可由計算機通過匯編程序自動完成,亦可手工匯編。

11.3.1指令與匯編語言概述2.匯編語言指令格式:

[標號:]

操作碼操作數(shù)

[;注釋]

LOOP:

MOVA,#30H

;A←#30H操作碼--表示指令進行何種操作,用助記

符形式給出。操作數(shù)--指令操作的對象。分為目的操作

數(shù)和源操作數(shù)。

11.3.1指令與匯編語言概述3.機器碼指令的格式操作碼操作數(shù)(操作數(shù)用十六進制數(shù)表示)機器碼指令按指令的字節(jié)長度劃分,有單字節(jié)、雙字節(jié)、三字節(jié)指令。11.3.1指令與匯編語言概述

單字節(jié)指令8位編碼僅為操作碼:指令INCA,編碼為04H。A隱含在操作碼中。

注意:指令中“A”表示累加器,而“ACC”表示累加器對應的地址(E0H)。

00000100INCA11.3.1指令與匯編語言概述高5位為操作碼,低3位為存放操作數(shù)的寄存器編碼。如:MOVA,R08位編碼含有操作碼和寄存器編碼編碼為11101000B,可表示為E8H(低3位000為寄存器R0的編碼)。1110

1000MOVA,R0寄存器號11.3.1指令與匯編語言概述

雙字節(jié)指令第一字節(jié)表示操作碼,第二個字節(jié)表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。

如:MOVA,#50H

編碼為01110100B,01010000B。其十六進制表示為74H,50H。操作數(shù)01010000MOVA,#50H操作碼0111010011.3.1指令與匯編語言概述

三字節(jié)指令

指令的第一字節(jié)表示該指令的操作碼,后兩個字節(jié)表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。如:MOV20H,#50H

編碼為01110101B,00100000B,01010000B。可表示為75H,20H,50H。操作數(shù)00100000MOV20H,#50H操作碼011101010101000011.3.1指令與匯編語言概述微處理器(包括單片機)所有指令的集合稱為該機器的指令系統(tǒng)。

MCS-51系列單片機使用42種助記符,有51種基本操作。通過助記符及指令中的源操作數(shù)和目的操作數(shù)的不同組合構成了MCS-51的111條指令。4.指令分類MCS-51的指令系統(tǒng)按字節(jié)數(shù)分為:單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條;按指令執(zhí)行的周期劃分:有57條一周期指令,52條兩周期指令,2條四周期指令。當主頻為12MHz時,單周期指令的執(zhí)行時間為1μs。11.3.1指令與匯編語言概述Rn(n=0~7)--選定當前寄存區(qū)的寄存器R0-R7。Ri(i=0,1)--通過寄存器R0和R1的內容間接尋址片內RAM單元。

(X)--表示×地址單元或寄存器中的內容。((X))--表示以X或寄存器中的內容為地址間接尋址單元的內容?!?/p>

--數(shù)據(jù)傳輸?shù)姆较?/p>

?!?-當前指令的地址。

/--位操作數(shù)前綴,表示取反。1.常用符號11.3.1指令與匯編語言概述direct--直接地址。一個內部RAM單元的地址或一個特殊功能寄存器。

#data8--8位常數(shù),也稱立即數(shù),#為立即數(shù)前綴。#data16--16位立即數(shù)。addr16--16位目的地址。供轉移或調用指令使用。addr11--11位目的地址。rel--8位帶符號偏移量(以二進制補碼表示),常用于相對轉移指令。

bit--位地址。用于位操作指令。

(可用符號名稱表示)。C--最高進位標志位或布爾處理器的累加器。?--數(shù)據(jù)交換。

指令系統(tǒng)說明2.匯編語言的數(shù)據(jù)形式匯編語言的數(shù)據(jù)可以有以下幾種表示形式:

二進制數(shù):末尾以字母B標識。如10110110B;

指令系統(tǒng)說明十進制數(shù):末尾以字母D標識或將字母省略。如:56D,7F十六進制數(shù):末尾以字母H標識。如:46H,0F8H,注意:十六進制數(shù)以字母A~F開頭時,須在前面加上數(shù)字“0”。

11.3.2尋址方式

尋址方式:尋找操作數(shù)或操作數(shù)所在的地址的方式。

尋址方式有七種,即:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、基址寄存器加變址寄存器變址尋址、相對尋址和位尋址。

若不特別聲明,我們后面提到的尋址

方式均指源操作數(shù)的尋址方式。尋址方式及對應的存儲器空間尋址方式尋址空間立即尋址程序存儲器直接尋址片內RAM低128字節(jié)、SFR寄存器尋址工作寄存器R0~R7,A,B,DPTR寄存器間址片內RAM:@R0,@R1,SP片外RAM:@R0,@R1,@DPTR變址尋址程序存儲器:@A+PC,@A+DPTR相對尋址程序存儲器256字節(jié)范圍內:PC+偏移量位尋址片內RAM的位尋址區(qū)(20H~2FH字節(jié)地址)可位尋址的SFR

編碼中直接給出操作數(shù)。操作碼之后的操作數(shù)稱為立即數(shù)。以“#”號標識。1.立即尋址

尋址空間:ROM立即數(shù)單字節(jié)、雙字節(jié)標識:#

源操作數(shù)例:MOVA,#40H;7FH40H80HFFHAFFFFHMOVA,#40H0000HROMSFRRAM結果:(A)=40H74H40H1立即尋址

操作碼后的字節(jié)是操作數(shù)的地址,操作數(shù)本身放在該地址指示的存儲單元中。2直接尋址尋址空間片內RAM(128字節(jié),00H~7FH)SFR(常采用符號形式)例:MOVA,50H

;設(50H)=3AH50H7FH3AH3AH80HFFHAFFFFHMOVA,50H0000HROMSFRRAM結果:(A)=3AHE5H50H2直接尋址

操作數(shù)在寄存器中,指令中直接給出該寄存器名稱。具有較高的傳送和運算速度。3寄存器尋址例:MOVA,R0INCR3尋址空間R0~R7ABDPTR例:MOVA,R0;設(R0)=30H,0工作寄存器組00H7FH30H30H80HFFHAE8HFFFFHMOVA,R00000HROMSFRRAM結果:(A)=30H3寄存器尋址

指令操作數(shù)部分所指定的寄存器中存放的不是操作數(shù),而是操作數(shù)的地址,從該地址取操作數(shù)。用符號@表示。4寄存器間接尋址紙條地址4寄存器間接尋址尋址空間片內RAM片外RAM間址寄存器@R0或@R1@DPTR(片外RAM64KB)片內RAM片外RAM(256B)MOVMOVX例:MOVA,@R0

;設(R0)=30HE6HFFFFHMOVA,@R00000HROM結果:(A)=5AH30H7FH5AH5AH80HFFHASFRRAM30HR04寄存器間接尋址

例如:

MOVA,@R0;((R0))→(A)PUSHACC;(A)→((SP))MOVXA,@DPTR;((DPTR))→(A)4寄存器間接尋址注意:特殊功能寄存器不能用寄存器間接

尋址訪問,只能用直接尋址訪問。

以16位寄存器(數(shù)據(jù)指針DPTR和PC)作為基地址,加上地址偏移量(A),形成操作數(shù)地址。

5變址尋址

尋址空間:ROM基址寄存器:DPTRPC偏移量寄存器:A操作數(shù)地址:累加器AROMDPTRDPHDPL執(zhí)行前:34H執(zhí)行后:AAH12H00H算數(shù)邏輯單元ALUPCPC+193H1200H1234HAAH(A)+(DPTR)=1234H例:MOVCA,@A+DPTR結果:(A)=AAH5變址尋址

以PC當前值為基準地址,加上指令中相對偏移量rel形成轉移目標地址。

6相對尋址

目標地址:PC+rel

rel取值范圍是:-128~+127。(補碼)6相對尋址目標地址=(源地址+轉移指令字節(jié)數(shù))+偏移量(rel)PC當前值偏移量(rel)=目標地址-(源地址+指令字節(jié)數(shù))=目標地址-PC當前值源地址:相對轉移指令所在的地址目標地址:轉移后的地址ROMPC當前值算數(shù)邏輯單元ALU

PC→1000HPC+1→1001H80H1052H(PC)=1000H+02H+50H=1052H例:SJMP50H結果:(PC)=1052HPC+2→1002H50H

(源地址)(目標地址)操作碼偏移量1002H6相對尋址

是將8位二進制數(shù)中的某一位作為操作數(shù),在指令中給出的是位地址。

7位尋址

尋址空間片內RAM中位尋址區(qū)SFR中的可尋址位7位尋址片內RAM尋址區(qū)直接使用地址。SFR的尋址位可直接寄存器名加位數(shù)表示。如:

CLRACC.0MOV30H,C例:MOVC,30HMOVA,30H例:MOVC,04H7位尋址11.3.351單片機的指令系統(tǒng)一般不影響PSW狀態(tài)傳送類指令分成兩大類

MOV,一般傳送

非MOV,特殊傳送,

如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。

數(shù)據(jù)傳送類指令功能:將指令中源操作數(shù)的

內容送到目的操作數(shù)。1數(shù)據(jù)傳送指令(29條)8位傳送

#data不能用作目的字節(jié);源字節(jié)與目的字節(jié)不相同(除direct外);寄存器尋址與寄存器及其間址間不相互傳送。傳送關系目的源操作數(shù)AARnRndirectdirect@Ri@Ri#data…

16位傳送

將源操作數(shù)data16(通常是地址常數(shù))送入目的操作數(shù)DPTR中。例如:

MOVDPTR,#1234H

結果為:

(DPH)=12H,(DPL)=34H。1.以累加器A為目的操作數(shù)的指令(4條)

例:若(R1)=20H,(20H)=55H,執(zhí)行

MOVA,@R1MOVA,Rndirect@Ri#data結果:(A)=55H。一般傳送指令2.以寄存器Rn

為目的操作數(shù)的指令(3條)

例:若(50H)=40H,執(zhí)行

MOVR6,50H

MOVRn,Adirect#data結果:(R6)=40H。一般傳送指令3.以直接地址direct

為目的操作數(shù)的指令(5條)

例:若(R1)=50H,(50H)=18H,執(zhí)行

MOV40H,@R1

結果:(40H)=18H。

MOVdirect,Rndirect1@Ri#dataA一般傳送指令4.以間接地址@Ri為目的操作數(shù)的指令(3條)

例:若(R1)=30H,(A)=20H,執(zhí)行

MOV@R1,A結果:(30H)=20HMOV@Ri,Adirect#data一般傳送指令【例11-3-1】設(70H)=60H,(60H)=20H,P1為輸入口,狀態(tài)為0B7H,執(zhí)行如下程序:

MOVR0,#70H MOVA, @R0 MOVR1,A MOVB, @R1 MOV@R0,P1 結果:(70H)=0B7H(B)=20H

(R1)=60H(R0)=70H一般傳送指令【例11-3-2】給出下列指令的執(zhí)行結果,指出源操作數(shù)的尋址方式。

MOV 20H,#25H;立即尋址

MOV 25H,#10H;立即尋址

MOV P1,#0CAH;立即尋址

MOV R0,#20H;立即尋址

MOV A, @R0;寄存器間接尋址

MOV R1, A;寄存器尋址

MOV B, @R1;寄存器間接尋址

MOV @R1,P1;直接尋址

MOV P3,R1;寄存器尋址結果:(20H)=25H,(25H)=10H,(P1)=0CAH, (R0)=20H,(A)=25H,(R1)=25H, (B)=10H,(25H)=0CAH,(P3)=25H。一般傳送指令5.16位數(shù)據(jù)傳送指令(1條)

功能:把16位常數(shù)送入數(shù)據(jù)指針寄存器DPTR中。其中:高8位送入DPH,低8位送入DPL。MOVDPTR,#data16一般傳送指令1.累加器A與程序存儲器(ROM)傳送指令(查表指令)MOVCA,@A+PC以PC的當前值與偏移量之和作為程序存儲器地址,將該地址單元的內容傳送到A。指令執(zhí)行后PC的內容不變。特殊傳送指令MOVCA,@A+DPTR

以DPTR與偏移量之和作為程序存儲器地址,將該地址單元的內容傳送到A。指令執(zhí)行后DPTR的內容不變。2.累加器A與片外數(shù)據(jù)存儲器(RAM)傳送指令

讀片外RAM

MOVXA,@DPTRMOVXA,@Ri

寫片外RAM

MOVX@DPTR,AMOVX@Ri,A特殊傳送指令【例11-3-3】將外RAM2010H中內容送外RAM2020單元分析:讀2010H單元中內容→A→寫數(shù)據(jù)→2020H單元 方法二:

MOVDPTR,#2010HMOVXA,@DTPRMOVDPTR,#2020HMOVX@DPTR,A方法一:

MOVP2,#20H;輸出高8位地址

MOVR0,#10H;置讀低8位間接地址

MOVXA,@R0;讀2010H中數(shù)據(jù)

MOVR1,#20H;置寫低8位間接地址

MOVX@R1,A;將A中數(shù)據(jù)寫入2020H中

特殊傳送指令

3.堆棧操作類指令

操作

PUSHdirectPOPdirect

原則:向地址高端生長,后進先出

SP:指向棧頂(活動端),復位值07H特殊傳送指令【例11-3-4】已知:(A)=30H,(B)=70H

執(zhí)行:

MOV SP,#60H ;設棧頂指針

PUSHACC PUSHB

結果:

(61H)=30H,(62H)=70H,(SP)=62H。 特殊傳送指令【例11-3-5】已知:(SP)=62H,(62H)=70H,(61H)=30H,執(zhí)行:

POPDPH POP DPL

結果:(DPTR)=7030H,(SP)=60H。特殊傳送指令4.交換指令交換類指令,傳送是雙向的

字節(jié)交換XCHA,Rndirect@Ri

半字節(jié)交換

XCHDA,@Ri特殊傳送指令【例11-3-6】設(A)=57H,(20H)=68H,(R0)=30H,(30H)=39H,求下列指令的執(zhí)行結果。 (1)XCHA,20H;

結果:(A)=68H,(20H)=57H

(2)XCHA,@R0;

結果:(A)=39H,(30H)=57H

(3)XCHA,R0;

結果:(A)=30H,(R0)=57H

(4)XCHDA,@R0;

結果:(A)=59H,(30H)=37H

特殊傳送指令2算術運算類指令(24條)

加、減、乘、除、加1、減1、十進制調整指令。多數(shù)以A為源操作數(shù),同時又使A為目的操作數(shù)。一般影響PSW中的OV、CY、AC、P標志。OV標志位的確定:OV=Cy⊕Cy’;

Cy’:D6向D7的進位。

CY,無符號整數(shù)多字節(jié)加、減法、移位等

OV,可方便的控制補碼運算AC,用于BCD碼運算。1)

加法指令(13條)1.不帶進位的加法指令(4條)影響:CY、AC、OV和PADDA,Rndirect@Ri#data注:D7、D6位只有一個有進位時,(OV)=1。如:兩個正數(shù)相加結果為負數(shù)或兩個負數(shù)相加結果為正數(shù)時屬于錯誤結果,此時(OV)=1?!纠?1-3-7】若(A)=D3H,(30H)=E8H,執(zhí)行指令ADDA,30H之后,由于:

結果:(CY)=1,(AC)=0,(P)=0,

(OV)=0,(A)=BBH

(A)11010011

+(30H)11101000

進位110

結果10111011

CYAC2.帶進位的加法指令(4條)

源操作數(shù)與A的內容相加再與CY相加,結果送入目的操作數(shù)A中。ADDCA,Rndirect@Ri#data

CY是在該指令執(zhí)行之前已存在的值?!纠?1-3-8】設(A)=88H,(30H)=99H,

CY=1執(zhí)行:ADDCA,30H結果:(CY)=1,(AC)=1,(P)=0,

(OV)=1,(A)=22H

(A)10001000

(30H)10011001+1

結果100100010

3.加1指令(5條)INC

Rndirect@RiDPTRA源操作數(shù)的內容加1,結果再送回原單元。這些指令中僅INCA影響P標志。

若原來為0FFH,則加1后將溢出為00H?!纠?1-3–9】設工作寄存器R0內容為7EH,內部RAM的7EH、7FH單元的內容分別為0FFH和40H,執(zhí)行下列指令:

INC@R0;((R0))←((R0))+1

;即(7EH)=0FFH+1=00HINCR0;(R0)←(R0)+1

;即7EH+1=7FH→(R0)INC@R0;((R0))←((R0))+1

;即(7FH)=40H+1=41H執(zhí)行結果:(R0)=7FH,而內部RAM中7EH和

7FH單元的內容分別為00H和41H?!纠?1-3–10】設數(shù)據(jù)指針DPTR內容為12FEH當執(zhí)行下列指令序列:

INCDPTRINCDPTRINCDPTR執(zhí)行結果:DPTR的內容為1301H,當DPL內容為0FFH+1時,產生向DPH(高位字節(jié))進位,而DPL(低位字節(jié))內容變成00H。2)

減法指令(8條)1.一般減法指令(4條)SUBBA,Rndirect@Ri#data影響:CY、AC、OV和P注:D7、D6位只有一個有借位時,(OV)=1。如要用此組指令完成不帶借位減法,只需先清CY為0。【例11-3-11】若(A)=49H,(CY)=1,執(zhí)行指令SUBBA,#54H

結果:(A)=F4H,(CY)=1,(AC)=0,(OV)=0(位6有借位,位7無借位),(P)=1。

(A)01001001

-(CY)1

01001000

-#54H01010100

結果11110100

2.減1指令(4條)

操作數(shù)內容減1,結果再送回原單元。僅DECA影響P標志。其余指令都不影

響標志位的狀態(tài)。若原來為00H,則減1后下溢為0FFH。DEC

Rndirect@RiA【例11-3–12】設(R0)=7FH,內部RAM的(7EH)=00H、(7FH)=40H,執(zhí)行下列指令:

DEC@R0;((R0))←((R0))–1,即(7FH)–1=40H–1=3FHDECR0;(R0)←(R0)–1,即7FH–1=7EHDEC@R0;((R0))←((R0))–1,即(7EH)–1=00H–1=0FFH3)

乘、除法指令MULAB

當乘積大于FFH時,溢出標志位(OV)=1。標志CY總是被清0。X

ABAB乘數(shù)被乘數(shù)積1.8位無符號數(shù)乘法指令乘、除法指令是唯一兩條單字節(jié)4機器周期的指令。DIVAB除數(shù)為0,商的A和B內容不確定,且(OV)=1。標志CY總是被清0。X

ABAB除數(shù)被除數(shù)整數(shù)部分商

余數(shù)部分

8位無符號數(shù)除法指令3)

乘、除法指令【例11-3–13】(A)=50H,(B)=A0H,執(zhí)行

MULAB

結果:(B)=32H,(A)=00H,(OV)=13)

乘、除法指令【例11-3–14】(A)=2AH,(B)=05H,執(zhí)行

DIVAB

結果:(A)=08H,(B)=02H,(OV)=04)

十進制加法調整指令

對A中剛進行的2個BCD碼加法的結果調整。

DAA

當A中低4位數(shù)出現(xiàn)了非BCD碼或低4位產生進位(AC=1),則在低4位加6。

當A中高4位數(shù)出現(xiàn)了非BCD碼或高4位產生進位(CY=1),則在高4位加6。調整后,CY表示結果的百位值。

【例11-3–15】設(A)=56H,(R7)=78H,

執(zhí)行指令

ADDA,R7DAA

結果:134(BCD數(shù))

(A)01010110

+(R7)01111000

11001110

調整

01100110

結果100110100

【例11-3–16】BCD碼的減1操作可用加99來求得,條件是不計進位值。設累加器A中原BCD碼值為30,執(zhí)行下列指令

ADDA,#99HDAA

(A)00110000

+#99H10011001

11001001

調整

0110

結果100101001

經(jīng)調整后,實際得數(shù)129,若不計進位,則和數(shù)為29.它與30-1=29相當。3邏輯運算與循環(huán)類指令(24條)

邏輯運算:與、或、異或、清0和取反

A清0操作對P標志有影響。

對A循環(huán)移位

方向:左、右

CY:帶、不帶ANLdirect,A#dataANLA,Rndirect@Ri#data1.邏輯“與”運算指令(6條)

源操作數(shù)與直接地址單元內容相與

源操作數(shù)與累加器A的內容相與

3邏輯運算與循環(huán)類指令(24條)

利用邏輯“與”操作,可使8位二進制數(shù)的若干位清零(屏蔽這些位),而其余位不變。

注意:

若將兩個直接地址單元的內容進行邏輯運算,則要通過A才能實現(xiàn)。

A#dataORLA,Rndirect@Ri#data

利用邏輯“或”操作,可使8位二進制數(shù)的若干位置1,而其余位不變。

2.邏輯“或”運算指令(6條)

源操作數(shù)與直接地址單元內容相或

源操作數(shù)與累加器A的內容相或A

源操作數(shù)與直接地址單元內容相或ORLdirect,A【例11-3–19】若A=65H,利用ANL指令屏蔽A的高4位。

ANLA,#0FH

執(zhí)行指令后,A=05H,高4位被屏蔽掉。

【例11-3–20】要求將內部RAM存儲器40H的第1、第3位置1,而其它位不變。

ORL40H,#00001010B

或:ORL40H,#0AHXRLdirect,A#dataXRLA,Rndirect@Ri#data

利用邏輯“異或”操作,可使8位二進制數(shù)的若干位不變,而若干位取反。

3.邏輯“異或”運算指令(6條)

源操作數(shù)與直接地址單元內容相異或

源操作數(shù)與累加器A的內容相異或【例11-3–21】使P1口的最高位取反,其余位不變。

XRLP1,#80H

這里P1為端口代號,其地址為90H。由于兩個相同的數(shù)異或結果必為零,故可以借助異或指令判斷兩數(shù)是否相等。【例11-3–22】判斷位累加器A中值是否為0DH以決定跳轉,可使用下面的指令:

XRLA,#0DH;判斷A中值是否為0DHJZAL;是0DH,轉AL處理┇;否則不跳轉┇

對累加器A單獨進行的邏輯操作(6條)CPLACLRA1.清零與取反

把A的內容清0,結果仍在A中。

把A的內容每位取反0,結果仍在A中。RR

ARRC

ARL

ARLC

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

A的內容循環(huán)右移1位。

A的內容連同CY位循環(huán)右移1位。

A的內容循環(huán)左移1位。

A的內容連同CY位循環(huán)左移1位。

“累加器A內容乘2”的任務可以利用指令RLCA方便地完成。

例:若(A)=BDH=10111101B,(CY)=0。執(zhí)行指令RLCA

結果為:17AH(378)=2×BDH(189)APSW010111101

【例11-3-17】

試用三種方法將累加器A中無符號數(shù)乘2。方法1:

CLRCRLCA;左移一位,相當于乘2

方法2:

CLRCMOVR0,AADDA,R0

方法3:

MOVB,#2MULABSWAPA【例11-3-18】設內部RAM40H、41H單元中連續(xù)存放有4個壓縮的BCD碼數(shù)據(jù),試編程序將這4個BCD碼倒序排列。分析:過程如圖3–5所示.

程序如下:

MOV A, 41HSWAP AXCH A, 40HSWAP AMOV 41H,A圖11-5壓縮BCD碼倒序排列示意圖

3.累加器A半字節(jié)交換指令4控制轉移類指令(17條)

程序執(zhí)行是順序的,改變程序執(zhí)行順序,稱作程序轉移。

控制程序轉移采用轉移指令無條件轉移條件轉移子程序調用與返回1.長轉移指令

指令第二、三字節(jié)地址碼分別裝入PC的高8位和低8位中,無條件的轉向指定地址。

可轉到64KB的ROM空間的任何單元。

例:若“NEWADD”表示轉移目標地址1234H。執(zhí)行LJMPNEWADD時,目標地址將裝入PC中,程序轉向地址1234H處運行。1)

無條件轉移

不規(guī)定條件的程序轉移稱為無條件轉移。

LJMPaddr162.絕對轉移指令

PC先指向AJMP的下一條指令,再把11位地址碼傳送到PC10~0,PC15~11不變。

該指令把64KB的ROM空間劃分為32個區(qū),每個區(qū)為2K字節(jié)。因此,AJMP轉移范圍為包含AJMP下條指令在內的2KB區(qū)間。AJMPaddr113.相對轉移SJMPrel

第二字節(jié)為rel,(補碼),00H~7FH為正向轉移,80H~FFH(-128~-1)反向轉移。

rel是目標地址的標號,由匯編程序自動計算,并填入指令代碼中。計算公式為:rel=(目標地址–源地址–指令字節(jié)數(shù))的補碼3.相對轉移

例:若“NEWADD”表示地址0123H,PC當前值為0100H。執(zhí)行SJMPNEWADD后,程序轉向0123H執(zhí)行(此時rel=0123H-(0100+2)=21H)。4.間接轉移指令

JMP@A+DPTR轉移地址由DPTR和A相加形成。該指令具有散轉功能,用來構成多分支選擇程序,由DPTR決定多分支轉移程序的首地址,由A的內容來動態(tài)選擇其中的某一個分支轉移指令?!纠?1-3–23】執(zhí)行下面的散轉程序,程序將根據(jù)A中的內容命令編號0~9)轉相應的命令處理程序。

ORG1000HSTART:MOVR1,ARLA ;乘2ADDA, R1 ;完成偏移量A=(A)×3MOVDPTR,#TABLE ;設定表格首地址

JMP@A+DPTRTABLE:LJMPCOMD0 ┇LJMPCOMD9COMD0: ┇COMD9:

END2)

條件轉移1.累加器判0轉移指令

JZ

rel

A的內容為0轉移JNZ

relA的內容不為0轉移

所謂條件轉移就是程序的轉移是有條件的。2.比較不相等轉移指令

對目的字節(jié)與源字節(jié)比較,不等則轉移比較時影響進位標志若目的字節(jié)等于源字節(jié),程序將繼續(xù)往下執(zhí)行。CJNE

A,direct,rel

CJNE

ARn@Ri,data,rel

【例11-3–24】在內部RAM30H~3FH建立數(shù)據(jù)

00H~0FH,可編程如下:

CLRAMOVR0,#30HLOOP:MOV@R0,AINCAINCR0CJNER0,#40H,LOOPSJMP$3.減1不為0轉移指令

每執(zhí)行一次,循環(huán)控制單元減1,并判其是否為0

不為0,則轉移到目標地址繼續(xù)循環(huán);為0,則結束循環(huán),程序往下執(zhí)行。DJNZ

Rn,relDJNZ

direct,rel【例11-3–25】編程計算的值。用R0作為循環(huán)計數(shù)器使用,兼作累加時的加數(shù),取A為累加和單元,可編程如下:

CLRAMOVR0,#0AH;計數(shù)器賦初值

LOOP:ADDA,R0;累加

DJNZR0,LOOP;判循環(huán)是否結束

SJMP$3)

子程序調用與返回指令組

子程序是獨立于主程序的具有特定功能的程序段,單獨編寫,能被主程序調用,又能返回主程序。按主程序與子程序兩者的關系有兩種調用情況,多次調用和子程序嵌套。圖11-3-10一級子程序調用示意圖

圖11-3-11二級子程序嵌套示意圖

調用指令在主程序中使用,返回指令則應該是子程序的最后一條指令,執(zhí)行完返回指令后,程序返回主程序斷點處繼續(xù)執(zhí)行。3)

子程序調用與返回指令組

堆棧和PC值的保留:

調用子程序時,CPU自動將PC的當前值(也稱斷點地址)保留在堆棧中,其中高位放在PCH,低位放PCL,子程序返回時,自動彈出,送入PC。3)

子程序調用與返回指令組

保護現(xiàn)場和恢復現(xiàn)場:

現(xiàn)場保護是指在子程序開始,使用壓棧指令將需要保護的單元內容存放在堆棧中的過程。

恢復現(xiàn)場是指在子程序返回前,通過出棧指令將被保護的內容送回原來的寄存器。3)

子程序調用與返回指令組

3)

子程序調用與返回指令組

子程序的絕對調用和長調用

目標地址形成方式與AJMP和LJMP相似不影響任何標志

1.絕對調用指令

ACALL

addr11LCALL

addr16

2.

長調用指令

對于ACALL,子程序首址在包含當前指令(即調用指令的下一條指令)的第一個字節(jié)在內的2K字節(jié)范圍內。

對于LCALL,子程序的首址可在64K字節(jié)范圍內的任何位置?!纠?1-3–26】已知(SP)=60H,執(zhí)行下列指令后: ①1000H:ACALL100H ②1000H:LCALL0800H

結果:①(SP)=62H,(61H)=02H,(62H)=10H,(PC)=1100H ②(SP)=62H,(61H)=03H,(62H)=10H,(PC)=0800H

RET從堆棧中彈出壓入堆棧保護的斷點地址,并送入指令計數(shù)器PC,返回到斷點處繼續(xù)執(zhí)行。3.返回指令

RETI專用于中斷服務程序返回,除返回中斷斷點處執(zhí)行主程序以外,并有清除內部相應的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。RETRETINOP

不產生任何控制操作,但:

PC的內容加1

消耗1個機器周期空間上占用一個字節(jié)。因此,常用來實現(xiàn)較短時間的延時。

常用來實現(xiàn)較短時間的延時。

4.空操作指令

5位操作類指令(17條)

以位為單位進行的各種操作。又稱布爾操作。位地址形式直接地址(如,0D5H)點操作符(如,0D0H.5、PSW.5等)位名稱(如,F(xiàn)0)偽指令定義(如,MYFLAGBITF0)。幾種形式表示的都是PSW中的位5。位操作指令中,位累加器要用字符“C”表示(注:在位操作指令中CY與具體的直接位地址D7H對應)。

MOVbit,C

MOVC,bit

指定位地址單元內容和位累加器之間的數(shù)據(jù)傳送。1)

位傳送指令

例如:MOV C, 06H MOV P1.0,C

位清02)

位變量修改指令

位累加器CY清0

例如:若(P1)=10011100B。執(zhí)行指令

CLRP1.3

結果為:(P1)=10010100B。CLR

C

CLR

bit

位地址內容清0

位置位

例若(P1)=10011100B。執(zhí)行指令

SETBP1.0

結果:(P1)=10011101B。

位累加器CY置1SETB

C

SETB

bit

位地址內容置12)

位變量修改指令

位邏輯“與”3)

位邏輯運算

例:若(P1)=10011100B,(CY)=1。

執(zhí)行指令

ANLC,P1.0

結果為:P1內容不變,而(CY)=0。

位地址單元內容取反后的值與位累加器內容“與”位地址單元內容與位累加器內容“與”ANL

C,bit

ANL

C,/bit

位邏輯“或”

位地址單元內容取反后的值與位累加器內容“或”

位地址單元內容與位累加器內容“或”O(jiān)RL

C,bitORL

C,/bit

位取反CPL

CCPL

bit3)

位邏輯運算

【例3–27】設P1為輸入口,P3為輸出口,執(zhí)行程序

MOV C, P1.0 ANL C, P1.1 ANL C, /P1.2 MOV P3.0,C

結果:P3.0=P1.0∧P1.1∧/P1.2。

3)

位邏輯運算

【例11-3-28】將位地址40H、41H中的內容進行異或,結果存入42H中。

分析:運算公式:Y=A⊕B=AB+AB

即:(42H)=(40H)⊕(41H)程序如下:

MOV C, 41H ANLC, /40H MOV 42H,C MOV C, 40H ANL C, /41H ORL C, 42H MOV 42H,C3)

位邏輯運算

判CY轉移4)

位控制轉移指令

當(CY)=1,轉向PC當前值與rel之和的目標地址執(zhí)行,否則程序順序執(zhí)行。

JC

relJNC

rel當(CY)=0,轉向PC當前值與rel之和的目標地址去執(zhí)行,否則程序順序執(zhí)行。

判bit轉移JB

bit,relJBC

bit,relJNB

bit,rel當(bit)=1,轉向PC當前值與rel之和的目標地址執(zhí)行,否則程序順序執(zhí)行。

當(bit)=0,轉向PC當前值與rel之和的目標地址執(zhí)行,否則程序順序執(zhí)行。

與上面指令相同,但還有將該位清0功能。

4)

位控制轉移指令

【例1】比較內部RAM中30H和40H中的兩個無符號數(shù)的大小,并將大數(shù)存入中,小數(shù)存入中。

什么情況片內RAM的127位置1。程序如下:

MOVA,30H CJNEA,40H,Q1 SETB127RETQ1:JCQ2

溫馨提示

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

評論

0/150

提交評論