第4章 MCS-51指令系統(tǒng)、語言程序設計基礎_第1頁
第4章 MCS-51指令系統(tǒng)、語言程序設計基礎_第2頁
第4章 MCS-51指令系統(tǒng)、語言程序設計基礎_第3頁
第4章 MCS-51指令系統(tǒng)、語言程序設計基礎_第4頁
第4章 MCS-51指令系統(tǒng)、語言程序設計基礎_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章MCS-51單片機指令系統(tǒng)4.1概述4.2數據傳送類指令4.3算術運算類指令4.4邏輯運算類指令4.5控制轉移類指令4.6位處理類指令2.1概述一、指令與指令系統(tǒng)指令系統(tǒng):

一種型號的計算機所有指令的集合就是它的指令系統(tǒng)[即軟件(語言)系統(tǒng)]。各種型號的計算機都有自己的指令系統(tǒng)。指令:是主機能直接識別和接受并指揮計算機執(zhí)行某種操作的命令。二、計算機指令的基本類型1.機器語言2.匯編語言3.高級語言1.機器語言a.特點:b.缺點:c.機器碼表示的指令格式:是計算機自身固有的語言;用二進制代碼表示,亦稱為機器代碼。能被主機直接識別、分析和執(zhí)行;程序不易閱讀,易出錯;----------(讀程序難)代碼不便于記憶,編程繁、難;--(寫程序難)操作碼[操作數]2.匯編語言a.優(yōu)點:b.缺點:指令意義直觀、易記憶,編程方便;不需專門的軟件平臺,占用的存儲空間少;1-3B執(zhí)行速度快;不能被機器本身直接識別。程序通用性差,復雜程序編程工作量大;介于機器語言和高級語言之間,用助記符、符號地址和標號來表示指令和編寫程序。直接和硬件接口,適時性強。機器語言匯編語言代真(匯編、翻譯目標代碼)手工代真、自動代真3.高級語言Basic、Fortran、Pascal、C、Delphi、java等b.缺點:寫、讀程序方便、簡單;程序通用性強。機器本身無法識別。a.優(yōu)點:需要專門的軟件系統(tǒng)(平臺),需占用較大的存儲空間;三、MCS-51系列單片機的指令格式完整的指令格式如下:[標號:]操作碼[操作數][,操作數][;注釋]其中:[]項是可選項。注釋:注釋也是指令語句的可選項,它是為增加程序的可讀性而設置的,是針對某指令而添加的說明性文字,不產生可執(zhí)行的目標代碼。操作數:參與操作的地址單元、寄存器單元或數據;可選項(可以是0-2個)“對誰操作”操作碼:用助記符表示,是由對應的英文縮寫構成的,作用是命令主機作何操作。它規(guī)定了指令具體的操作功能,描述指令的操作性質,是一條指令中不可缺少的內容?!白鍪裁矗瑧_到什么目的”標號:用符號表明本條指令的起始存儲單元地址,也稱為指令的符號地址。以便控制程序的轉向??蛇x項。Note:標號與操作碼之間用“:”隔開;標號以英文字母為首,不能超過6個字符;操作碼與操作數之間用若干空格隔開;操作數之間用“,”隔開;注釋前用“;”與指令主題隔開。四、指令的分類MCS-51指令系統(tǒng)有111條指令,可按下列幾種方式分類:1.按指令字節(jié)數分類:

單字節(jié)指令(49條)、雙字節(jié)指令(45條)和三字節(jié)指令(17條)。2.按指令執(zhí)行時間分類:

單機器周期指令(64條)、雙機器周期指令(45條)和四機器周期指令(2條)。3.按功能分類:

數據傳送類指令(29條)、算術運算類指令(24條)、邏輯操作類指令(24條)、控制轉移類指令(17條)和位操作指令(17條)。五、指令格式的符號約定Rn:當前工作寄存器R0-R7中的某個寄存器;Ri:當前寄存器組中能間接尋址的兩個寄存器R0,R1;#data:8位二進制數(立即數);#data16:16位二進制數;direct:片內RAM中的某個單元或某個SFR的地址;addr11:11位二進制碼表示的地址,尋址范圍0-2KB;addr16:16位二進制碼表示的地址,尋址范圍0-64KB;rel:用補碼形式表示的8位二進制偏移量;bit:可直接位尋址的片內RAM或SFR中的某個位地址;C:最高進位標志位或為累加器;@:在間接尋址方式中,是間接尋址寄存器指針的前綴。$:表示當前的指令地址;/:在位操作指令中,表示對該位先求反后再參與操作。(X):表示X單元中的內容;((X)):表示以X單元中的內容為地址的相應單元中的數據;如((Ri))、((DPTR))←:表示將箭頭右邊的內容傳送到左邊;:表示將數據交換;∨、∧、⊕:分別表示邏輯或、與、異或。4.2數據傳送類指令(共29條)數據傳送就是將數據從一個單元傳送到另一個單元的操作,是單片機最基本、最主要、量最大的操作。數據傳送指令共29條,可分為內部RAM數據傳送、外部RAM數據傳送、程序存儲器數據傳送、數據交換和堆棧操作等五類。尋址范圍:累加器A、片內RAM、SFR、片外RAM。功能:(目的地址)←(源地址),源地址單元的內容不變。對標志位的影響:除以累加器A為目的操作數的數據傳送指令對P標志位有影響外,其余均不影響標志位。一、一般傳送類指令(4+3+5+3=15條)MOVA,Rn;(A)←(Rn)MOVA,direct;(A)←(direct)MOVA,@Ri;(A)←((Ri))MOVA,#data;(A)←#dataMOVRn,A;(Rn)←(A)MOVRn,direct;(Rn)←(direct)MOVRn,#data;(Rn)←#dataMOVdirect,A;(direct)←(A)MOVdirect,Rn;(direct)←(Rn)MOVdirect,@Ri;(direct)←((Rn))MOVdirect,direct;(direct)←(direct)MOVdirect,#data;(direct)←#dataMOV@Ri,A;((Rn))←(A)MOV@Ri,direct;((Rn))←(direct)MOV@Ri,#data;((Rn))←#data例子:設內部RAM第30H單元內容為40H,第40H單元內容10H,P1作為輸出口其輸入的數據為0CAH(11001010B)經過程序執(zhí)行后結果。

MOVR0,#30HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1R0,R1,A,B40H單元,P2口?二、堆棧操作指令(2條)PUSHdirect;SP←SP+1,(SP)←(direct)POPdirect;(direct)←(SP),(SP)←(SP)-1例1:設(SP)=30H,(A)=01H,(B)=02H,執(zhí)行如下指令后,SP、A和B中的內容分別是什么?

PUSH ACCPUSH BPOP ACCPOPB三、累加器傳送類指令(3+2+4+2=11條)①8位數據交換指令:XCH A,Rn ;(A)(Rn)XCH A,@Ri ;(A)((Ri))XCH A,direct ;(A)(direct)②4位數據(半字節(jié))交換指令:XCHD A,@Ri ;(A)3~0((Ri))3~0SWAP A ;(A)7~4(A)3~0例2:編程將內部RAM中30H單元的低4位和高4位進行交換,并保持A中的內容不變。XCHA,30HSWAPAXCHA,30HSWAP30H???③訪問外部RAM的指令MOVXA,@DPTR;(A)←((DPTR))MOVXA,@Ri;(A)←((Ri))MOVX@DPTR,A;((DPTR))←(A)MOVX@Ri,A;((Ri))←(A)例3:若(R0)=12H,(0012H)=56H,則執(zhí)行指令

MOVXA,@R0后;累加器(A)=?例4:若(DPTR)=3020H,(A)=48H,則執(zhí)行指令MOVX@DPTR,A后,外部RAM(3020H)=?再來一個例子

例如:設外部RAM(0203H)=FFH,分析以下指令執(zhí)行后的結果。MOVDPTR,#0203H;(DPTR)←0203H,900203MOVXA,@DPTR;(A)←((DPTR)),E0MOV30H,A;(30H)←(A),F530MOVA,#0FH;(A)←0FH,740FMOVX@DPTR,A;((DPTR))←(A),F0執(zhí)行結果為:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。④讀程序存儲器的指令(查表指令):

MOVCA,@A+DPTR;(A)←((A)+(DPTR))

MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC))※兩條指令的異同:其功能完全相同,但使用中存在著差異:采用DPTR作為基址寄存器,表可以放在64KB程序存儲器空間的任何地址,使用方便,故稱為遠程查表。一般作為首選查表指令。采用PC作為基址寄存器,具體的表在程序存儲器中只能在查表指令后的256B的地址空間中,使用有限制,故稱為近程查表。四、16位數據傳送指令(1條)MOVDPTR,#data16;(DPTR)←#data16即:(DPH)←#data8~15;(DPL)←#data0~7。例5:編程將內部RAM中30H單元的數據傳送到外部RAM的2000H單元。

MOVA,30HMOVDPTR,#2000HMOVX@DPTR,A例:利用查表的方法編寫Y=X2(X=0,1,2,…,9)的查表程序。設變量X的值存放在內存30H單元中,求得的Y的值存放在內存31H單元中;平方表存放在首地址為TABLE的程序存儲器中。編程如下:MOVA,30HMOVDPTR,#TABLEMOVCA,@A+DPTRMOV31H,ATABLE:00H,01H,04H,09H,10H,19H,24H,31H,40H,51H若(30H)=#03H,則執(zhí)行完上述程序后:(31H)=?4.3算術運算類指令

(共24條)算術運算指令的兩個參與運算的操作數,累加器A為第一操作數,也是目的操作數;第二操作數可以是#data(立即數)、寄存器R0~R7、@Ri(片內RAM)或直接地址單元。算術運算指令可分為加法指令、帶進位的加法指令、帶借位的減法指令、十進制調整指令、加1指令、減1指令、乘除指令。算術指令都是針對8位無符號數的,如要進行帶符號或多字節(jié)二進制數運算,需編寫程序,通過執(zhí)行程序來實現。(實驗1.多字節(jié)算術運算程序實驗)一、加法指令ADDA,#data;(A)←(A)+#dataADDA,direct;(A)←(A)+(direct)ADDA,@Ri;(A)←(A)+((Ri))ADDA,Rn;(A)←(A)+(Rn)ADDCA,#data;(A)←(A)+#data+(C)ADDCA,direct;(A)←(A)+(direct)+(C)ADDCA,@Ri;(A)←(A)+((Ri))+(C)ADDCA,Rn;(A)←(A)+(Rn)+(C)INCA;(A)←(A)+1INCdirect;(direct)←(direct)+1INC@Ri;((Ri))←((Ri))+1INCRn;(Rn)←(Rn)+1INCDPTR;(DPTR)←(DPTR)+1進位(借位)標志CY為無符號整數的多字節(jié)加法、減法、移位等操作提供了方便;溢出標志OV可方便的控制補碼運算;輔助進位標志AC用于BCD碼運算。算術運算操作將影響PSW中的OV、CY、AC和P等。

例若(A)=84H,(30H)=8DH,執(zhí)行指令ADDA,30H之后,由于:

即:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有進位,D6無進位),(P)=0。

帶進位加法指令

指令的功能是把源操作數與累加器A的內容相加再與進位標志CY的值相加,結果送入目的操作數A中。加的進位標志CY的值是在該指令執(zhí)行之前已經存在的進位標志的值,而不是執(zhí)行該指令過程中產生的進位。增1指令的功能是把源操作數的內容加1,結果再送回原單元。這些指令僅INCA影響P標志。其余指令都不影響標志位的狀態(tài)。

DAA二-十進制調整指令若(A)0~3>9或(AC)=1,則(A)0~3=(A)0~3+06H;若(A)4~7>9或(C)=1,則(A)4~7=(A)4~7+06H;若上述兩個條件同時滿足,則(A)=(A)+66H。本指令用于對兩個BCD碼相加后存放在累加器A中的結果進行調整,使之成為一個正確的兩位BCD碼,以完成十進制加法功能。例:若累加器和寄存器R3中均存放的是BCD碼,(A)=84H,(R3)=67H,執(zhí)行以下指令:ADDA,R3DAA執(zhí)行過程:執(zhí)行第1條指令時,單片機按二進制數相加后得到:(A)=EBH,C=0。但是,按照十進制的加法,應該有:84+67=151,結果有誤。所以在按二進制數相加后,再加一條十進制調整指令:DAA,按照指令的執(zhí)行規(guī)則:(A)0~3和(A)4~7均大于9,所以要加66H調整,即(A)=(A)+66H=EBH+66H=51H,且(C)=1,這個結果就是十進制加法84+67=151的結果。例若(A)=01010110B(56),表示的BCD碼為,(R2)=01100111B(67),表示的BCD碼為,(CY)=0。執(zhí)行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即結果為BCD數123。應該注意,DA指令不能對減法進行十進制調整。BDH(189)二、減法指令(4+1=5條)SUBBA,#data;(A)←(A)-#data-(C)SUBBA,direct;(A)←(A)-(direct)-(C)SUBBA,@Ri;(A)←(A)-((Ri))-(C)SUBBA,Rn;(A)←(A)-(Rn)-(C)DECA;(A)←(A)-1DECdirect;(direct)←(direct)-1DECRn;(Rn)←(Rn)-1DEC@Ri;((Ri))←((Ri))-1帶借位減CY:差的位7需借位時,(CY)=1;否則,(CY)=0。AC:差的位3需借位時,(AC)=1;否則,(AC)=0。OV:若位6有借位而位7無借位或位7有借位而位6無借位時,(OV)=1。如要用此組指令完成不帶借位減法,只需先清CY為0。例若(A)=C9H,(R2)=54H,(CY)=1,執(zhí)行指令SUBBA,R2之后,由于:

即:(A)=74H,(CY)=0,(AC)=1,(OV)=1(位6有借位,位7無借位),(P)=0。

例:試編寫計算3412H-0E7FH的程序,將差的高8位存入41H,低8位存入40H。CLRCMOVA,#12HSUBBA,#7FHMOV40H,AMOVA,#34HSUBBA,#0EHMOV41H,AEND減1這組指令的功能是把操作數的內容減1,結果再送回原單元。這組指令僅DECA影響P標志。其余指令都不影響標志位的狀態(tài)。三、乘除法指令(1+1=2條)MULAB;累加器A與B寄存器相乘該指令的功能是將累加器A與寄存器B中的無符號8位二進制數相乘,乘積的低8位留在累加器A中,高8位存放在寄存器B中。當乘積大于FFH時,溢出標志位(OV)=1。而標志CY總是被清0。例若(A)=50H(80),(B)=A0H(160),執(zhí)行指令MULAB(12800即3200H)之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。

乘法DIVAB;累加器A除以寄存器B該指令的功能是將累加器A中的無符號8位二進制數除以寄存器B中的無符號8位二進制數,商的整數部分存放在累加器A中,余數部分存放在寄存器B中。當除數為0時,則結果的A和B的內容不定,且溢出標志位(OV)=1。而標志CY總是被清0。例若(A)=FBH(251),(B)=12H(18),執(zhí)行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。除法4.4邏輯運算類指令

(共24條)

邏輯運算指令可以完成與、或、異或、清0和取反操作,當以累加器A為目的操作數時,對P標志有影響;累加器清0操作對P標志有影響。

循環(huán)指令是對累加器A的循環(huán)移位操作,包括左、右方向以及帶與不帶進位位等移位方式,移位操作時,帶進位的循環(huán)移位對CY和P標志有影響;一、單操作數邏輯運算類指令(2+4=6條)CLRA;(A)←0CPLA;(A)←(A)1這兩條指令的功能分別是把累加器A的內容清0和取反,結果仍在A中。例若(A)=A5H,執(zhí)行指令CLRA之后,(A)=00H。

例若(A)=AAH,執(zhí)行指令CPLA之后,(A)=55H。

1010101001010101累加器循環(huán)移位

例子設(A)=0C5H(11000101B)執(zhí)行指令RRA結果是什么? 累加器A內容循環(huán)右位移,最低位A0移入最高位。 結果(A)=0E2H(11100010B)例子設(A)=0C5H(11000101B)(C)=1執(zhí)行指令RRCA結果是什么? 累加器A內容和C循環(huán)右位移,C移入A的最高位,A的最低位移入C。 結果(A)=0E2H(11100010B)(C)=1例子設(A)=0C5H(11000101B)執(zhí)行指令RLA結果是什么? 累加器A內容循環(huán)左位移,最高位轉移到最低位 結果(A)=08BH(10001011B)例子設(A)=045H(01000101B)(C)=1,執(zhí)行指令RLCA結果是什么? 累加器A內容循環(huán)左位移,A最高位到C,C移入A的最低位。 結果(A)=08BH(10001011B)(C)=0二、雙操作數邏輯運算類指令(6+6+6=18條)1.邏輯“與”指令(6條):ANLA,#data;(A)←(A)∧#dataANLA,direct;(A)←(A)∧(direct)ANLA,Rn;(A)←(A)∧(Rn)ANLA,@Ri;(A)←(A)∧((Ri))ANLdirect,A;(direct)←(direct)∧(A)ANLdirect,#data;(direct)←(direct)∧#data&2.邏輯“或”指令(6條)

:ORLA,#data;(A)←(A)∨#dataORLA,direct;(A)←(A)∨(direct)ORLA,Rn;(A)←(A)∨(Rn)ORLA,@Ri;(A)←(A)∨((Ri))ORLdirect,A;(direct)←(direct)∨(A)ORLdirect,#data;(direct)←(direct)∨#data≥1

邏輯與

前2條指令的功能是把源操作數與直接地址指示的單元內容相與,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容相與,結果送入累加器A中。例若(A)=C3H,(11000011B)(R0)=AAH(10101010B),執(zhí)行指令ANLA,R0之后,(A)=82H(10000010B)。

前2條指令的功能是把源操作數與直接地址指示的單元內容相或,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容相或,結果送入累加器A中。邏輯或例若(A)=C3H(11000011B),(R0)=55H(01010101B),執(zhí)行指令ORLA,R0之后,(A)=D7H(11010111B)。3.5.3邏輯異或

前2條指令的功能是把源操作數與直接地址指示的單元內容異或,結果送入直接地址指示的單元。后4條指令的功能是把源操作數與累加器A的內容異或,結果送入累加器A中。例若(A)=C3H(11000011B),(R0)=AAH(10101010B),執(zhí)行指令XRLA,R0之后,(A)=69H(11010010B)。邏輯“與”指令常用來“屏蔽”某些不用的位。P72例2例9:已知(A)=8AH,(R1)=73H,試編程將A的高4位和R1的低4位合并成一個字節(jié)存放在R0中。ANLA,#F0HANLR1,#0FHORLA,R1MOVR0,AANLA,#F0H;屏蔽A的低4位MOVR0,A;暫存到R0中MOVA,R1

;ANLA,#0FH;屏蔽R1的高4位ORLA,R0;合并MOVR0,A;結果送到R0中END例:編寫一程序,實現下圖所示的邏輯運算功能。其中:X、Y和Z表示輸入信號的地址,F表示輸出信號的地址。MOVA,XANLA,YMOVF,AMOVA,YORLA,ZCPLAORLA,FMOVF,A≥1&≥1XYZF4.5控制轉移類指令

(共17條)功能:改變程序計數器PC中的內容,控制程序執(zhí)行的流向,實現程序分支轉向。分為兩大類:一、無條件轉移類指令(9條)

:1.子程序調用與返回類指令(2+2=4條)2.轉移類指令(4條)3.空操作指令(1條)二、條件轉移類指令(8條)

:1.判0轉移指令(2條)2.比較轉移指令(4條)3.循環(huán)轉移指令(2條)一、無條件轉移類指令(9條)ACALLaddr11;(PC)←(PC)+2;(SP)←(SP)+1,((SP))←(PC)0~7;(SP)←(SP)+1,((SP))←(PC)8~15;(PC)0~10←addr11,(PC)11~15不變。LCALLaddr16;(PC)←(PC)+3;(SP)←(SP)+1,((SP))←(PC)0~7;(SP)←(SP)+1,((SP))←(PC)8~15;(PC)

←addr16。RET;(PC)8~15←((SP)),(SP)←(SP)-1;(PC)0~7←((SP)),(SP)←(SP)-1RETI;(PC)8~15←((SP)),(SP)←(SP)-1;(PC)0~7←((SP)),(SP)←(SP)-1主程序與子程序的調用關系圖返回兩級子程序嵌套的示意圖

這兩條指令可以實現子程序的短調用和長調用。這兩條指令的執(zhí)行不影響任何標志。

子程序調用指令ACALL指令執(zhí)行時,被調用的子程序的首址必須設在包含當前指令(即調用指令的下一條指令)的第一個字節(jié)在內的2K字節(jié)范圍內的程序存儲器中。LCALL指令執(zhí)行時,被調用的子程序的首址可以設在64K字節(jié)范圍內的程序存儲器空間的任何位置。

例若(SP)=07H,標號“XADD”表示的實際地址為0345H,PC的當前值為0123H。執(zhí)行指令ACALL后,(PC)+2=0125H,其低8位的25H壓入堆棧的08H單元,其高8位的01H壓入堆棧的09H單元。(PC)=0345H,程序轉向目標地址0345H處執(zhí)行。RET指令的功能是從堆棧中彈出由調用指令壓入堆棧保護的斷點地址,并送入指令計數器PC,從而結束子程序的執(zhí)行。程序返回到斷點處繼續(xù)執(zhí)行。返回類指令

RETI指令是專用于中斷服務程序返回的指令,除正確返回中斷斷點處執(zhí)行主程序以外,并有清除內部相應的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。AJMPaddr11;(PC)←(PC)+2,(PC)0~10←addr11LJMPaddr16;(PC)←(PC)+3,(PC)←addr16NOP;;(PC)←(PC)+1JMP@A+DPTR;(PC)←(A)+(DPTR)SJMPrel;(PC)←(PC)+2,(PC)←(PC)+rel轉移類指令

短跳轉AJMPaddr11;PC←(PC)+2,;PC10~0←addr11該指令執(zhí)行時,先將PC的內容加2(這是PC指向的是AJMP的下一條指令),然后把指令中11位地址碼傳送到PC10~0,而PC15~11保持原內容不變。在目標地址的11位中,前3位為頁地址,后8位為頁內地址(每頁含256個單元)。長跳轉LJMPaddr16;PC←addr16第一字節(jié)為操作碼,該指令執(zhí)行時,將指令的第二、三字節(jié)地址碼分別裝入指令計數器PC的高8位和低8位中,程序無條件地轉移到指定的目標地址去執(zhí)行。LJMP提供的是16位地址,因此程序可以轉向64KB的程序存儲器地址空間的任何單元。

例若標號“NEWADD”表示轉移目標地址1234H。執(zhí)行指令LJMPNEWADD時,兩字節(jié)的目標地址將裝入PC中,使程序轉向目標地址1234H處運行??詹僮?/p>

NOP;PC←(PC)+1這條指令不產生任何控制操作,只是將程序計數器PC的內容加1。該指令在執(zhí)行時間上要消耗1個機器周期,在存儲空間上可以占用一個字節(jié)。因此,常用來實現較短時間的延時。散轉指令JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)該指令具有散轉功能,可以代替許多判別跳轉指令。其轉移地址由數據指針DPTR的16位數和累加器A的8位數進行無符號數相加形成,并直接裝入PC。該指令執(zhí)行時對標志位無影響。例有一段程序如下:MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3當(A)=00H時,程序將轉到ROUT0處執(zhí)行;當(A)=02H時,程序將轉到ROUT1處執(zhí)行;其余類推。

一個補充知識(補碼) 補碼(two'scomplement)1、在計算機系統(tǒng)中,數值一律用補碼來表示(存儲)。主要原因:使用補碼,可以將符號位和其它位統(tǒng)一處理;同時,減法也可按加法來處理。另外,兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄。2、補碼與原碼的轉換過程幾乎是相同的。正數的補碼,是其本身 +9的補碼是00001001負數的補碼 符號位為1,其余位為該數絕對值的原碼按位取反;然后整個數加1。例子:求-7的補碼 后七位:+7的原碼(0000111)→按位取反(1111000)→加1(1111001)所以-7的補碼是11111001。相對轉移

SJMPrel;PC←(PC)+2,PC←(PC)+rel

第一字節(jié)為操作碼,第二字節(jié)為相對偏移量rel,rel是一個帶符號的偏移字節(jié)數(2的補碼),取值范圍為+127~-128(00H~7FH對應表示0~+127,80H~FFH對應表示-128~-1)。負數表示反向轉移,正數表示正向轉移。rel可以是一個轉移目標地址的標號,由匯編程序在匯編過程中自動計算偏移地址,并填入指令代碼中。在手工匯編時,可用轉移目標地址減轉移指令所在的源地址,再減轉移指令字節(jié)數2得到偏移字節(jié)數rel。

例若標號“NEWADD”表示轉移目標地址0123H,PC的當前值為0100H。執(zhí)行指令SJMPNEWADD后,程序將轉向0123H處執(zhí)行(此時rel=0123H-(0100+2)=21H)。偏移量rel及其計算相對偏移量rel是一個帶符號的8位二進制數,最高位為符號位,其余7位為有效數。由于rel∈[-127,+127],所以SJMPrel指令的轉移范圍只能在[PC當前值±127]。在用匯編語言編寫程序時,rel可用目的地址的標號來表示,手工匯編時可按下式計算rel:rel=[目的地址-PC當前值]補例:通常用SJMP$指令來實現動態(tài)停機的操作(稱原地踏步),$表示該指令所在地址,則rel=?rel=[目的地址-PC當前值]補=[-02H]補=FEH例:SJMPLOOP,該指令所在首地址為0103H,LOOP目的地址為0150H,求偏移量rel=?PC當前值=0103H+02H=0105H所以:rel=[0150H-0105H]補=[4BH]補=

4BH思考題:若SJMPrel指令首地址為0100H,目的地址為00B0H,求偏移量rel=?二、條件轉移類指令(2+4+2=8條)累加器判0轉移

指令的功能是對累加器A的內容為0和不為0進行檢測并轉移。當不滿足各自的條件時,程序繼續(xù)往下執(zhí)行。當各自的條件滿足時,程序轉向指定的目標地址。目標地址的計算與SJMP指令情況相同。指令執(zhí)行時對標志位無影響。例若累加器A原始內容為00H,則:JNZL1;由于A的內容為00H,所以程序往下執(zhí)行INCA;JNZL2;由于A的內容已不為0,所以程序轉向L2處執(zhí)行

例:將外部數據RAM的一個數據塊傳送到內部數據RAM,兩者的首址分別為DATA1和DATA2,遇到傳送的數據為零時停止。 解:外部RAM向內部RAM的數據傳送一定要以累加器A作為過渡,利用判零條件轉移正好可以判別是否要繼續(xù)傳送或者終止。完成數據傳送的參考程序如下:MOVR0,#DATA1;外部數據塊首址送R0MOVR1,#DATA2;內部數據塊首址送R1LOOP:MOVXA,@R0;取外部RAM數據入AHERE:JZEND;數據為零則終止傳送MOV@R1,A;數據傳送至內部RAM單元INCR0;修改地址指針,指向下一數據地址INCR1SJMPLOOP;循環(huán)取數2.比較轉移指令(4條)這組指令的功能是對指定的目的字節(jié)和源字節(jié)進行比較,若它們的值不相等則轉移,轉移的目標地址為當前的PC值加3后,再加指令的第三字節(jié)偏移量rel;若目的字節(jié)的內容大于源字節(jié)的內容,則進位標志清0;若目的字節(jié)的內容小于源字節(jié)的內容,則進位標志置1;若目的字節(jié)的內容等于源字節(jié)的內容,程序將繼續(xù)往下執(zhí)行。例子例如:當P1口輸入為3AH時,程序繼續(xù)進行,否則等待,直至P1口出現3AH。參考程序如下:MOVA,#3AH;立即數3A送A;743AWAIT:CJNEA,P1,WAIT;(P1)≠3AH,則等待,B590FD3.循環(huán)轉移指令(2條)DJNZRn,rel規(guī)則:(PC)←(PC)+2,(Rn)←(Rn)-1若(Rn)≠0,則(PC)←(PC)+rel轉移;若(Rn)=0則結束循環(huán),程序順序往下執(zhí)行。

注意:(Rn)要先減一,再判斷是否為零!DJNZdirect,rel

不同點:(P

溫馨提示

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

評論

0/150

提交評論