版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章指令系統(tǒng)及程序設(shè)計舉例1.指令只用來對匯編過程進行控制,匯編時不產(chǎn)生機器碼。(1)ORG(匯編起始命令)
格式:ORG匯編起始地址(16位)
3.1指令格式與尋址方式一、指令格式
89C51指令系統(tǒng)中,有1字節(jié)、2字節(jié)或3字節(jié)指令。1字節(jié):其中既包含操作碼、又包含操作數(shù)信息。2字節(jié):1個字節(jié)表示操作碼,另1個字節(jié)表示操作數(shù)或操作數(shù)地址。3字節(jié):1個字節(jié)表示操作碼,另2個字節(jié)表示操作數(shù)。2.偽指令操作碼目標操作數(shù),源操作數(shù)(3)EQU(賦值命令)
為字符名稱賦值 格式:字符名稱EQU數(shù)或匯編符號(4)DATA(數(shù)據(jù)地址賦值命令,類似于EQU)格式:字符名稱DATA表達式將表達式的值賦給字符名稱,常用于在程序中定義數(shù)據(jù)地址。(2)END(匯編結(jié)束命令)
格式: END例:STRINGDATA21HNUMDATA20HMOVR0,#STRINGMOVNUM,A(5)DB/DW(定義字節(jié)、字命令)格式:[標號:]
DB(DW)[項或項表]注意:①DB時,項或項表是一個字節(jié)或是用逗號隔開的字節(jié)串
或是在‘’中的ASCII字符串。②
DW時,項或項表的存放方式是
高8位在低地址,低8位在高地址。見P110例。(6)DS(定義存儲空間命令)
從指定地址開始保留若干單元。格式:[標號:]
DS 表達式 例: ORG 1000H DS 08H DB 30H,8AH 匯編后,(1008H)=30H,(1009H)=8AH注意:以上的DB、DW、DS僅對程序存儲器起作用,不能對數(shù)據(jù)存儲器初始化。(7)BIT(位地址符號命令)
將BIT后的位地址賦給字符名。格式:字符名BIT位地址例: A1BITP1.0;P1口第0位的位地址 90H賦給了A1——尋找指令中操作數(shù)或操作數(shù)所在的地址,共有7種。二、尋址方式立即尋址
MOVA,#3AH ;3AHA
MOVDPTR,#2000H;2000H→DPTR
;(DPH)=20H
注:立即數(shù)前用‘?!?,以區(qū)別地址。
;(DPL)=00H
2.直接尋址
MOVA,3AH ;(3A)A,3AH的內(nèi)容A操作數(shù)部分是操作數(shù)所在的存儲器單元的地址。Reg尋址
MOVA,R0 ;R0A
Reg:R0~R7,A,B,CY,DPTR(對它們也可使用其地址)在89C51中,用直接尋址方式可訪問①片內(nèi)RAM的128個存儲單元②
所有的SFR(既可用地址,也可用名字)③
216個位地址空間例1:MOV A,P1 例2: MOV SBUF,AMOV A,90H MOV 99H,A此種尋址方式一般用于片內(nèi)RAM和SFR。以某個REG內(nèi)容為基地址,然后加上地址偏移量以形成操作數(shù)地址。在89C51中,用DPTR或PC作為變址REG(基地址),地址偏移量放在A中。即:操作數(shù)地址=(A)+(DPTR),或=(A)+(PC)操作數(shù)地址放在某個REG中,規(guī)定:(1)R0、R1為間接REG,尋址片內(nèi)128字節(jié)的低位地址RAM或片外RAM低地址的256個單元。(2)DPTR為間接REG,尋址片外RAM64KB。REG間接尋址
MOVA,@R0 ;若R0內(nèi)容為65H,
(65H)A。簡言之,有:@R0,@R1,SP(PUSH、POP)尋址片內(nèi)RAM@R0,@R1,@DPTR尋址片外RAM此種尋址方式一般用于數(shù)據(jù)存儲器(RAM)。5.變址尋址
只能用于訪問程序存儲器(ROM),從中取數(shù)。例:MOVC A,@A+DPTR;((A)+(DPTR))AMOVCA,@A+PC;((A)+(PC))A相對偏移量的計算(以2字節(jié)指令為例):
rel=(目標地址—源地址—2)補相對轉(zhuǎn)移指令執(zhí)行時,是以當前PC(程序計數(shù)器)的值加上指令中規(guī)定的偏移量rel而形成實際的轉(zhuǎn)移地址。6.相對尋址(ROM)——只出現(xiàn)在相對轉(zhuǎn)移指令中例:JC rel ;rel=75H當指令JC被取出時,PC值已在原地址上加2,這時程序轉(zhuǎn)移到當前的PC+rel地址去執(zhí)行,即轉(zhuǎn)去當前PC+75H。7.位尋址(屬于直接尋址)——操作數(shù)中給出的是位地址,即片內(nèi)RAM某一單元中的一位。包括①20H~2FH的128個位單元地址00H~07FH②地址能被8整除的SFR位地址常用幾種方式表示①直接使用位地址:00H~07FH②寄存器名+位數(shù):PSW.3③位名稱例:CLRbit(即:CLR90H)1.操作數(shù)尋址方式和有關(guān)空間尋址方式尋址空間立即數(shù)尋址程序存儲器ROM直接尋址片內(nèi)RAM低128字節(jié),特殊功能寄存器SFR,位地址空間寄存器尋址工作寄存器R0~R7,A,B,Cy,DPTR寄存器間接尋址片內(nèi)RAM低128字節(jié)[@R0,@R1,SP(僅PUSH,POP)]片外RAM[@R0,@R1,@DPTR]變址尋址程序存儲器(@A+PC,@A+DPTR)相對尋址程序存儲器256字節(jié)范圍(PC+偏移量)位尋址片內(nèi)RAM的20H~2FH字節(jié)地址部分特殊功能寄存器SFR三、尋址空間及符號注釋2.尋址方式中常用符號注釋(1)Rn(n=0~7)(2)Ri(i=0,1)(3)#data8位立即數(shù)(4)#data1616位立即數(shù)(5)direct8位片內(nèi)RAM單元(包括SFR)的直接地址(6)addr1111位目標地址(7)addr1616位目標地址(8)rel
補碼形式的8位地址偏移量(9)bit片內(nèi)RAM或SFR的直接尋址位地址(10)@
間接尋址方式中,表示間址寄存器的符號(11)(×)×中的內(nèi)容(12)((×))
由×指出的地址單元中的內(nèi)容
五大類(111條):1.數(shù)據(jù)傳送指令:28條2.算術(shù)運算指令:24條3.邏輯運算及移位:25條 4.控制轉(zhuǎn)移指令:17條5.位操作指令:17條
3.2
89C51單片機的指令系統(tǒng)一、數(shù)據(jù)傳送指令格式:MOV 目標,源;片內(nèi)數(shù)據(jù)傳送
MOVX目標,源;累加器A與片外RAM傳送
MOVC目標,源;累加器與ROM傳送通用數(shù)據(jù)傳送指令XCH 第一操作數(shù),第二操作數(shù);字節(jié)交換
XCHD第一操作數(shù),第二操作數(shù);半字節(jié)交換交換指令PUSHPOP堆棧操作指令(2)以寄存器Rn為目的的操作數(shù)(見P59例)
①
MOVRn,A;RnA,Rn:R0~R7,寄存器尋址。
②
MOVRn,direct;Rn(direct),直接尋址。
③
MOVRn,#data;Rndata,立即尋址(1)以累加器A為目的操作數(shù)
①
MOVA,Rn;ARn,Rn:R0~R7,寄存器尋址。②
MOVA,direct;A(direct),direct:8位片內(nèi)RAM地址(256B范圍內(nèi)),直接尋址。③
MOVA,@Ri;A(Ri),R0或R1所指片內(nèi)RAM(128B范圍內(nèi)),寄存器間接尋址。④
MOVA,#data;Adata,立即數(shù)data:00H~FFH片內(nèi)數(shù)據(jù)傳送(片內(nèi)RAM區(qū)中的工作寄存器Rn,A,片內(nèi)數(shù)據(jù)RAM,SFR之間)注:
①無MOVRn,Rn
指令;②P58機器碼的構(gòu)成(3)以直接地址為目的操作數(shù)
①MOV direct,A ;(direct)A,Reg尋址
②MOV direct,Rn ;(direct)Rn,Reg尋址
③MOV direct,direct ;(direct)(direct),直接尋址
④
MOV direct,@Ri ;(direct)(Ri),Reg間接尋址
⑤
MOV direct,#data;(direct)data,立即尋址。
(4)以間接地址為目的的操作數(shù)
①MOV @Ri,A ;(Ri)A, Reg
尋址
②
MOV @Ri,direct ;(Ri)(direct),直接尋址
③
MOV @Ri,#data ;(Ri)data,立即尋址例:MOV A,#74H ;A=74HMOV 74H,#00H ;(74H)=00HMOV A,74H ;A=00H注意:將指令譯成機器碼時,第2、3字節(jié)的內(nèi)容順序。P59,P60。例:MOV R0,#77H ;R0=77HMOV A,#03H ;A=03HMOV @R0,A ;(R0)=03H,即(77H)=03H.(5)16位數(shù)據(jù)傳送指令MOV DPTR,#data ;data為16位立即數(shù)。
DPHdataH,DPLdataL
低位字節(jié)dataL高位字節(jié)dataHOPCODE例:MOV DPTR,#2000H例:①MOV R0,#20H MOV@R0,#data
;MOV20H,#data
②MOV P1,#80H ;立即尋址
③MOV P3,P1 ;直接尋址(2)利用DPTR16位Reg間接尋址,可以在64KB范圍內(nèi)尋址。①MOVX A,@DPTR ;A(DPTR)
②
MOVX @DPTR,A ;(DPTR)A
注:每次傳送8位數(shù)據(jù)④MOV R1,#82H MOV A,@R1 ;此指令有錯,因為@Ri間接尋址僅能尋址片內(nèi)低128字節(jié)RAM區(qū)(片內(nèi)地址不超過7FH),或片外低256字節(jié)RAM區(qū)(必須使用MOVX)。
欲從82H取數(shù)到A,可使用:MOVA,82H2.累加器A與片外RAM間(或I/O口)間的數(shù)據(jù)傳送(1)利用Ri間接尋址,可以在256字節(jié)范圍內(nèi)尋址。①MOVX A,@Ri ;A(Ri)
②
MOVX @Ri,A ;(Ri)A
注:這時,RAM地址在Ri中由P0口送出,P2口仍可用作I/O口。例:MOV DPTR,#0650H ;將0650H單元的8bitMOVX A,@DPTR ;數(shù)據(jù)送入A。
注:
因為外部的RAM與I/O端口是統(tǒng)一編址的,89C51指令系統(tǒng)中無單獨的IN、OUT端口操作指令,所以指令中的8位或16位地址,可能是RAM地址,也可能是I/O端口地址。3.累加器A與ROM之間的數(shù)據(jù)傳送①MOVC A,@A+DPTR;A(A+(DPTR)),變址尋址方式。
②
MOVCA,@A+PC;A(A+PC),PC為新PC,變址尋址。其中:
①以(DPTR)為基址Reg,A為偏移量,可以查找到(DPTR)以后的256個字節(jié)范圍內(nèi)的代碼或常數(shù)。因為(DPTR)的內(nèi)容可在64K范圍內(nèi)變化,故此種查表稱為遠程查表。
②以當前PC為基址,A為偏移量,可以查找當前指令所在地址以后的256個字節(jié)范圍內(nèi)的代碼或常數(shù),稱近程查表。無符號數(shù)相加例:
MOV A,#06HMOV DPTR,#2000HMOVCA,@A+DPTRXXH2000H2006H……A例:(2字節(jié))1000H:MOVA,#30H(1字節(jié))1002H:MOVCA,@A+PCXXHAXXH/////////////////////1000H1003H1033H(1003H)…//////////////////////1001H1002H例:對A中的BCD碼,用查表法查得相應(yīng)的ASCII碼。1.用PC作為基址 TAB:DB 30H
DB 31H DB 32HDB 33H … DB 39H;ASCII碼表
MOV A,#03H;查3的ASCII碼
INC A ;考慮RET的存在,修正偏移量
MOVCA,@A+PC ;此指令取出后,PC指向RET單元
RET ;(1字節(jié))2.用DPTR作為基址 MOV A,#03H MOV DPTR,#TAB ;不需要修正偏移量 MOVCA,@A+DPTR
RET;ASCII碼表TAB:DB 30H DB 31H … … DB 39H(1)字節(jié)交換指令
①XCH A,Rn ;ARn
reg尋址
②
XCH A,direct ;A(direct) 直接尋址
③XCH A,@Ri ;A(Ri) 間接尋址4.交換指令(分字節(jié)交換、半字節(jié)交換兩種)(2)半字節(jié)交換指令
①
XCHD A,@Ri ;A0~3(Ri)0~3,高4位不變。
②SWAP A ;A0~3A4~7,A的高低4位互換。例:中斷服務(wù)程序中保護現(xiàn)場現(xiàn)場:DPTR=1234H,PSW=63H,A=54H,SP=38H3CH3BH3AH39H38H=SPPUSH DPLPUSHDPHPUSHPSWPUSHA… …POP APOPPSWPOPDPHPOPDPL 34H12H63H54H5.堆棧操作指令(1)PUSHdirect;SP+1SP,直接地址尋址的單元內(nèi)容(SP)(2)POPdirect;將(SP)(direct),SP
-1SP注:①單元內(nèi)容為8位的;
②堆棧只能設(shè)在內(nèi)RAM區(qū);
③89C51的堆棧是向上生長的。(direct)A±CY±Rn
A,常用于多字節(jié)加、減法。89C51系列中沒有不帶借位的減法指令,需要的話,在SUBB前用CLRC指令清CY。2.帶進(借)位加法/減法
①ADDC/SUBB A,Rn
②ADDC/SUBB A,direct
③ADDC/SUBB A,@Ri
④ADDC/SUBB A,#data二、算術(shù)運算指令1.加法
①ADD A,Rn ;AA+Rn
②ADD A,direct ;AA+(direct)
③ADD A,@Ri ;AA+(Ri)
④
ADD A,#data ;AA+data注:加減運算中,目標操作數(shù)只能是A。影響標志位:進位標志CY,半進位AC,溢出OV(OV=C7+C6),
奇偶P(A中1的個數(shù)為奇時P=1)。
5.乘法指令(8位無符號數(shù))MULAB;BAA×B ;若結(jié)果>0FFH(B中有值),OV=1,CY=0。 ;否則(B中為0),OV=0,CY=0。3.增/減量指令①INCA ;A+1A
②INCRn ;Rn+1Rn
INCdirect ;(direct)+1(direct)
④
INC@Ri ;@Ri+1@Ri⑤INCDPTR ;DPTR+1DPTR注:這兩條指令不影響PSW。⑥D(zhuǎn)ECA⑦DECRn
⑧DECdirect⑨DEC@Ri4.十進制調(diào)整指令——完成BCD碼加法運算。DAA ;跟在ADD或ADDC后,將A中結(jié)果進行十進制調(diào)整。注:①必須是壓縮型BCD碼運算;②只能用于BCD碼加法。6.除法指令(8位無符號數(shù))
DIV AB;A/B的商A,A/B的余數(shù)B例:16位數(shù)求補(求反+1)。
設(shè)16位二進制數(shù)在R1R0中,求補結(jié)果存于R3R2中。 MOV A,R0 ;16位數(shù)低8位送A CPL A ;求反 ADD A,#01H ;加1(不用INC,因為它不影 響標志位) MOV R2,A ;存補碼低8位 MOV A,R1 ;取16位數(shù)高8位 CPL A ;求反 ADDC A,#00H ;加進位 MOV R3,A ;存補碼高8位以上指令編程練習(xí)見:P93~P961.簡單操作指令①累加器清零CLRA
②累加器取反CPLA例:MOVA,#35HANLA,#0FH ;屏蔽高4位,保留低4位。2.與
①ANLA,Rn ;A/\RnA②ANLA,direct③ANLA,@Ri④
ANLA,#data⑤ANLdirect,A ;(direct)/\A(direct)⑥ANLdirect,#data ;(direct)/\#data(direct)注:⑤⑥中若直接地址為I/O口,則為“讀-改-寫”操作。三、邏輯操作指令(很方便對端口的某位操作:ANLP1,00000001BP1.7~P1.1=0,P1.0不變)3.或①ORLA,Rn
②ORLA,,direct③ORLA,@Ri
④
ORLA,#data⑤
ORLdirect,A
⑥ORLdirect,#data
注:⑤
⑥中若直接地址為I/O口,則為“讀-改-寫”操作。例:MOVA,#05HORLA,#30H ;添加30H,變成ASCII碼4.異或①XRLA,Rn
②XRLA,direct③XRLA,@Ri
④
XRLA,#data⑤
XRLdirect,A ⑥
XRLdirect,#direct注:若⑤
⑥中direct為I/O口,為“讀—改—寫”操作。例:MOVA,#55HXRLA,#F0H ;高4位取反,低4位不變。5.移位指令(僅對累加器A,見P.69)
①循環(huán)左移: RL A②帶進位循環(huán)左移: RLC A③循環(huán)右移: RR A④帶進位循環(huán)右移: RRC A例:
拆字。將片內(nèi)RAM20H單元的內(nèi)容拆成兩段,每段4位。并將它們分別存入21H與22H單元中。程序如下: ORG 2000HSTART:
MOV R0,#21H ;21HR0,用R0間接尋址 MOV A,20H ;(20H)A ANL A,#0FH ;A∧#0FHA MOV @R0,A ;(A)(R0) INC R0 ;R0+1R0 MOV A,20H ;(20H)A SWAP A ;A0~3A4~7 ANL A,#0FH ;A∧#0FH MOV @R0,A ;(A)(R0)1.無條件轉(zhuǎn)移
①絕對短轉(zhuǎn)移
AJMPaddr11;PC+2
PC,addr11PC10~0,PC15~11不變。轉(zhuǎn)移的目標地址在AJMP指令后面指令的第一字節(jié)開始的同一2K字節(jié)范圍內(nèi)。如下圖所示:例:AJMP1123HAJMPK0四、控制轉(zhuǎn)移類指令A(yù)JMP2KBPCPC+21123H0001000100100011
a15 a10a8a7a0001
00100011
00001所以,AJMP1123H對應(yīng)的機器碼是2123H。(AJMP為雙字節(jié)指令)該指令操作碼的形成:本指令對應(yīng)8種操作碼:定義每256字節(jié)為一個頁面,2K的跳轉(zhuǎn)范圍可分為8頁(211=23×28=8×256),每個頁面一個操作碼。A10A9A8
0
地址頁0001操作碼A7~A0頁內(nèi)000001H0頁0~255單元0010
21H1頁0~255單元010041H2頁0~255單元011061H3頁0~255單元100
081H4頁0~255單元1010A1H5頁0~255單元1100C1H6頁0~255單元1110E1H7頁0~255單元②絕對長轉(zhuǎn)移指令
LJMPaddr16;在64KB內(nèi)轉(zhuǎn)移,addr16PC例:LJMP2030H ;放在0000H中時,上電后自動轉(zhuǎn)移到2030H單元。③相對轉(zhuǎn)移指令(短轉(zhuǎn)移)
SJMPrel
;PC+2PC ;PC+rel
PC
rel=(終地址—始地址—2)補注:當rel=FE時,導(dǎo)致無限循環(huán)。因為終地址=始地址+2+FE=PC+2-2=PC因此,可用如下形式指令
JMPADR:SJMPJMPADR
來代替HLT,在51單片機中無HLT。SJMP-128127LJMP64KBPC
PC+3
④間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)——單字節(jié)指令 JMP @A+DPTR ;A+DPTRPC通常以DPTR為基地址,A為偏移量,則可實現(xiàn)散轉(zhuǎn)功能。雙字節(jié)的命令鍵跳轉(zhuǎn)表TAB:AJMPSUB0
AJMPSUB1AJMPSUB2…… AJMPSUBn例:P75例3-11根據(jù)A中命令鍵的值,設(shè)計命令鍵操作程序入口跳轉(zhuǎn)表。 CLRC ;清進位位
RLCA ;鍵值乘以2 MOVDPTR,#TAB ;DPTR指向表首址JMP@A+DPTR ;散轉(zhuǎn)到命令鍵入口例:128種分支轉(zhuǎn)移程序。程序框圖如右:功能:
根據(jù)入口條件轉(zhuǎn)移到128個目的地址入口:(R3)=轉(zhuǎn)移目標地址的序號00H~7FH出口:
轉(zhuǎn)移到相應(yīng)的子程序入口JMP_128: MOV A,R3 RL A MOV DPTR,#JMPTAB JMP @A+DPTRJMPTAB: AJMP ROUT00 AJMP ROUT01 …… …… AJMP ROUT7F128個子程序首址②比較轉(zhuǎn)移指令
(對無符號數(shù))
CJNE目的,源,rel;3字節(jié)指令源與目的字節(jié)進行比較(目的-源),若它們的值不等,則轉(zhuǎn)移,同時將Cy清0或置1。比較操作不影響原有操作數(shù)。
rel=(終地址—始地址—3)補i)CJNEA,direct,rel;A≠(direct),轉(zhuǎn)移A>direct,Cy=0A<direct,Cy=1ii)CJNEA,#data,rel;A≠data,轉(zhuǎn)移同上。iii)CJNERn,#data,rel;Rn≠data,轉(zhuǎn)移同上。iv)CJNE@Ri,#data,rel;(Ri)≠data,轉(zhuǎn)移同上。2.條件轉(zhuǎn)移類指令——若條件滿足,則程序轉(zhuǎn)向指定的目標地址。①累加器A判零轉(zhuǎn)移指令
JZrel ;A=0轉(zhuǎn)移JNZrel ;A≠0轉(zhuǎn)移例:設(shè)R7=56H,執(zhí)行指令
CJNER7,#60H,K1;R7<60H,K1且Cy=1…K1:JCK3 ;Cy=1,判出R7<60Hk3…K3:例:片內(nèi)RAMONE和TWO兩個單元中存有兩個無符號數(shù),將兩個數(shù)中小的存入30H單元。 MOV A,ONE CJNE A,TWO,BIG SJMP STOREBIG: JC STORE MOV A,TWOSTORE: MOV 30H,A③循環(huán)轉(zhuǎn)移指令i)DJNZRn,rel ;PC+2PC,Rn-1Rn, ;當Rn≠0時,PC+relPC ;當Rn=0時,則結(jié)束循環(huán),程序向下執(zhí)行。
功能:(Rn-1)不為零時轉(zhuǎn)移,否則繼續(xù)執(zhí)行。ii)DJNZdirect,rel;(direct)-1,不為零時轉(zhuǎn)移,否則繼續(xù)執(zhí)行。例:軟件延時。(在P1.7引腳上輸出一個50us的脈沖)利用DJNZ指令可在一程序中插入某些指令來實現(xiàn)軟件延時。DJNZ執(zhí)行時間為2個機器周期,這樣循環(huán)1次可產(chǎn)生2個機器周期延時。(12M晶振時,1個機器周期=1us。2×24+1=49us) CLRP1.7 ;P1.7輸出變低電平 MOVR2,#18H ;1us;賦循環(huán)初值24
HERE:DJNZR2,HERE;2us;R2-1R2,R2不為零循環(huán)。 SETBP1.7 ;P1.7輸出高電平3.調(diào)用和返回指令①短調(diào)用指令
ACALLaddrll;在2K范圍內(nèi)調(diào)用,與AJMP相似.;斷點保護:PC+2PC,SP+2SP,PC進堆棧。;addr0~10
PC0~10注:子程序首地址必須在ACALL指令后第一字節(jié)為起始的2K字節(jié)范圍內(nèi)ROM中。例:多項單字節(jié)數(shù)求和。設(shè)數(shù)組長度放R0中,數(shù)組存放首地址在R1中,數(shù)組之和則放于20H單元中(設(shè)和不超過256)。
CLRASUMD:ADDA,@R1INCR1DJNZR0,SUMDMOV20H,ARET數(shù)組之和20H數(shù)組首地址R1數(shù)組長度R0②長調(diào)用指令
LCALLaddr16 ;在64K范圍內(nèi)調(diào)用 ;斷點保護:PC+3PC,SP+2SP,PC進堆棧。;addr0~15
PC③返回指令
i)RET ii)RETI(從中斷返回);恢復(fù)斷點PC4.空操作指令NOP ;除PC+1外,不作其它操作。例:利用NOP產(chǎn)生方波; CLRP2.7 NOP NOP NOP NOP SEPBP2.7位操作包括:位傳送、位狀態(tài)控制、位邏輯操作、位條件轉(zhuǎn)移等.進行位操作時:位累加器C——進位標志Cy位地址——①片內(nèi)RAM字節(jié)地址20H~2FH中連續(xù)128個位, 地址從00H~7FH。
②部分SFR地址可以被8整除。五、位操作指令在匯編語言中,位的表達方式有多種:①直接給出位地址如:MOVC,D4H(位地址)②點操作符方式如:MOVC,PSW.4(PSW的第4位)③位名稱方式如:MOVC,RS1④用戶定義名方式如:SUB.REGBITRS1(用SUB.REG
表示RS1)
這四種方式都可表達PSW中的第四位。1.位傳遞①MOVC,bit ;C(bit),bit是位地址,直接尋址②MOVbit,C ;(bit)C當bit為00H~7FH,位地址在片內(nèi)RAM中共128位;
bit為80H~FFH,位地址在11個SFR中。 (如:4個8位的并行I/O口,每位均可單獨進行尋址。)例:SETB P1.7 ;將P1.7位置1
CLR 2AH ;2AH為25H單元中的第2位地址 ;設(shè)(25H)=00110100B,此指令將 (25H)變?yōu)?0110000B。 2.位狀態(tài)控制指令①位清0 CLRC ;0C CLRbit ;0(bit)②位置1SETBC ;1C SETBbit ;l(bit)③位取反CPLC ;/CC CPLbit ;/bitbit
當直接地址bit為端口中的某一位時,具有“讀-改-寫”功能。3.位邏輯運算指令①與ANLC,bit;C∧(bit)C ANLC,/bit;C∧(/bit)C(/bit并不改變bit的值)②或ORLC,bit;C∨(bit)C ORLC,/bit;C∨(/bit)C4.位條件轉(zhuǎn)移指令(相對轉(zhuǎn)移)①判C轉(zhuǎn)移指令JCrel;C=1轉(zhuǎn)移 JNCrel ;C≠1轉(zhuǎn)移②判位變量轉(zhuǎn)移指令JB bit,rel;bit=1轉(zhuǎn)移
JNBbit,rel;bit≠1轉(zhuǎn)移③判位變量并清0 JBCbit,rel
;若bit=1,0bit,轉(zhuǎn)移;若bit=0,則順序執(zhí)行
偏移量=(目標地址-源地址-指令字節(jié)數(shù))補
P82例:如圖示組合邏輯電路+P1.0P1.1P1.2 MOV C,P1.0 ORL C,/P1.1 CPL C MOV P1.2,C例:設(shè)變量X存在VAR單元中,函數(shù)值y存放在FUNC中,按下式給y賦值。y=1 X>00 X=0-1 X<0
VAR DATA,30H ;VAR地址30H FUNCDATA,31H ;FUNC地址31HSTART: MOV A,VAR ;取X JZ COMP ;A為0轉(zhuǎn)COMP JNB ACC.7,POSI ;X>0轉(zhuǎn)POSI ;符號位為0 MOV A,#0FFH ;X<0,-1A SJMP COMPPOSI: MOV A,#01HCOMP: MOV FUNC,A例:
在片內(nèi)RAM40H~4FH中置初值A(chǔ)0H~AFH,再將其內(nèi)容依次傳送到片外RAM0800H為起始地址的16個單元中。0000 013F003F78407A1074A00045F608040048DAFB
7840900800 在RAM內(nèi)置初值
ORG 0000HRESET:AJMP MAIN
ORG 003FHMAIN: MOV R0,#40H MOV R2,#10H MOV A,#A0HA1: MOV @R0,A INC R0 INC A DJNZ R2,A1 MOV R0,#40H MOV DPTR,#0800H地址機器碼 MOV R2,#10HA2: MOV A,@R0 MOVX@DPTR,A INC R0 INC DPTR DJNZ R2,A2HERE: SJMP HERE將內(nèi)RAM中40H~4FH的內(nèi)容依次送到外RAM中以0800H為起始地址的16個單元中。 7A100051E6
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度木飾面原材料進口與分銷合同3篇
- 2025年親子遺贈協(xié)議草案
- 2025年代理商代理加盟采購合資合作協(xié)議
- 2025年合資合作收益分配協(xié)議
- 2025年企業(yè)外包勞務(wù)協(xié)議
- 2025年智慧城市物業(yè)管理服務(wù)標準合同范本6篇
- 漫談加強物資管理提高企業(yè)經(jīng)濟效益-圖文
- 《皮質(zhì)醇增多征荊》課件
- 2025年度醫(yī)院病理科診斷服務(wù)承包合同4篇
- 2025年度汽車轉(zhuǎn)讓及二手車交易稅費減免合同
- 個體工商戶章程(標準版)
- 七年級英語閱讀理解55篇(含答案)
- 廢舊物資買賣合同極簡版
- 2024年正定縣國資產(chǎn)控股運營集團限公司面向社會公開招聘工作人員高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 智能衣服方案
- 李克勤紅日標準粵語注音歌詞
- 教科版六年級下冊科學(xué)第一單元《小小工程師》教材分析及全部教案(定稿;共7課時)
- 中藥材產(chǎn)地加工技術(shù)規(guī)程 第1部分:黃草烏
- 危險化學(xué)品經(jīng)營單位安全生產(chǎn)考試題庫
- 案例分析:美國紐約高樓防火設(shè)計課件
- 移動商務(wù)內(nèi)容運營(吳洪貴)任務(wù)一 用戶定位與選題
評論
0/150
提交評論