C8051單片機基礎 第三章 指令系統(tǒng)與程序設計_第1頁
C8051單片機基礎 第三章 指令系統(tǒng)與程序設計_第2頁
C8051單片機基礎 第三章 指令系統(tǒng)與程序設計_第3頁
C8051單片機基礎 第三章 指令系統(tǒng)與程序設計_第4頁
C8051單片機基礎 第三章 指令系統(tǒng)與程序設計_第5頁
已閱讀5頁,還剩201頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章指令系統(tǒng)與程序設計

主講:吳國東

不同種類的單片機指令系統(tǒng)一般是不同的,但C8051F系列單片機的指令系統(tǒng)與MCS-51系列單片機相同。本章將介紹C8051F系列單片機指令系統(tǒng)的尋址方式、各類指令的格式及功能,還將介紹匯編語言偽指令及匯編程序設計。第3章指令系統(tǒng)與程序設計

指令是規(guī)定計算機進行某種操作的命令。一條指令只能完成有限的功能,為使計算機完成一定的或復雜的功能就需要一系列指令。計算機能夠執(zhí)行的各種指令的集合稱為指令系統(tǒng)。指令系統(tǒng)的性能與計算機硬件密切相關,不同的計算機指令系統(tǒng)不完全相同。計算機的主要功能也是由指令系統(tǒng)來體現(xiàn)的。3.1指令系統(tǒng)簡介

3.1指令系統(tǒng)簡介

C8051F的指令系統(tǒng)共有111條指令。

C8051F單片機有豐富的位操作指令,這樣可方便地用于各種邏輯控制,這是所有單片機指令系統(tǒng)的共同特點。

通常指令分為操作碼和操作數(shù)兩部分,操作碼規(guī)定操作的類型,操作數(shù)給出參加操作的數(shù)據(jù)或存放數(shù)據(jù)的地址。

3.1指令系統(tǒng)簡介

對于單字節(jié)指令有兩種情況:一種是操作碼、操作數(shù)均包含在這一字節(jié)之內;另一種情況是只有操作碼無操作數(shù)。對于雙字節(jié)指令,均為一字節(jié)是操作碼,一字節(jié)是操作數(shù);對于三字節(jié)指令,一般是一字節(jié)為操作碼,二字節(jié)為操作數(shù)。

3.1指令系統(tǒng)簡介

C8051F匯編指令格式如下:操作碼[操作數(shù)]

操作碼:是由助記符表示的字符串,它規(guī)定了指令的操作功能。

操作數(shù):是指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址。3.1指令系統(tǒng)簡介

在C8051F指令系統(tǒng)中,操作碼是指令的核心,不可缺少。操作碼與操作數(shù)之間必須用空格分隔,操作數(shù)與操作數(shù)之間必須用“,”分開,帶方括號的項稱可選項。操作數(shù)可以是1個、2個或3個,也可以沒有。不同功能的指令,操作數(shù)作用不同。3.1指令系統(tǒng)簡介

例如,傳送類指令多數(shù)有兩個操作數(shù),寫在左面的稱為目的操作數(shù),寫在右面的稱為源操作數(shù)。

操作數(shù)的表達方式較多,可以是常數(shù)、寄存器名、標號名、直接地址單元、表達式等,還可以使用一個特殊符號“$”,用來表示程序計數(shù)器的當前值,通常用在轉移指令中。操作數(shù)如果是常數(shù),必須用整數(shù),不能用分數(shù)和小數(shù),負數(shù)用補碼表示。3.1指令系統(tǒng)簡介

例如,一條傳送指令的書寫格式為:

MOV4AH,AA→(4AH)

表示將累加器A的內容送到4AH存儲單元中。3.2尋址方式尋址方式是指在指令代碼中用以表示操作數(shù)地址的各種規(guī)定,它指出了參與操作的數(shù)或數(shù)所在的地址。尋址方式與計算機的存儲器空間結構是密切聯(lián)系的,尋址方式越多則計算機的功能越強,靈活性亦越大,能更有效地處理各種數(shù)據(jù)。為了更好地理解、掌握指令系統(tǒng),需先了解它的尋址方式。3.2尋址方式3.2.1符號約定

說明C8051F系列的指令及對其功能時,需要描述寄存器、地址及數(shù)據(jù)等的符號,這些符號約定如下:

(1)Rn

當前選中的工作寄存器組R0~R7(n=0~7)。它在核內數(shù)據(jù)存儲器中的地址由PSW中RS1、RS0確定,可以是00H~07H(第0組)、08H~0FH(第1組)、10H~17H(第2組)、18H~1FH(第3組)。3.2尋址方式3.2.1符號約定

(2)Ri

當前選中的工作寄存器組中可作為地址指針的兩個工作寄存器R0、R1(i=0或1)。它在核內數(shù)據(jù)存儲器中的地址由RS0、RS1確定,分別為00H、01H;08H、09H;10H、11H;18H、19H。

(3)#data8位立即數(shù),即包含在指令中的8位常數(shù)。

3.2尋址方式3.2.1符號約定

(4)#data1616位立即數(shù),即包含在指令中的16位常數(shù)。

(5)direct8位核內RAM單元的直接地址或寄存器(包括SFR)。

(6)addr1111位目的地址。用于ACA11和AJMP指令中,目的地址必須放在與下一條指令第一個字節(jié)同一個2KB程序存儲器地址空間之內。3.2尋址方式3.2.1符號約定

(7)addr1616位目的地址。用于LCALL和LJMP指令中,目的地址范圍在64KB程序存儲器地址空間。

(8)rel

補碼形式的8位地址偏移量,表示相對跳轉的偏移字節(jié),用于相對轉移指令中。偏移量以下一條指令第一字節(jié)地址為基值,偏移范圍為-128~+127。3.2尋址方式3.2.1符號約定

(9)bit核內RAM或特殊功能寄存器的直接尋址位地址。

(10)@間接尋址方式中,表示間址寄存器的前綴符號。

(11)/位操作指令中,表示對該位取反操作的前綴符號。

(12)A累加器

(13)BB寄存器,用于乘、除指令中。3.2尋址方式3.2.1符號約定

(14)C進位標志或進位位,或位操作指令中的位累加器。

(15)SP堆棧地址指針。

(16)(X)在直接尋址方式中,X表示直接地址direct中的內容;在間接尋址方式中,X表示由間址寄存器Ri、DPTR、SP等指出的地址單元中的內容。3.2尋址方式3.2.1符號約定

(17)→指令操作流程,將箭頭左邊的內容送人箭頭右邊的單元內。

注意:在注釋操作數(shù)地址時,為簡潔明了,比英文原文少了一層括號,例如((Rn)),簡寫為(Rn);(A),簡寫為A等。在此只保留了直接地址direct的括號,因為直接地址通常是用數(shù)字表示,容易和數(shù)字#data引起混淆,這樣在注釋時也可以省去#data前的#。3.2尋址方式3.2.2尋址方式說明

C8051F系列指令共有7種尋址方式,下面將以指令為例逐一介紹。

1.立即尋址指令直接給出參加運算的操作數(shù)。在立即尋址方式中的操作數(shù)直接參與操作,所以又稱立即數(shù),立即數(shù)就是存放在程序存儲器中的常數(shù),在立即數(shù)前面必須加”#”號表示。

3.2尋址方式3.2.2尋址方式說明

例1執(zhí)行指令MOVA,#3DH

指令代碼為74H、3DH,雙字節(jié)指令。功能是把立即數(shù)3DH送入累加器A中。設把指令存放在存儲區(qū)的0100H、0101H兩單元(存放指令的起始地址是任意假設的)。該指令執(zhí)行過程如圖3-1所示(圖中數(shù)字均為十六進制并且省略后綴H)。3.2尋址方式3.2.2尋址方式說明

圖3-1MOVA,#3DH執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

例2執(zhí)行指令MOVDPTR,#1256H

指令代碼為90H、12H、56H,是三字節(jié)指令。功能是向地址指針DPTR傳送16位的立即數(shù),即把立即數(shù)的高8位送入DPH,低8位送入DPL。該指令執(zhí)行過程如圖3-2所示。3.2尋址方式3.2.2尋址方式說明

圖3-2MOVDPTR,#1256H執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

2.直接尋址在這種尋址方式中,指令直接給出參加運算的操作數(shù)地址。在C8051F單片機中,直接地址只能用來表示特殊功能寄存器、核內數(shù)據(jù)存儲器以及位地址空間。其中特殊功能寄存器和位地址空間只能用直接尋址方式來訪問。3.2尋址方式3.2.2尋址方式說明

例3執(zhí)行指令MOVA,3DH

指令代碼為E5H、3DH,雙字節(jié)指令。設該指令存放在程序存儲區(qū)的3DH、3EH單元,且核內RAM的3DH單元中存放的數(shù)值為3AH。當該指令執(zhí)行后,數(shù)值3AH就被送到A累加器中。指令執(zhí)行過程如圖3-3所示。3.2尋址方式3.2.2尋址方式說明

圖3-3MOVA,3DH執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

3.寄存器尋址在這種尋址方式中,操作數(shù)存放在所選定的寄存器中。這些寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。工作寄存器組的選擇是由狀態(tài)標志寄存器PSW中的RS1、RS0來確定。3.2尋址方式3.2.2尋址方式說明

例4執(zhí)行指令MOVA,R4

指令代碼的二進制形式為11101100,十六進制為ECH,注意,其二進制數(shù)低三位為100,正好為4,表示操作數(shù)在R4中。這就是操作碼、操作數(shù)均包含在一字節(jié)之內的情況。3.2尋址方式3.2.2尋址方式說明

現(xiàn)假設這條指令存放在4AH單元,且PSW中RS1、RS0的值分別為0、1,則可知現(xiàn)在的R6是屬于第1組工作寄存器的,那么它的地址為0CH?,F(xiàn)已知0CH中存放著數(shù)值58H,則執(zhí)行該指令后,58H就被送到A累加器中。該指令執(zhí)行過程如圖3-4所示。3.2尋址方式3.2.2尋址方式說明

圖3-4MOVA,R4執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

4.寄存器間接尋址在這種尋址方式中,寄存器中存放的數(shù)值不是操作數(shù),而是操作數(shù)的地址。這種尋址方式用于訪問核內數(shù)據(jù)存儲器(RAM)或片外數(shù)據(jù)存儲器(RAM)。3.2尋址方式3.2.2尋址方式說明

4.寄存器間接尋址當訪問核內RAM低128字節(jié)或片外RAM低256字節(jié)時,可采用當前工作寄存器組中的R0或R工作間接地址寄存器,即由R0或R1間接給出操作數(shù)所在的地址,這樣R0或R1為存放操作數(shù)單元的地址指針。在間接地址寄存器前面一定要加@表示。

3.2尋址方式3.2.2尋址方式說明

例5執(zhí)行指令MOVA,@R0

指令代碼為E6H,是單字節(jié)指令。指令的源操作數(shù)存放在核內數(shù)據(jù)存儲器中?,F(xiàn)假設此指令存放在30H單元,工作寄存器為第0組,R0中存放50H,50H為核內RAM的一個單元,現(xiàn)50H中存放數(shù)值為5AH。則執(zhí)行該指令后,5AH就送入ACC中。該指令執(zhí)行過程如圖3-5所示。3.2尋址方式3.2.2尋址方式說明

圖3-5MOVA,@R0執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

例6執(zhí)行指令MOVXA,@R1

指令代碼為E3H,是單字節(jié)指令。源操作數(shù)存放在片外數(shù)據(jù)存儲器中?,F(xiàn)假設此指令存放在170H單元,工作寄存器組為第3組,在R1中存放的數(shù)值為C3H,片外數(shù)據(jù)存儲器C3H單元中值為1FH,則執(zhí)行該指令后,1FH就送入ACC中。該指令執(zhí)行過程如圖3-6所示。3.2尋址方式3.2.2尋址方式說明

圖3-6MOVXA,@RI執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

訪問片外數(shù)據(jù)存儲器時,還可用數(shù)據(jù)指針DPTR作間址寄存器。DPTR是16位寄存器,故它可對整個64KB片外數(shù)據(jù)存儲器空間尋址。例如指令MOVXA,@DPTR,其功能是把DPTR指定的片外RAM中的內容送到A中。在執(zhí)行PUSH(壓棧)和POP(出棧)指令時,采用堆棧指針SP作寄存器間接尋址。3.2尋址方式3.2.2尋址方式說明

5.變址尋址(基址+變址寄存器間接尋址)

這種尋址方式以DPTR或PC為基址寄存器,累加器A為變址寄存器。變址尋址時,把兩者的內容相加,所得到的結果作為操作數(shù)的地址。這種方式常用于查表操作。例

MOVCA,@A+DPTR

3.2尋址方式3.2.2尋址方式說明

例7執(zhí)行指令MOVCA,@A+DPTR

指令代碼為93H,是單字節(jié)指令。假設此指令存放在1070H單元,ACC中原存放值為DCH,DPTR中值為1000H,則A+DPTR形成的地址為10DCH。10DCH單元內容為1FH,則執(zhí)行指令后,ACC中原DCH被1FH代替。該指令執(zhí)行過程如圖3-7所示。3.2尋址方式3.2.2尋址方式說明

圖3-7MOVCA,@A+DPTR執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

6.相對尋址相對尋址只用于相對轉移指令中,這種尋址方式是將程序計數(shù)器PC中的當前內容與指令第二字節(jié)所給出的數(shù)相加,其結果作為跳轉指令的轉移地址,轉移地址也稱為轉移目的地址。3.2尋址方式3.2.2尋址方式說明

PC中的當前內容稱為基地址(它實際是本指令之后的字節(jié)地址),指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量。偏移量為帶符號的數(shù),其表示的范圍為-128~+127。

目的地址是相對于PC的基地址而言,所以這種尋址方式主要用于跳轉指令。

3.2尋址方式3.2.2尋址方式說明

轉移目的地址可如下式計算:

目的地址=源地址+轉移指令字節(jié)數(shù)+re1

源地址指轉移指令所在單元地址,不同的轉移指令字節(jié)數(shù)一般是不同的,通常為2字節(jié)或3字節(jié)。re1為偏移量。3.2尋址方式3.2.2尋址方式說明

在編程時這個偏移量的值可以直接用數(shù)字量,也可以用標號表示。通常不必手工計算,只需用地址標號代替即可,匯編程序可自動計算出目的地址。例8執(zhí)行指令JNZ30H3.2尋址方式3.2.2尋址方式說明

例8執(zhí)行指令JNZ30H

指令代碼為70H、30H,雙字節(jié)指令。此指令表示若A=0,則程序順序執(zhí)行,即不跳轉,PC=PC+2;若A≠0,則以PC中的當前內容為基地址,加上偏移量30H后所得到的結果為該轉移指令的目的地址。3.2尋址方式3.2.2尋址方式說明

假設此指令存放在1000H、1001H單元,且目前A≠O,則取指令后,PC當前內容為1002H,對A進行判斷后,把PC當前內容與偏移量30H相加,得到轉移目的地址1032H。所以執(zhí)行完此指令后,PC中的值為1032H,程序將從1032H開始執(zhí)行。該指令執(zhí)行過程如圖3-8所示。3.2尋址方式3.2.2尋址方式說明

圖3-8JNZ30H執(zhí)行示意圖3.2尋址方式3.2.2尋址方式說明

7.位尋址位尋址是指對核內RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器中的任意二進制位,進行位操作時的尋址方式。在進行位操作時,用進位位C作為操作累加器。位地址與字節(jié)直接尋址中的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分。3.2尋址方式3.2.2尋址方式說明

例9執(zhí)行指令SETB6AH

指令代碼為D2H、6AH,雙字節(jié)指令。

6AH位是核內RAM中2DH單元的第2位。假設2DH中原內容為00H,那么執(zhí)行此指令后,就把6AH這一位置1。所以2DH中內容就變?yōu)?4H。圖3-9為該指令執(zhí)行示意圖。3.2尋址方式3.2.2尋址方式說明

圖3-9SETB6AH執(zhí)行示意圖3.2尋址方式

C8051指令系統(tǒng)中的7種尋址方式所涉及的存儲器空間。3.3指令系統(tǒng)3.3指令系統(tǒng)

C8051F的指令系統(tǒng)按功能可分為5大類,即:數(shù)據(jù)傳送類、算術運算類、邏輯運算類、控制轉移類、位操作類。本節(jié)將介紹各類指令的助記符、功能及尋址方式

3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

數(shù)據(jù)傳送類指令是最常用、最基本的一類指令。傳送類指令一般不影響標志位,只有堆棧操作可以直接修改程序狀態(tài)字PSW。另外,對于傳送目的操作數(shù)為ACC的指令將影響奇偶標志PF。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共8種。源操作數(shù)可以采用寄存器尋址、寄存器間接尋址、直接尋址、立即尋址、變址尋址5種尋址方式,目的操作數(shù)可以采用前3種尋址方式。數(shù)據(jù)傳送指令共有29條,分為以下5類進行介紹。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

1.內部RAM數(shù)據(jù)傳送指令單片機內部的數(shù)據(jù)傳送指令最多,包括寄存器、累加器、核內RAM單元及專用寄存器之間數(shù)據(jù)的相互傳送。下面分類介紹:3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

1)累加器為目的操作數(shù)的指令(4條)匯編指令格式:

MOVA,Rn;Rn→AMOVA,direct;(direct)→AMOVA,@Ri;(Ri)→AMOVA,#data;data→A3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

1)累加器為目的操作數(shù)的指令(4條)

這組指令的功能是將源操作數(shù)所指定的內容送人累加器A。源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址4種尋址方式。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

2)以寄存器Rn為目的操作數(shù)的指令(3條)

匯編指令格式:

MOVRn,A;A→RnMOVRn,direct;(direct)→RnMOVRn,#data;data→Rn3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

這組指令的功能是把源操作數(shù)所指定的內容送到當前工作寄存器組R0~R7中的某個寄存器中。源操作數(shù)有寄存器尋址、直接尋址、立即尋址3種尋址方式。注意:沒有“MOVRn,Rn"指令。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

例1A=5BH,R1=10H,R2=20H,

R3=A0H,(A0H)=4FH,執(zhí)行指令:

MOVR1,A;A→R1MOVR2,0A0H;(A0H)→R2MOVR3,#83H;83H→R3執(zhí)行后,R1=5BH,R2=4FH,R3=83H。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

3)以直接地址為目的操作數(shù)的指令(5條)

匯編指令格式:

MOVdirect,A;A→(direct)MOVdirect,Rn

;Rn→(direct)

MOVdirect,direct

;(direct)→(direct)MOVdirect,@Ri

;(Ri)→(direct)MOVdirect,#data;data→(direct)3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

這組指令的功能是把源操作數(shù)所指定的內容送入由直接地址direct所指出的核內存儲單元中。源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址、立即尋址等尋址方式。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

例2已知:R1中內容為57H,核內存儲單元57H中內容為E7H,現(xiàn)執(zhí)行如下指令:

MOV43H,@R1;(R1)→(43H)

該指令執(zhí)行結果43H單元中為E7H。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

注意:

“MOVdirect,direct”指令譯成機器碼時,源地址在前,目的地址在后。如“MOV0A0H,90H”機器碼為85,90,A0。另外,在匯編指令中,寄存器可寫成地址形式,也可寫成代號形式。例如:

MOV090H,A,也可寫成MOVP1,A。因為90H為P1的地址。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

4)以間接地址為目的操作數(shù)的指令(3條)匯編指令格式:

MOV@Ri,A;A→(Ri)MOV@Ri,direct;(direct)→(Ri)MOV@Ri,#data;data一(Ri)3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

這組指令的功能是把源操作數(shù)所指定的內容送入以R0或R1為地址指針的核內存儲單元中。源操作數(shù)有寄存器尋址、直接尋址和立即尋址3種尋址方式。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

5)16位數(shù)據(jù)傳送指令(1條)匯編指令格式:

MOVDPTR,#data16;dataH→

DPH,dataL→DPL

對于C8051F單片機,這是惟一的16位立即數(shù)傳送指令。其功能是把16位常數(shù)送入

DPTR。

3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

2.外部數(shù)據(jù)傳送指令(4條)

在C8051F指令系統(tǒng)中,CPU對核外RAM的訪問只能用寄存器間接尋址的方式。匯編指令格式:

MOVXA,@Ri;(Ri)一AMOVX@Ri,A;A→(Ri)MOVXA,@DPTR;(DPTR)一AMOVX@DPTR,A;A→(DPTR)3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

外部數(shù)據(jù)傳送指令主要是實現(xiàn)累加器A與核外數(shù)據(jù)存儲器之間的數(shù)據(jù)傳送,但要注意的是,對于C8051F單片機核內的高128字節(jié)RAM也要用這類指令傳送。片外數(shù)據(jù)存儲器的地址總線低8位和高8位分別由功能選擇開關寄存器配置。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

MOVXA,@Ri;(Ri)一AMOVX@Ri,A;A→(Ri)

上述兩條指令是用R0或R1作低8位地址指針,由I/O的低端口送出,尋址范圍是256字節(jié)。這兩條指令完成以R0或R1為地址指針的核外數(shù)據(jù)存儲器與累加器A之間的數(shù)據(jù)傳送。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

MOVXA,@DPTR;(DPTR)一AMOVX@DPTR,A;A→(DPTR)

上述兩條指令以DPTR為核外數(shù)據(jù)存儲器16位地址指針,尋址范圍達64KB。其功能是在DPTR所指定的核外數(shù)據(jù)存儲器與累加器A之間傳送數(shù)據(jù)。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

由于在C8051F指令系統(tǒng)中,沒有專門對外設的輸入輸出指令,且片外擴展的I/O接口地址與片外RAM是統(tǒng)一編址的。如果在片外數(shù)據(jù)存儲器的地址空間上插入I/O接口,則上面的4條指令就可以作為輸入輸出指令。C8051F單片機只能用這種指令方式與外部設備打交道。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

例3把C8051F單片機核內90H單元中的數(shù)傳送到口地址為B000H的設備中去。程序如下:

MOVR0,#90H;90H→R0MOVXA,@R0;(R0)→AMOVDPTR,#0B000H;B000H→DPTRMOVX@DPTR,A;A→(DPTR)3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

3.查表指令(2條)匯編指令格式:

MOVCA,@A+PC;PC+1→PC,(A+PC)→AMOVCA,@A+DPTR;(A+DPTR)→A

這2條指令主要用于查表,其數(shù)據(jù)表格通常放在程序存儲器中。這兩條指令執(zhí)行后,不改變PC或DPTR的內容。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

MOVCA,@A+PC為單字節(jié)指令,當CPU讀取指令后,PC的內容自動加1。其操作是將新的PC的內容與累加器A內8位無符號數(shù)相加形成地址,取出該地址單元中的內容送累加器A。這種指令查表很方便,但只能查找指令所在地址以后256字節(jié)范圍內的代碼或常數(shù)。3.3指令系統(tǒng)例4在程序存儲器中,數(shù)據(jù)表格為:

1010H:02H1011H:04H1012H:06H1013H:08H執(zhí)行程序

1000H:MOVA,#ODH;0DH→A1002H:MOVCA,@A+PC;(0DH+1003H)→A1003H:MOVR0,A;A→R0結果:A=02H,R0=02H,PC=1004H3.3指令系統(tǒng)例5在程序存儲器中,數(shù)據(jù)表格為:

7010H:02H7011H:04H7012H:06H7013H:08H執(zhí)行程序

1004H:MOVA,#10H;10H→A1006H:MOVDPTR,#7000H;7000H→DPTR1009H:MOVCA,@A+DPTR;(10H+7000H)→A結果:A=02H,PC=100AH3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

4.堆棧操作指令(2條)匯編指令格式:

PUSHdirect;SP+1→SP,(direct)→(SP)POPdirect;(SP)→(direct),SP-1→SP3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

使用堆棧時,一般需重新設定SP的初始值。由于壓入堆棧的第1個數(shù),必須存放在SP+1存儲單元,故實際棧底是在SP+1所指出的單元中。另外,要注意留出足夠的存儲單元作棧區(qū),因為棧頂是隨數(shù)據(jù)的彈入和彈出變化的,如棧區(qū)設置不當,則可能發(fā)生數(shù)據(jù)重疊,這樣會引起程序混亂,以致無法運行。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

一般情況下,執(zhí)行此指令不影響標志,但若目標操作數(shù)為PSW,則有可能使一些標志改變。這也是通過指令強行修改標志的一種方法。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

例6已知堆棧指針為30H,核內RAM50H單元中存放數(shù)值為3FH,把此數(shù)值壓入堆棧,然后再彈出到67H單元中。根據(jù)題意編寫指令如下:

MOVSP,#30H;30H→SP,設堆棧指針

PUSH50H;SP+1→SP,(50H)→(31H),

3FH送入31H中

POP67H;(31H)→(67H),SP-1→SP3.3指令系統(tǒng)

程序執(zhí)行過程如圖3-10所示。圖3-10例6程序執(zhí)行示意圖結果:數(shù)值3FH裝入67H單元內,SP終值為30H。

3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

5.交換指令(5條)匯編指令格式:

XCHA,Rn;A←→RnXCHA,direct;A←→(direct)XCHA,@Ri;A←→(Ri)XCHDA,@Ri;A.3~A.0←→(Ri.3~Ri.0)SWAPA;A.3~A.0←→A.7~A.43.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

這組指令的前3條為全字節(jié)交換指令。其功能是將累加器A與源操作數(shù)所指出的數(shù)據(jù)相互交換。這組指令的后2條為半字節(jié)交換指令。其中XCHDA,@Ri是將累加器A中低4位與Ri中的內容所指示的核內RAM單元中的低4位數(shù)據(jù)相互交換,各自的高4位不變。3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令

例7A中內容為FFH,R0中內容為5BH,5BH中內容為6DH,執(zhí)行指令XCHDA,@R0后,ACC中內容變?yōu)镕DH,5BH中內容變?yōu)?FH。

SWAPA指令是將累加器A的高低兩個半字節(jié)交換。例如:A=F0H,執(zhí)行指令SWAPA后,A=0FH。3.3指令系統(tǒng)3.3.2算術運算類指令

算術運算類指令主要是對8位無符號數(shù)據(jù)進行算術操作,其中包括加法、減法、加1、減1以及乘法和除法運算指令;借助溢出標志,可對有符號數(shù)進行補碼運算;借助進位標志,可進行多字節(jié)加、減運算;也可以對BCD碼進行運算。算術運算指令都影響程序狀態(tài)標志寄存器PSW的有關位。對這一類指令要特別注意正確地判斷結果對標志位的影響。3.3指令系統(tǒng)3.3.2算術運算類指令

算術運算類指令共有24條,下分類介紹。1.加法指令(4條)匯編指令格式:

ADDA,Rn;A+Rn—AADDA,direct;A+(direct)→AADDA,@Ri;A+(Ri)→AADDA,#data;A+data(→A3.3指令系統(tǒng)3.3.2算術運算類指令

這組指令的功能是把源操作數(shù)所指出的內容加到累加器A,其結果存在A中。

加法運算指令執(zhí)行結果影響PSW的進位位CY、溢出位OV、半進位位AC和奇偶校驗位P。在加法運算中,如果位7有進位,則進位位CY置1,否則清0;如果位3有進位,則半進位位AC置1,否則清0。若看作兩個帶符號數(shù)相加,還要判斷溢出位OV,若OV為1,表示和數(shù)溢出。3.3指令系統(tǒng)3.3.2算術運算類指令

例8已知A=8CH,執(zhí)行指令ADDA,#85H,則操作結果如下。

A=11H,CY=1,OV=1,AC=1,P=0。若把8CH、85H看作無符號數(shù)相加,則結果為111H,在看作無符號數(shù)時,不考慮OV位;若把上述兩值看作有符號數(shù),則有兩個負數(shù)相加得到正數(shù)的錯誤結論,此時OV=1表示有溢出,指出了這一錯誤。3.3指令系統(tǒng)3.3.2算術運算類指令

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

匯編指令格式:

ADDCA,Rn;A+Rn+CY→AADDCA,direct;A+(direct)+CY→AADDCA,@Ri;A+(Ri)+CY→AADDCA,#data;A+data+CY→A3.3指令系統(tǒng)3.3.2算術運算類指令

這組指令的功能是把源操作數(shù)所指出的內容和累加器內容及進位標志CY相加,結果存放在A中。運算結果對PSW各位的影響同上述加法指令。

帶進位加法指令多用于多字節(jié)數(shù)的加法運算,在低位字節(jié)相加時要考慮低字節(jié)有可能向高字節(jié)進位。因此,在作多字節(jié)加法運算時,必須使用帶進位的加法指令。3.3指令系統(tǒng)3.3.2算術運算類指令

例9已知A=8CH,R1=85H,CY=1,執(zhí)行指令ADDCA,R1,則操作結果如下:

A=12H,CY=1,OV=1,

AC=1,P=0。3.3指令系統(tǒng)3.3.2算術運算類指令

3.帶借位減法指令(4條)

匯編指令格式:

SUBBA,Rn;A-Rn-CY→ASUBBA,direct;A-(direct)-CY→ASUBBA,@Ri

;

A-(Ri)-CY→ASUBBA,#data;

A-data-CY→A3.3指令系統(tǒng)3.3.2算術運算類指令

這組指令的功能是將累加器A中的數(shù)減去源操作數(shù)所指出的數(shù)和進位位CY,其差值存放在累加器A中。注意:C8051F指令系統(tǒng)中沒有不帶借位的減法指令。減法運算指令執(zhí)行結果影響PSW的進位位CY、溢出位OV、半進位位AC和奇偶位P。3.3指令系統(tǒng)3.3.2算術運算類指令

在多字節(jié)減法運算中,被減數(shù)的低字節(jié)有時會向高字節(jié)產生借位(即CY置1),所以在多字節(jié)運算中必須用帶借位減法指令。在進行單字節(jié)減法或多字節(jié)的低8位字節(jié)減法運算時,應先將程序狀態(tài)標志寄存器PSW的進位位CY清“0”。3.3指令系統(tǒng)3.3.2算術運算類指令

例10已知A=ACHR4=67HCY=1,執(zhí)行指令SUBBA,R4,則操作結果如下:

A=42H,CY=0,AC=1,OV=1。3.3指令系統(tǒng)3.3.2算術運算類指令

例10已知A=ACHR4=67HCY=1,執(zhí)行指令SUBBA,R4,則操作結果如下:

A=42H,CY=0,AC=1,OV=1。若看作是兩個無符號數(shù)相減,結果42H是正確的;若看作有符號數(shù)相減,則得出負數(shù)減正數(shù)結果是正數(shù)的錯誤結論,OV=1,指出了這一錯誤。

3.3指令系統(tǒng)3.3.2算術運算類指令

4.乘法指令(1條)匯編指令格式:

MULAB;A×B→BA

功能是把累加器A和寄存器B中兩個無符號8位數(shù)相乘,所得16位積低字節(jié)存放在A中、高字節(jié)存放在B中。若乘積大于FFH,則OV置1,否則清0,CY總是為0。另外,此指令也影響奇偶標志位。3.3指令系統(tǒng)3.3.2算術運算類指令

乘法運算指令執(zhí)行結果影響PSW的溢出位OV、奇偶校驗位P。例11已知A=ABH,B=47H,執(zhí)行指令MULAB,則操作如下所示:結果:

B=2FH,A=6DH,OV=1,P=1。3.3指令系統(tǒng)3.3.2算術運算類指令

5,除法指令(1條)

匯編指令格式:

DIVAB;A/B的商→A,余數(shù)→B

指令的功能是進行A除以B的運算,A和B的內容均為8位無符號整數(shù)。指令執(zhí)行后,整數(shù)商存于A中,余數(shù)存于B中。3.3指令系統(tǒng)3.3.2算術運算類指令

指令執(zhí)行結果影響PSW的溢出位OV和奇偶校驗位P。指令執(zhí)行后,標志CY和OV均清為0,當除數(shù)為0時,A和B中的內容為不確定值,此時OV標志置1,說明除法溢出,A中的內容影響奇偶校驗位P。例12已知A=ADH,B=0CH,求A除B的結果。解:執(zhí)行指令DIVAB,得計算結果如下:

A=14(0EH),B=5,CY=0,OV=0,P=0。3.3指令系統(tǒng)

6.加1/減1指令(9條)

匯編指令格式:

INCA;A+→AINCRn;Rn+1→RnINCdirect;(direct)+1→(direct)INC@Ri;(Ri)+1→(Ri)INCDPTR;DPTR+1→DPTRDECA;A—1→ADECRn;Rn—1→RnDECdirect;(direct)—1→(direct)DEC@Ri;(Ri)—1→(Ri)3.3指令系統(tǒng)3.3.2算術運算類指令

指令的功能是將操作數(shù)所指定單元的內容加1/減1,加1、減1指令僅當源操作數(shù)為A時,對PSW的奇偶校驗位P有影響,其余指令操作均不影響PSW。例13已知DPTR=20FFH,執(zhí)行指令INCDPTR。結果:DPTR=2100H。3.3指令系統(tǒng)3.3.2算術運算類指令

7.十進制調整指令(1條)

匯編指令格式:

DAA

指令是在進行BCD碼加法運算時,跟在ADD和ADDC指令之后,用來對壓縮BCD碼的加法運算結果自動進行修正,使其仍為BCD碼表達形式。3.3指令系統(tǒng)3.3.2算術運算類指令

在計算機中,遇到十進制調整指令時,中間結果的修正是由ALU硬件中的十進制修正電路自動進行的。用戶不必考慮何時該加“6”,使用時只需在上述加法指令后面緊跟一條DAA指令即可。注意:DAA不對減法指令的結果進行修正。3.3指令系統(tǒng)3.3.3邏輯操作類指令

這一類指令主要是用于對兩個操作數(shù)按位進行“與”、“或”、“異或”邏輯操作,操作結果送到A累加器或直接尋址單元。移位、取反、清除等操作也包括在這一類指令中。這些指令執(zhí)行時一般不影響程序狀態(tài)字寄存器PSW,僅當目的操作數(shù)為ACC時,對奇偶標志位有影響。3.3指令系統(tǒng)3.3.3邏輯操作類指令

邏輯運算類指令共24條,下面分類介紹。

1.邏輯與指令(6條)

匯編指令格式:

ANLA,Rn;A·Rn→AANLA,direct;A·(direct)→AANLA,@Ri;A·(Ri)→AANLA,#data;A·data→AANLdirect,A;(direct)·A→(direct)

ANLdirect,#data;(direct)·data→(direct)3.3指令系統(tǒng)3.3.3邏輯操作類指令

這組指令的功能是將兩個指定的操作數(shù)按位邏輯與,結果存到目的操作數(shù)中。前4條指令是將累加器A的內容和操作數(shù)的內容按位邏輯與,結果存放在A中。指令執(zhí)行結果影響奇偶標志位P。

例14已知A=8FH,(60H)=96H,執(zhí)行指令ANLA,60H,則操作結果為:

A=86H,(60H)=96H,P=1。3.3指令系統(tǒng)3.3.3邏輯操作類指令

2.邏輯或指令(6條)

匯編指令格式:

ORLA,Rn;A+Rn→AORLA,direct;A+(direct)→AORLA,@Ri;A+(Ri)→AORLA,#data;A+data→AORLdirect,A;(direct)+A→(direct)ORLdirect,#data;(direct)+data→(direct)3.3指令系統(tǒng)3.3.3邏輯操作類指令

這組指令的功能是將兩個指定的操作數(shù)按位邏輯或,結果存到目的操作數(shù)中。執(zhí)行后對奇偶標志位P及I/O端口的影響與上述“與”指令相同。3.3指令系統(tǒng)3.3.3邏輯操作類指令例15將累加器A中低4位的狀態(tài),通過P1口的高4位輸出。解:編程如下:

ANLA,#0FH;屏蔽A.7~A.4SWAPA;高、低半字節(jié)交換

ANLP1,#0FH;清P1端口高4位

ORLP1,A;使P1.7~P1.4按A中初始值的

;A.3~A.0值置位本例中交換高、低半字節(jié)的功能也可用4條RLA指令實現(xiàn)。3.3指令系統(tǒng)3.3.3邏輯操作類指令

3.邏輯異或指令(6條)

匯編指令格式:

XRLA,Rn;ARn→AXRLA,direct;A(direct)→AXRLA,@Ri;A(Ri)→AXRLA,#data;Adara→AXRLdirect,A;(direct)A→(direct)

XRLdirect,#data;(direct)data→(direct)3.3指令系統(tǒng)3.3.3邏輯操作類指令

這組指令的功能是將兩個指定的操作數(shù)按位異或,結果存到目的操作數(shù)中。執(zhí)行后對奇偶標志位P及I/O端口的影響與上述“與”指令相同。例16已知A=87H,(65H)=A7H,執(zhí)行指令XRL65H,A;則操作結果如下:

A=87H,(65H)=20H,P=1。3.3指令系統(tǒng)3.3.3邏輯操作類指令

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

匯編指令格式:

RLARRARLCARRCA3.3指令系統(tǒng)3.3.3邏輯操作類指令循環(huán)移位指令執(zhí)行示意圖

3.3指令系統(tǒng)3.3.3邏輯操作類指令

RLA和RRA指令分別稱為循環(huán)左移和循環(huán)右移指令。功能分別是將累加器A的內容循環(huán)左移或右移1位,執(zhí)行后不影響PSW中各位。

RLCA和RRCA指令分別稱為帶進位循環(huán)左移指令和帶進位循環(huán)右移指令。這兩條指令的功能分別是將累加器A的內容與進位位CY一起循環(huán)左移或右移1位,執(zhí)行后影響PSW中的進位位CY和奇偶狀態(tài)標志位P。3.3指令系統(tǒng)3.3.3邏輯操作類指令

例17A=EBH,CY=1,執(zhí)行指令RLCA。結果:A=D7H,CY=1,P=05.取反指令(1條)匯編指令格式:

CPLA;

功能是將累加器A的內容按位取反。3.3指令系統(tǒng)3.3.3邏輯操作類指令

6.清0指令(1條)

匯編指令格式:

CLRA;0→A

本指令功能是將累加器A的內容清0。3.3指令系統(tǒng)3.3.4控制轉移類指令

這一類指令的功能主要是控制程序從原順序執(zhí)行地址轉移到其他指令地址上。計算機在運行過程中,有時因為任務要求,需要改變程序運行方向;或者需要調用子程序;或者需要從子程序中返回,此時都需要改變程序計數(shù)器PC中的內容,控制轉移類指令就可實現(xiàn)這一要求。3.3指令系統(tǒng)3.3.4控制轉移類指令

控制程序轉移類指令包括無條件轉移和條件轉移,絕對轉移和相對轉移,長轉移和短轉移,還有調用指令和返回指令等。這類指令多數(shù)不影響程序狀態(tài)標志寄存器。指令系統(tǒng)中有17條(不包括位操作類的4條轉移指令)控制程序轉移類指令。3.3指令系統(tǒng)3.3.4控制轉移類指令

1.無條件轉移指令(4條)

匯編指令格式:

LJMPaddr16;addr16→PCAJMPaddr11;PC+2→PC,addr11→PC.10~PC.0SJMPrel;PC+2+rel→PCJMP@A+DPTR;A+DPTR→PC3.3指令系統(tǒng)3.3.4控制轉移類指令

LJMPaddr16長轉移指令。該指令中包含16位地址,所以轉移的目標地址范圍是程序存儲器的0000H~FFFFH。指令執(zhí)行結果是將16位地址addr16送程序計數(shù)器PC。例18執(zhí)行如下指令:

0023HLJMP2400H

執(zhí)行后PC值由0026H變?yōu)?400H。3.3指令系統(tǒng)3.3.4控制轉移類指令

AJMPaddr11絕對(或短)轉移指令。該指令中包含要改變的低11位地址,轉移的目標地址是在下一條指令地址開始的2KB范圍內。它把PC的高5位與操作碼的第7位~第5位(A10~A8)及操作數(shù)的8位并在一起,構成16位的轉移地址。3.3指令系統(tǒng)3.3.4控制轉移類指令

因為地址高5位保持不變,為原PC的高5位,僅低11位發(fā)生變化,因此尋址范圍必須在該指令地址加2后的2KB區(qū)域內。

例19執(zhí)行如下指令:

1300HAJMP1600H

執(zhí)行后PC值由1302H變?yōu)?600H。3.3指令系統(tǒng)3.3.4控制轉移類指令

SJMPre1無條件相對轉移指令。該指令為雙字節(jié),指令的操作數(shù)是相對地址,rel是一個帶符號的偏移字節(jié)數(shù)(補碼),其范圍為-128~+127。負數(shù)表示向后轉移,正數(shù)表示向前轉移,該指令執(zhí)行后目的地址值如下式計算:

目的地址值=本指令地址值+2+re1。3.3指令系統(tǒng)3.3.4控制轉移類指令

在用匯編語言編寫程序時,可以用一個標號表示轉移目標地址的偏移量re1,此時匯編程序可以自動計算出偏移地址,避免了人工匯編的麻煩且不容易出錯。3.3指令系統(tǒng)3.3.4控制轉移類指令

JMP@A+DPTR無條件間接轉移指令。

該指令轉移地址由數(shù)據(jù)指針DPTR的16位數(shù)和累加器A的8位無符號數(shù)相加形成,并直接送入PC。指令執(zhí)行過程對DPTR、A和標志位均無影響。這條指令可代替眾多的判別跳轉指令,具有散轉功能(又稱散轉指令)。在實際編程中不必寫出具體的轉移目的地址,通常只需要給出地址標號即可。3.3指令系統(tǒng)3.3.4控制轉移類指令

2.條件轉移指令(8條)

匯編指令格式:

JZrel;A=0:PC+2+re1→PC;A≠0:PC+2→PCJNZrel;A≠0:PC+2+re1→PC;A=0:PC+2→PCCJNEA,direct,rel;A=(direct):PC+3→PC,0→C;A>(direct):PC+3+rel→PC,0→C;A<(direct):PC+3+rel→PC,1→C3.3指令系統(tǒng)

CJNEA,#data,rel;A=data:PC+3→PC,0→C;A>data:PC+3+rel→PC,0→C;A<data:PC+3+rel→PC,1→CCJNERn,#data,rel;Rn=data:PC+3→PC,0→C;Rn>data:PC+3+rel→PC,0→C;Rn<data:PC+3+rel→PC,1→CCJNE@Ri,#data,rel;(Ri)=data:PC+3→PC,0→C;(Ri)>data:PC+3+rel→PC,0→C;(Ri)<data:PC+3+rel→PC,1→CDJNZRn,rel;Rn-1→Rn,Rn≠0:PC+2+rel→PC

Rn=0:PC+2→PC3.3指令系統(tǒng)3.3.4控制轉移類指令

DJNZdirect,rel;(direct)-1→(direct),

;(direct)≠0:PC+3+rel→PC;(direct)=0:PC+3→PC

這一類指令都是以相對轉移的方式轉向目標地址的。它們的共同特點是轉移前要先測試某一條件是否滿足,只有滿足規(guī)定條件時,程序才能轉到指定轉移地址,否則程序將繼續(xù)執(zhí)行下一條指令。條件是由條件轉移指令本身提供的。3.3指令系統(tǒng)例20將累加器A的內容由零遞增,加到50,結果存在累加器A中。解:根據(jù)題意可編程如下:地址機器碼源程序

200E4CLRA;0→A201755032MOV50H,#50;50→(50H)20404L1:INCA;A+1→A205D550FCDJNZ50H,L1;(50H)-1→(50H),

;(50H)≠0:PC+3-4→PC;(50H)=0:PC+3→PC

標號11在此代表偏移量,應該為-4,用補碼表示為FCH,當用標號表示后就不用換算為補碼了。3.3指令系統(tǒng)

3.調用子程序及返回指令(4條)

匯編指令格式:

LCALLaddr16;PC+3→PC,SP+1→SP,

;PCL→(SP),SP+1→SP,

;PCH→(SP),addr16→PCACALLaddr11;PC+2→PC,SP+1→SP,

;PCL→(SP),SP+1→SP,

;PCH→(SP),;addr11→PC.10~PC.03.3指令系統(tǒng)

3.調用子程序及返回指令(4條)

匯編指令格式:

RET;(SP)→PCH,SP—1→SP,

;(SP)→PCL,SP—1→SPRETI;除具有RET指令的功能外,還將清

;除內部相應的中斷狀態(tài)觸發(fā)器3.3指令系統(tǒng)3.3.4控制轉移類指令

這組指令用于實現(xiàn)從主程序中調用子程序和從子程序中返回到主程序的功能。調用和返回構成了子程序調用的完整過程。此類指令不影響標志位。3.3指令系統(tǒng)3.3.4控制轉移類指令

LCALLaddr16稱為長調用指令(三字節(jié))。執(zhí)行時,先將PC加3,指向下條指令地址(即斷點地址),然后將斷點地址壓入堆棧,先把PC的低8位PCL壓入堆棧,再壓入PC的高8位PCH,然后把指令中的16位子程序入口地址裝入PC,程序轉到子程序。子程序入口地址可以設在64KB的空間中。3.3指令系統(tǒng)3.3.4控制轉移類指令

ACALLaddr11稱為絕對(也稱短)調用指令(雙字節(jié)),其保護斷點地址過程同上,但PC只需加2,其轉入子程序入口的過程類同“LCALL”指令。被調用的子程序入口地址必須與調用指令ACALL下一條指令的第1個字節(jié)在相同的2KB存儲區(qū)之內。其操作碼的形成類同于“AJMP"指令。3.3指令系統(tǒng)3.3.4控制轉移類指令

RET指令是子程序返回指令。執(zhí)行時將堆棧內的斷點地址彈出送入PC,使程序返回到原斷點地址。

RETI指令是實現(xiàn)從中斷子程序返回的指令,它只能用于中斷服務程序做結束指令。RET與RETI決不能互換使用。3.3指令系統(tǒng)例21已知調用指令LCALLSUB1的地址為42H,子程序SUB1入口地址是20BH,說明該段程序調用過程中PC及SP的變化:地址指令注釋

40MOVSP,#30H;設置堆棧指針,30H→SP42LCALLSUB1;調用子程序,45H→PC,31H→SP,

;45H→(31H),32H→SP,

;00H→(32H),20BH→PC20BSUB1:MOVA,R0212RET;(32H)一PCH,(31H)-PCL

執(zhí)行結果:此時PC=0045H,SP=30H。3.3指令系統(tǒng)3.3.4控制轉移類指令

4,空操作指令(1條)

匯編指令格式:

NOPNOP是一條單字節(jié)指令,控制CPU不進行任何操作而轉到下一條指令。常用于產生一個時鐘周期的延遲。如果反復執(zhí)行這一指令,則單片機處于踏步等待狀態(tài)。3.3指令系統(tǒng)3.3.5位操作類指令

在C8051F的硬件結構中,有個位處理機,具有豐富的位處理功能。處理位變量的指令包括位變量傳送、位邏輯運算、位條件轉移等指令。單片機的內部數(shù)據(jù)存儲器中,20H~2FH為位操作區(qū)域,每一位都有自己的位地址,可以對其每一位進行操作。位地址空間為00H~7FH,共128(16X8)位。另外,對于字節(jié)地址能被8整除的特殊功能寄存器的每一位,也具有可尋址的位地址。3.3指令系統(tǒng)3.3.5位操作類指令

在進行位操作時,進位標志CY作為位累加器C。位地址的表達方式有如下幾種:

(1)直接(位)地址方式:如RAM位尋址區(qū)的0H~7FH中任意1位,SFR寄存器中的部分寄存器可以直接位尋址,例如,PSW寄存器中的CY位可以用D7H表示等。3.3指令系統(tǒng)3.3.5位操作類指令

(2)點操作符方式:在字節(jié)地址和位數(shù)之間用“.”隔開,如PSW.3,(B8H).4等;

(3)位名稱方式:如RS0、P、OV等;

(4)用戶定義名方式:用偽指令bit定義任意位。如:SUGbitP1.0。經定義后,允許指令中用SUG代替P1.0。3.3指令系統(tǒng)3.3.5位操作類指令

位操作類指令共17條,下面分類介紹。

1.位數(shù)據(jù)傳送指令(2條)

匯編指令格式:

MOVC,bit;bit→CMOVbit,C;C→bit

主要用于對位操作累加器C進行數(shù)據(jù)傳送,均為雙字節(jié)指令。3.3指令系統(tǒng)3.3.5位操作類指令

例22已知核內RAM(25H)=83H=10000011B,把25H的第4位傳送入C中。編寫指令如下:

MOVC,(25H).4;(25H).4→C

結果:C=0。3.3指令系統(tǒng)3.3.5位操作類指令

例23把P2.4狀態(tài)傳送到P1.5。按題意編寫指令如下:

MOVC,P2.4;P2.4→CMOVP1.5,C;C→P1.53.3指令系統(tǒng)3.3.5位操作類指令

2.位修正指令(6條)

匯編指令格式:

CLRC;0→CCLRbit;0→bitCPLC;/C→CCPLbit;/bit→bitSETBC;1→CSETBbit;1→bit3.3指令系統(tǒng)3.3.5位操作類指令

這類指令的功能分別是對進位標志C或直接尋址位進行清除、取反、置位操作,執(zhí)行結果不影響其他標志。當直接位地址為端口中某一位時,具有“讀—改—寫”功能。3.3指令系統(tǒng)

3.位邏輯運算指令(4條)

匯編指令格式:

ANLC,bit;C·bit→CANLC,/bit;C·/bit→CORLC,bit;C+bit→CORLC,/bit;C+/bit→C

這組指令的功能是把進位C的內容和直接位地址的內容邏輯與/或后的操作結果送回到C中。斜杠“/”表示對該位取反后再參與運算,但不改變原來的數(shù)值。3.3指令系統(tǒng)4.判位轉移指令(1條)

匯編指令格式:

JCrel;C=1:PC+2+rel→PC;C=0:PC+2→PCJNCrel;C=0:PC+2+rel→PC;C=1:PC+2→PCJBbit,rel;bit=1:PC+3+rcl→PC;bit=0:PC+3→PCJNBbit,rel;bit=0:PC+3+rel→PC;bit=1:PC+3→PCJBCbit,rel;bit=1:PC+3+rel→PC,0→bit;bit=0:PC+3→PC3.3指令系統(tǒng)3.3.5位操作類指令

這組指令的功能是分別判進位C或直接尋址位是“1”還是“0”,條件符合則轉移,否則繼續(xù)執(zhí)行程序。前兩條指令是雙字節(jié),PC要加2,后3條指令是三字節(jié),PC要加3,其中最后1條指令的功能是:若直接尋址位為“1”則轉移,并同時將該位清0;否則順序執(zhí)行。這類指令也具有“讀—改—寫”功能。3.3指令系統(tǒng)例24在核內RAM30H、40H單元中

溫馨提示

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

評論

0/150

提交評論