版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
指令是指揮計(jì)算機(jī)工作的命令,一種計(jì)算機(jī)所能執(zhí)行的指令集合稱之為該種計(jì)算機(jī)的指令系統(tǒng)。
本節(jié)重點(diǎn):尋址方式;MCS-51指令集;偽指令;1.4MCS-51單片機(jī)的指令系統(tǒng)指令機(jī)器指令
0010010000001010B(二進(jìn)制數(shù)表示)240A(十六進(jìn)制數(shù)表示)匯編指令
ADDA,#0AH
1、按指令所占字節(jié)數(shù)分類:每條指令在程序存儲(chǔ)器ROM中占據(jù)一定的空間,以字節(jié)為單位。 單字節(jié)(49條);雙字節(jié)(46條); 3字節(jié)(16條)2、按指令執(zhí)行時(shí)間分類:每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。 單周期(64條); 雙周期(45條); 4周期(2條)3、按指令的功能分類,可分為5大類: 數(shù)據(jù)傳送類(29條); 算術(shù)運(yùn)算類(24條); 邏輯運(yùn)算及移位類(24);控制轉(zhuǎn)移類(17條) 位操作類(17條)51系列單片機(jī)指令系統(tǒng)分類(共111條指令)MCS-51單片機(jī)的指令系統(tǒng)的特點(diǎn)(1)指令執(zhí)行時(shí)間快。(2)指令短,約有一半的指令為單字節(jié)指令。(3)用一條指令即可實(shí)現(xiàn)2個(gè)一字節(jié)的相乘或相除。(4)具有豐富的位操作指令。(5)可直接用傳送指令實(shí)現(xiàn)端口的輸入輸出操作。方括符[]表示可選項(xiàng)標(biāo)號(hào)代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋,以“;”開頭一、指令的格式 指令的表示形式稱指令格式。編寫程序時(shí)必須嚴(yán)格按指令格式書寫。MCS-51指令由操作碼和操作數(shù)組成。匯編語言指令格式如下:[標(biāo)號(hào):]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]1.4.1指令的格式及標(biāo)識(shí)二、指令中的符號(hào)標(biāo)識(shí)Rn—當(dāng)前工作寄存器組中的寄存器R0~R7之一,n=0~7。Ri—當(dāng)前工作寄存器組中可作地址指針的寄存器R0,R1,i=0、1。@Ri—間接尋址的8位片內(nèi)RAM單元地址(00H~FFH),i=0、1。例:MOVR1,#30H; MOV@R1,#0FH; MOVA,@R1;#data—8位立即數(shù)。#data16—16位立即數(shù)。(R1)←立即數(shù)30H(30H)←立即數(shù)0FH(A)←((30H))=#0FH指令中的符號(hào)標(biāo)識(shí)(續(xù))addr11—11位目的地址 只限于在ACALL和AJMP指令中使用。addr16—16位目的地址 只限于在LCALL和LJMP指令中使用。rel—補(bǔ)碼形式表示的8位地址偏移量 在指令SJMP中使用。指令中的符號(hào)標(biāo)識(shí)(續(xù))例:LJMPaddr16;PC←addr16 長跳轉(zhuǎn)指令——可在64K范圍內(nèi)跳轉(zhuǎn) AJMPaddr11;PC←(PC)+2,PC10~0←addr11
絕對(duì)跳轉(zhuǎn)指令——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn) SJMPrel;PC←(PC)+2+rel
相對(duì)跳轉(zhuǎn)指令——可在當(dāng)前PC-128與127范圍內(nèi)跳轉(zhuǎn)說明:①在程序中addr16addr16rel等可用標(biāo)號(hào)代替,表示要轉(zhuǎn)移目的地址 ②LJMP,STMP,AJMP功能相同,只是轉(zhuǎn)移范圍不同。指令中的符號(hào)標(biāo)識(shí)(續(xù))例: LCALLaddr16子程序長調(diào)用指令 ——可在64K范圍內(nèi)調(diào)用子程序 ACALLaddr11子程序絕對(duì)調(diào)用指令 ——可在指令所在的2K范圍內(nèi)調(diào)用子程序說明:①在程序中addr16addr11等可用標(biāo)號(hào)代替,表示子程序的入口地址 ②LCALL,ACALL功能相同,只是轉(zhuǎn)移范圍不同。指令中的符號(hào)標(biāo)識(shí)(續(xù))bit—表示片內(nèi)RAM位尋址區(qū)或可位尋址特殊功能寄存器的位地址;
direct—內(nèi)部RAM的8位地址。既可以是內(nèi)部RAM的低128個(gè)單元地址,也可以是特殊功能寄存器的單元地址或符號(hào)。在指令中direct表示直接尋址方式。$—表示本條指令的起始地址;C—進(jìn)位標(biāo)志位,它是布爾處理機(jī)的累加器,也稱之為位累加器;三、關(guān)于注釋CYACF0RS0OVPRS1PSW.7PSW.0PSW.6PSW.5/—加在位地址的前面,表示對(duì)該位先求反再參與運(yùn)算,但不影響該位的值;例:ANLC,/bit ORLC,/bit(x)—由x指定的寄存器或地址單元中的內(nèi)容;((x))—由x所指寄存器的內(nèi)容作為地址的存儲(chǔ)單元的內(nèi)容;←—表示指令操作流程,將箭頭右邊的內(nèi)容送到箭頭左邊的單元中。三、關(guān)于注釋寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對(duì)尋址位尋址尋址:就是尋找操作數(shù)的地址(操作數(shù)可能是具 體的數(shù)據(jù),也可能是具體的存放數(shù)據(jù)的地 址或符號(hào))尋址方式:指令按地址獲得操作數(shù)的方式MCS-51系列單片機(jī)提供了七種尋址方式1.4.2尋址方式 從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器,寄存器的內(nèi)容就是操作數(shù)。例: MOVA,B ;(A)←(B) MOV30H,R0 ;(30H)←(R0) MOVA,R2 ;(A)←(R2)注意:(1)采用寄存器尋址方式的指令都是一字節(jié)的指令(2)可以作寄存器尋址的寄存器有:R0~R7、A、B寄存器和數(shù)據(jù)指針DPTR1、寄存器尋址——(P31)A2、直接尋址 定義:在指令中直接給出操作數(shù)所在單元的地址或名稱,這就是直接尋址方式。例如: MOVA,3AH其中:3AH就是表示直接地址, 其操作示意圖如右圖所示。直接尋址方式可訪問以下存儲(chǔ)空間: ①內(nèi)部RAM低128個(gè)字節(jié)單元。 ②特殊功能寄存器。注意:直接尋址是訪問特殊功能寄存器的唯一方法。原因:52子系列的單片機(jī)內(nèi)部RAM高128字節(jié)單元地址與特殊功能寄存器的地址存在沖突問題。 SFR分布在80H~0FFH范圍內(nèi),而52系列單片機(jī)有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。解決辦法:
80H~0FFH范圍內(nèi)RAM只能用寄存器間接尋址方式
SFR只能用直接尋址方式特殊功能寄存器的尋址特點(diǎn)89C51片內(nèi)RAM128字節(jié)(00H—7FH)89C52片內(nèi)RAM256字節(jié)(00H—0FFH)00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)SFR分布在80H-FFH其中92個(gè)位可位尋址80HFFH89C51128字節(jié)89C52256字節(jié)只能直接尋址只能寄存器間接尋址特殊功能寄存器的尋址特點(diǎn)(續(xù))SFR地址表片內(nèi)21個(gè)SFR中:地址號(hào)能被8整除的11個(gè)SFR可位尋址標(biāo)識(shí)名稱地址標(biāo)識(shí)名稱地址
ACC累加器E0HBB寄存器F0HPSW程序狀態(tài)字D0HSP堆棧指針81HDPTR數(shù)據(jù)指針DPL82HDPTR數(shù)據(jù)指針DPH83HP0P0口80HP1P1口90HP2P2口A0HP3P3口B0HIP中斷優(yōu)先級(jí)控制B8HIE允許中斷控制A8HTMOD定時(shí)方式控制89HTCON定時(shí)/計(jì)數(shù)控制88HTH0T0高字節(jié)8CHTL0T0低字節(jié)8AHTH1T1高字節(jié)8DHTL1T1低字節(jié)8BHSCON串行控制98HSBUF串行數(shù)據(jù)緩沖器99HPCON電源控制97HMOVR0,#90H
MOVA,@R0;A←(90H)屬寄存器間接尋址,隨意寫的指令如:MOVA,85H則是非法的!MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)MOVB,30H;(B)←(30H)相同相同SFR直接尋址方式舉例 寄存器中的內(nèi)容是一個(gè)RAM單元的地址,該RAM單元中的內(nèi)容才是操作數(shù)。例:MOVR1,#30H;MOV@R1,#0FH;MOVA,@R1;3、寄存器間接尋址(R1)←立即數(shù)30H(30H)←立即數(shù)0FH(A)←((30H))=#0FH
注意:(1)“間接”表示某寄存器中的“內(nèi)容”只是一個(gè)“單元地址”,這個(gè)地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。(2)符號(hào)“@”表示“在…”,其含義與讀音皆同“at”。3、寄存器間接尋址(3)能用于間接尋址的寄存器有R0,R1,SP,DPTR。
R0、R1是當(dāng)前工作寄存器組中的寄存器。
SP僅用于堆棧操作。(4)間接尋址可以訪問的存儲(chǔ)器空間包括內(nèi)部RAM和外部RAM。①內(nèi)部RAM的低128個(gè)單元采用R0、R1作為間址寄存器②外部RAM: 一是采用R0、R1作為間址寄存器,可尋址256個(gè)單元。 二是采用16位的DPTR作為間址寄存器,可尋址外部RAM的整個(gè)64KB地址空間。寄存器間接尋址(續(xù))例如:MOV@R0,A;內(nèi)部RAM(R0)←A
其指令操作過程示意圖如下圖所示。片內(nèi)RAM30HR034HA30H34H寄存器間接尋址舉例片外RAM2000HDPTR30HA2000H30H寄存器間接尋址舉例例如:MOVX@DPTR,A;外部RAM(DPTR)←A
其指令操作過程示意圖如下圖所示。例如:已知(R1)=80H (80H)=33H則執(zhí)行指令 MOVA,@R1后結(jié)果: (A)=33H而不是80H。1、寄存器尋址時(shí),寄存器中存放的是操作數(shù)寄存器間接尋址中時(shí),寄存器中存放的是操作數(shù)的地址。寄存器間接尋址和寄存器尋址作對(duì)比2、寄存器尋址時(shí),寄存器可以是:R0~R7、A、B寄存器和數(shù)據(jù)指針DPTR;寄存器間接尋址使用的寄存器為Ri和DPTR,使用時(shí)寄存器前面加“@“標(biāo)志。 即以下形式: MOV A,@Ri MOVXA,@DPTR 操作數(shù)直接就出現(xiàn)在指令中例: MOVA,#64H;(A)←立即數(shù)64H ADDA,#05H;(A)←(A)+立即數(shù)05H4、立即尋址注意:符號(hào)“#”表明其后跟的是立即數(shù),(為了與直接尋址指令中的直接地址相區(qū)別)
立即數(shù)——就是數(shù)字量本身。立即數(shù)只能是源操作數(shù),不能作為目的操作數(shù)。 立即數(shù)有8位立即數(shù)和16位立即數(shù)。也稱為:基址寄存器+變址寄存器間接尋址兩條指令的語法:MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))基址寄存器:地址指針寄存器DPTR或PC寄存器變址寄存器:累加器A兩者中的“內(nèi)容”形成一個(gè)16位的“地址”
(ROM中地址)
該“地址”所指的存儲(chǔ)單元中的內(nèi)容才是操作數(shù)。5、變址尋址MOVCA,@A+DPTR指令指令的功能:將A的內(nèi)容與DPTR的內(nèi)容之和作為操作數(shù)地址,把該地址中的內(nèi)容送入累加器A中。如下圖所示。變址尋址指令的特點(diǎn)(1)變址尋址只能對(duì)程序存儲(chǔ)器中數(shù)據(jù)進(jìn)行操作。 由于程序存儲(chǔ)器是只讀的,因此變址尋址只有讀操作而無寫操作,在指令符號(hào)上采用MOVC的形式。(2)這兩條指令常用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格。(3)這兩條指令都為一字節(jié)指令。當(dāng)前PC值加上指令中規(guī)定的偏移量rel,構(gòu)成實(shí)際的操作數(shù)地址語法:SJMPrel操作:跳轉(zhuǎn)到的目的地址=當(dāng)前16位PC值+rel例:2000H:SJMPL16、相對(duì)尋址無條件相對(duì)轉(zhuǎn)移指令;雙字節(jié)指令;指令代碼80H、54H;其中rel=54H;標(biāo)號(hào)L1指向程序存儲(chǔ)器單元地址2056HL1相對(duì)尋址方式的特點(diǎn)1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個(gè)16位數(shù);2)符號(hào)“rel”表示“偏移量”,是一個(gè)帶符號(hào)的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH)。
在實(shí)際編程中,“rel”通常用標(biāo)號(hào)代替3)相對(duì)尋址能修改PC的值,故可用來實(shí)現(xiàn)程序的分支轉(zhuǎn)移。
指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0SETBACC.7;(ACC.7)←1CPLC;(C)←NOT(C)注意:1)位地址里的數(shù)據(jù)只可能是一個(gè)0或12)有的位地址十分明確,如P1.0,ACC.7等,有的位地址則“不太明確”,如:
MOVA,17H ;(A)←(17H),17H是字節(jié)地址
MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址,所以該指令中的17H是22H單元的第7位7、位尋址片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另一個(gè)是字節(jié)地址能被8整除的11個(gè)SFR中還有83個(gè)位可按位尋址00H20H2FH7FH1FH30H80HFFHSFR普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)27H22H21H20H26H24H25H23H28H07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241402FH7F7E7D7C7B7A7978位地址總共128個(gè)可按位尋址的位單元地址17D7D6D5D4D3D2D1D051單片機(jī)內(nèi)部RAM的兩個(gè)位尋址區(qū)域位地址的幾種表示方式(1)直接使用位地址。對(duì)于20H~2FH共16個(gè)單元的128位,其位地址編號(hào)是00H~7FH, 例如,20H單元的0~7位的位地址為00H~07H。(2)用單元地址加位序號(hào)表示。如25H.5表示25H單元的D5位(位地址是2DH)。這種表示方法可以避免查表或計(jì)算,比較方便。(3)用位名稱表示。特殊功能寄存器中的可尋址位均有位名稱,可以用位名稱來表示該位。如可用RS0表示PSW中的D3位:
RS0=
D0H.3(4)對(duì)特殊功能寄存器可直接用寄存器符號(hào)加位序號(hào)表示。如PSW中的D3位,又可表示為
PSW.3=RS0=D0H.3。〔例3-1〕指出下列每一條指令的尋址方式。①M(fèi)OV2FH,#40H②MOVA,@R0③MOVDPTR,#2020H④MOV45H,P0⑤MOVA,R1⑥MOVCA,@A+PC⑦JCLOOP①中的源操作數(shù)為立即尋址,目的操作數(shù)為直接尋址。②中的源操作數(shù)為寄存器間接尋址,目的操作數(shù)為寄存器尋址。③中的源操作數(shù)為16位立即尋址,目的操作數(shù)為寄存器尋址。④中的源操作數(shù)和目的操作數(shù)都是直接尋址。⑤中的源操作數(shù)和目的操作數(shù)都為寄存器尋址。⑥中的源操作數(shù)為基址加變址尋址,目的操作數(shù)為寄存器尋址。⑦中的操作數(shù)為相對(duì)尋址。尋址方式舉例(1)〔例3-2〕判斷下列指令是否正確,若不正確請(qǐng)指出錯(cuò)誤:①M(fèi)OVA,DPTR②MOVDPTR,#03H③MOV#80H,R7④MOVB,C尋址方式舉例(2)〔解〕①不正確。A是8位寄存器,DPTR為16位寄存器,不匹配。②正確。(DPTR)←#0003H
③不正確。#80H為立即數(shù),不能作為目的地址。
④不正確。B為8位字節(jié)寄存器,C為1位位累加器,不匹配。MCS-51指令集按照功能分五類,共111條指令1.4.2指令說明MCS-51指令集共111條指令。
按功能分為五類。數(shù)據(jù)傳送類指令:(29條)算術(shù)運(yùn)算類指令:(24條)邏輯運(yùn)算及移位類指令:(24條)控制轉(zhuǎn)移類指令:(17條)位操作(布爾操作)類指令:(17條)1.4.2指令說明內(nèi)部數(shù)據(jù)存儲(chǔ)器間傳送:(MOV——16條)外部數(shù)據(jù)存儲(chǔ)器與累加器間傳送:(MOVX——4條)程序存儲(chǔ)器向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP—5條)堆棧操作:(PUSH,POP——2條)一、數(shù)據(jù)傳送類指令(5種/29條)內(nèi)部存儲(chǔ)器間傳送指令(16條):指令格式:MOV<目的操作數(shù)>,<源操作數(shù)>指令功能:把源操作數(shù)所表示的數(shù)據(jù)傳送到目的地址指定的存貯單元之中,而不改變?cè)床僮鲾?shù)。即該指令是“復(fù)制”,不是“搬家”。例: MOVA,30H——(A)(30H)(一)內(nèi)部存儲(chǔ)器間傳送指令注意: MOV類指令的操作方向總是后面的操作數(shù)指向前面的操作數(shù)!操作數(shù)可取的類型和匹配方式ACC:累加器Rn :R0—R7@Ri :@R0,@R1#data :8位立即數(shù)#data16:16位立即數(shù)Direct:為內(nèi)部RAM或SFR地址Acc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)操作數(shù)可取的類型和匹配方式1、以累加器A為目的地址的指令2、以直接地址為目的地址的指令3、以寄存器間接地址為目的的地址的指令4、以Rn為目的地址的指令5、16位數(shù)據(jù)傳送指令A(yù)cc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)1、以累加器A為目的地址的指令以累加器A為目的地址的指令MOVA,Rn
;A←(Rn)MOVA,direct;A←(direct)MOVA,@Ri
;A←((Ri))MOVA,#data;A←data
Acc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)1、以累加器A為目的地址的指令例:MOVA,20H;(A)=(20H)A的內(nèi)容為20H中的內(nèi)容MOVA,@Ri;以Ri的內(nèi)容為地址,把該地址中的內(nèi) 容送到A中去。A←((Ri))
MOVA,R0;將R0的內(nèi)容送到A去。A←(R0)MOVA,#20H;(A)=20HA的內(nèi)容為20H例: MOVR0,#30H MOV30H,#60H MOVA,@R0 (A)=?2、以Rn為目的地址的指令以Rn為目的地址的指令 MOVRn,A ;Rn←(A) MOVRn,direct ;Rn←(direct) MOVRn,#data ;Rn←dataAcc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)3、以直接地址為目的地址的指令以直接地址為目的地址的指令MOVdirect,A;direct←(A)MOVdirect,Rn
;direct←(Rn)MOVdirect,direct;direct←(direct)MOVdirect,@Ri
;direct←((Ri))MOVdirect,#data;direct←data
Acc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)4、以寄存器間接地址為目的地址的指令以寄存器間接地址為目的的地址的指令MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct
;(Ri)←(direct)MOV@Ri,#data
;(Ri)←dataAcc累加器Direct直接尋址@Ri間接尋址Rn寄存器#data立即數(shù)5、16位數(shù)據(jù)傳送指令16位數(shù)據(jù)傳送指令MOVDPTR,#data16;DPTR←data16
;DPL←data7~0;DPH←data15~8立即數(shù)#data16寄存器DPTR〔例〕設(shè)RAM40H單元的內(nèi)容為80H,80H單元內(nèi)容為47H,P1口的輸入狀態(tài)為0FFH,試判斷下列程序執(zhí)行結(jié)果。MOVR0,#40HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1
〔解〕執(zhí)行結(jié)果為:(A)=80H,(B)=47H,(R0)=40H,(R1)=80H,(P1)=0FFH,(P2)=0FFH,(80H)=0FFH。;R0←40H;A←(
40H)=80H;R1←80H;B←(
80H)=47H;(
80H)
←0FFH;P2←0FFHMOV類指令舉例MOVX類指令(4條):MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)說明:①片外RAM與片內(nèi)RAM之間以及片外RAM之間不能直接進(jìn)行數(shù)據(jù)傳送,必須通過累加器A中轉(zhuǎn)。 MOVX20H,2000H MOVX3000H,2000H××(二)外部RAM與累加器間傳送類指令MOVX類指令(4條):MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)說明:②尋址方式只能是寄存器間接尋址。參與間接尋址的寄存器只有Ri和DPTR兩種(3個(gè))。
DPTR為16位寄數(shù)器,尋址范圍為000H~0FFFFH共64KB空間;
Ri是8位寄數(shù)器,只能尋址00~0FFH低256單元。(二)外部RAM與累加器間傳送類指令〔解〕①
MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A
②
MOVDPTR,#2000H
MOVXA,@DPTRMOVR0,#0FAHMOVX@R0,A〔例〕
①將片外RAM2000H單元的內(nèi)容傳送到片內(nèi)20H單元中;②將片外RAM2000H單元的內(nèi)容傳送到片外0FAH單元。MOVX類指令應(yīng)用舉例MOVC指令(2條): MOVCA,@A+DPTR MOVCA,@A+PC ——通常稱為查表指令,尋址方式屬:“基址寄存器+變址寄存器間接尋址”注意:(1)@A+DPTR或@A+PC指向程序存儲(chǔ)器中的某單元,所以其數(shù)據(jù)傳送都是單向的。(2)擬傳送給ACC的數(shù)據(jù)就是程序中事先寫進(jìn)去的表格數(shù)據(jù),這些表格數(shù)據(jù)往往用偽指令DB,DW等定義在程序中。(3)應(yīng)用時(shí),一般以PC或DPTR確定表格的首址,查表時(shí),將A中的內(nèi)容作為表中偏移量(字節(jié)數(shù))來查找到表格中的相應(yīng)項(xiàng)。(4)ROM片內(nèi)、片外是統(tǒng)一編址,該指令既可訪問片內(nèi),又可訪問片外程序存貯器。一、數(shù)據(jù)傳送類指令(5種/29條)P35〔解法一〕以DPTR為基址寄存器,平方表首址可靈活安排在適當(dāng)?shù)奈恢萌?000H,即平方表的內(nèi)容從2000H單元放起。〔例3-7〕以查表方式求出片內(nèi)RAM20H單元中操作數(shù)的平方值,存入片內(nèi)21H單元中。MOVC指令舉例查表程序執(zhí)行示意圖A05HDPTR2000H524H2005H2006HROMMOVCA,@A+DPTR;(A)=19H=52〔解法一〕以DPTR為基址寄存器,平方表首址可靈活安排在適當(dāng)?shù)奈恢萌?000H,即平方表的內(nèi)容從2000H單元放起。程序如下:ORG1800HMOVDPTR,#2000HMOVA,20H;A中的內(nèi)容為所要查找的單元數(shù)值在 表中偏移量(字節(jié)數(shù))MOVCA,@A+DPTRMOV21H,A
ORG2000HDB00H,01H,04H,09H,10H,19H,24HDB31H,40H,51H,64H,……〔例3-7〕以查表方式求出片內(nèi)RAM20H單元中操作數(shù)的平方值,存入片內(nèi)21H單元中。MOVC指令舉例ORG1000H1000MOVA,20H;A中的內(nèi)容為所要查找的單元數(shù)值 在表中偏移量(字節(jié)數(shù))1001ADDA,#03H;補(bǔ)償值=03H
1003MOVCA,@A+PC1004MOV21H,A1006RET1007DB 00H,01H,04H,09H,10H,19H,24H……〔解法二〕以PC為基址寄存器,此時(shí)表格須緊跟程序之后,且要計(jì)算好表格首址位置。補(bǔ)償值定義: 表頭地址-查表指令存儲(chǔ)地址-1,(1007H-1003H-1=03H)或者表頭地址-查表指令執(zhí)行時(shí)的PC當(dāng)前值(1007H-1004H=03H) 相同點(diǎn):1)源操作數(shù)所在的存儲(chǔ)器類型相同;源操作數(shù)都在程序存儲(chǔ)器中,所以其數(shù)據(jù)傳送都是單向的;2)源操作數(shù)都是在源程序中事先寫進(jìn)去的表格數(shù)據(jù);3)源操作數(shù)的存放位置對(duì)于程序存儲(chǔ)器是片外、還是片內(nèi)沒有要求,既可訪問片內(nèi),又可訪問片外程序存儲(chǔ)器。MOVCA,@A+DPTR
與MOVCA,@A+PC作比較——相同點(diǎn)1)基址指針不同。MOVCA,@A+DPTR中基址指針為DPTR;MOVCA,@A+PC中基址指針為PC;2)數(shù)據(jù)表格在源程序中與查表指令的“距離”要求不同。MOVCA,@A+DPTR中數(shù)據(jù)表格可以在64K程序空間的任意位置;MOVCA,@A+PC中數(shù)據(jù)表格存儲(chǔ)地址的最大值與查表指令存儲(chǔ)地址的差值不能超過ACC所能容納的無符號(hào)數(shù)最大值255;3)數(shù)據(jù)表格長度的取值范圍不同。MOVCA,@A+DPTR中數(shù)據(jù)表格長度除了64K程序存儲(chǔ)器容量之外沒有其它限制;MOVCA,@A+PC中數(shù)據(jù)表格長度受ACC所能容納的無符號(hào)數(shù)最大值255的限制;MOVCA,@A+DPTR
與MOVCA,@A+PC作比較——不同點(diǎn)1、字節(jié)互換XCH(3條):XCHA,direct(字節(jié)互換)XCHA,@Ri(字節(jié)互換)XCHA,Rn(字節(jié)互換)功能:將累加器A中內(nèi)容與源操作數(shù)互換。(三)數(shù)據(jù)交換指令(5條)Acc累加器Direct直接尋址@Ri間接尋址Rn寄存器例:設(shè)(A)=08H,(R7)=0DCH,執(zhí)行指令XCHA,R7結(jié)果為:(A)=0DCH,(R7)=08H半字節(jié)交換指令XCHD和SWAP2、XCHD指令(1條)XCHDA,@Ri;(A)低4位←→((Ri))低4位功能:累加器A中內(nèi)容與源操作數(shù)低4位交換,高4位不變。
例:已知(A)=80H,(R0)=30H,(30H)=0FH,執(zhí)行指令 XCHDA,@R0結(jié)果為:(A)=8FH,(30H)=00H注意:源操作數(shù)只能是間接尋址方式半字節(jié)交換指令XCHD和SWAP3、SWAP指令(1條)SWAPA;(A)低4位←→(A)高4位功能:累加器Acc的低4位與自身的高4位互換例:已知(A)=80H,執(zhí)行指令 SWAPA 結(jié)果為:(A)=08H〔解〕
XCHA,20H;SWAPA;MOVR1,#21H;XCHDA,@R1;SWAPA;XCHA,20H;〔例3-4〕試用交換指令使片內(nèi)20H單元的高4位與21H單元的低4位交換。設(shè):(ACC)=a7a6a5a4a3a2a1a0
(20H)=
b7b6b5b4b3b2b1b0(21H)=c7c6c5c4c3c2c1c0數(shù)據(jù)交換指令應(yīng)用舉例(ACC)=b7b6b5b4b3b2b1b0(ACC)=b3b2b1b0b7b6b5b4(ACC)=b3b2b1b0c3c2c1c0(21H)=c7c6c5c4b7b6b5b4(ACC)=c3c2c1c0b3b2b1b0(20H)=c3c2c1c0b3b2b1b0目的:(20H)=c3c2c1c0b3b2b1b0(21H)=c7c6c5c4b7b6b5b4堆棧操作指令(2條):PUSHdirect;(SP)←(SP)+1,((SP))←(direct)POP direct ;(direct)←((SP)),(SP)←(SP)-1(四)堆棧操作指令棧頂棧底SP←SP+1SP棧頂棧底SPSP←SP-1a)入棧b)出棧堆棧示意圖1、入棧指令PUSH
PUSHdirect;(SP)←(SP)+1,((SP))←(direct)功能:先指針加1,后內(nèi)容進(jìn)棧。說明:
①PUSH指令常用于保護(hù)CPU現(xiàn)場。
②棧操作是字節(jié)指令,每次只能壓入或彈出1個(gè)字節(jié)的內(nèi)容。如PUSHDPTR是錯(cuò)誤的,但可以用以下兩條指令完成DPTR的入棧。
PUSHDPH PUSHDPL2、出棧指令POPPOPdirect;direct←((SP)),(SP)←(SP)-1功能:先內(nèi)容出棧,后指針減1。注意:√堆棧區(qū)由特殊功能寄存器堆棧指針SP
管理√堆棧區(qū)可以安排在RAM區(qū)任意位置,一般不安排在工作寄存器區(qū)和可按位尋址的RAM區(qū),而是放在RAM區(qū)的靠后的位置√堆??偸侵赶驐m敗掏ǔUSH與POP兩條指令成對(duì)使用說明:①棧操作要注意先入后出的原則。②POP指令常用于恢復(fù)CPU現(xiàn)場堆棧操作指令執(zhí)行過程××片內(nèi)RAM50H40H11H10HSP→××30H執(zhí)行前指令PUSH40H操作示意圖片內(nèi)RAM50H40H11H10H50H××30H執(zhí)行后SP→堆棧操作指令執(zhí)行過程指令POP30H操作示意圖片內(nèi)RAM40H11H10H34H××30H××執(zhí)行前SP→片內(nèi)RAM30H11H10H40H34H34H××執(zhí)行后SP→數(shù)據(jù)傳送類指令綜合應(yīng)用舉例【例】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法2:(間接地址傳送法)MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $方法1:(直接地址傳送法)MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $數(shù)據(jù)傳送類指令綜合應(yīng)用舉例(續(xù))方法4(堆棧傳送法):
PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $方法3(字節(jié)交換傳送法):MOV A,30HXCH A,40HMOV 30H,A
(或XCH A,30H)SJMP $
⑤XCHA,20HXCHA,30HXCHA,20H〔例〕改正下列指令中的錯(cuò)誤,完成其功能:①M(fèi)OVA,2000H;片外RAM2000H單元內(nèi)容送入A。②MOVX20H,2000H;片外RAM2000H單元內(nèi)容送入片內(nèi)20H單元。③MOVCA,2000H;將ROM2000H單元內(nèi)容送入A。④MOVXA,@A+DPTR;以查表方式將片外RAM單元的內(nèi)容送入A。⑤XCH40H,30H;交換片內(nèi)RAM30H和40H單元的內(nèi)容。⑥PUSHAB;將寄存器對(duì)AB的內(nèi)容壓入堆棧?!步狻?/p>
①M(fèi)OVDPTR,#2000HMOVXA,@DPTR
②MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A
③MOVDPTR,#2000HMOVA,#0MOVCA,@A+DPTR④無法以查表方式將片外RAM存貯單元的內(nèi)容送入A。⑥PUSHAPUSHB
錯(cuò)誤指令改正1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片內(nèi)RAM:(61H)←(60H)MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片內(nèi)RAM←片外RAM下列指令是否錯(cuò)誤,如錯(cuò)請(qǐng)改正:XXXXXXXX習(xí)題不帶進(jìn)位加法指令:(ADD——4條)帶進(jìn)位加法指令:(ADDC——4條)帶借位減法指令:(SUBB——4條)加1/減1操作:(INC,DEC—9條)單字節(jié)乘/除運(yùn)算:(MUL,DIV—2條)十進(jìn)制調(diào)整指令:(DAA
1條)二、算數(shù)運(yùn)算類指令(6種/24條)1、不帶進(jìn)位加法指令(Addtion)ADDA,Rn;
A←(A)+(Rn)ADDA,@Ri;A←(A)+((Ri))ADDA,direct
;A←(A)+(direct)ADDA,#data
;A←(A)+#data功能:ADD指令把源操作數(shù)與累加器A內(nèi)容相加,結(jié)果存在累加器中。對(duì)標(biāo)志位的影響:影響PSW中的C、AC、OV和P位,但不改變?cè)床僮鲾?shù),。1、不帶進(jìn)位加法指令(Addtion)ADDA,Rn;
A←(A)+(Rn)ADDA,@Ri;A←(A)+((Ri))ADDA,direct
;A←(A)+(direct)ADDA,#data
;A←(A)+#data說明:①操作數(shù)的允許類型 目的操作數(shù)只能是累加器A,源操作數(shù)只有以上4種形式; 如:ADDB,40H或ADDA,203AH等都是不存在的,是非法的。②操作數(shù)不區(qū)分有無符號(hào) 無符號(hào)數(shù)(0~255),帶符號(hào)數(shù)(-128~+127)?!怖吃嚲幊逃?jì)算40H和41H兩單元字節(jié)數(shù)的和,并存放在42H單元。(42H)←
(40H)+(41H) 若(40H)=0B3H,(41H)=79H,給出計(jì)算結(jié)果并判斷PSW受影響的位。ADD指令應(yīng)用舉例〔解〕程序如下:MOVA,40H ADDA,41HMOV42H,A若(40H)=0B3H,(41H)=79H 10110011+011110011←00101100若(40H)=0B3H,(41H)=79H 10110011+01111001
1←00101100ADD指令應(yīng)用舉例 若(40H)(41H)是無符號(hào)數(shù),和為12CH; 若(40H)(41H)是有符號(hào)數(shù),和為+2CH。則運(yùn)算結(jié)果:(42H)=(C)=(AC)=(OV)=(P)=2CH10012、帶進(jìn)位加法指令A(yù)DDCA,Rn;A←(A)+(Rn)+(Cy)ADDCA,@Ri;A←(A)+((Ri))+(Cy)ADDCA,direct;A←(A)+(direct)+(Cy)ADDCA,#data;A←(A)+#data+(Cy)功能:該操作與ADD類似,只是PSW中的進(jìn)位位C參與運(yùn)算。說明:①對(duì)標(biāo)志位的影響
對(duì)標(biāo)志位的影響與ADD相同;②用途
通常用于多字節(jié)或多個(gè)數(shù)加法運(yùn)算。2、帶進(jìn)位加法指令例如: 設(shè)(A)=20H,(R0)=21H,C=1 執(zhí)行指令:ADDCA,R0 結(jié)果:A=42H。ADDCA,Rn;A←(A)+(Rn)+(Cy)ADDCA,@Ri;A←(A)+((Ri))+(Cy)ADDCA,direct;A←(A)+(direct)+(Cy)ADDCA,#data;A←(A)+#data+(Cy)〔解〕MOVA,30H ADDA,40H MOV50H,A MOVA,31H ADDCA,41H MOV51H,A MOVA, #00H ADDCA,#00H MOV52H,A〔例〕兩字節(jié)無符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM31H,30H單元(低位放在前),加數(shù)放在內(nèi)部RAM41H、40H單元。計(jì)算兩數(shù)的和,放在52H~50H單元中。帶進(jìn)位加法指令應(yīng)用舉例(31H)(30H)+(41H)(40H)(52H)(51H)(50H);低字節(jié)相加
;高字節(jié)相加
;取高位相加產(chǎn)生的進(jìn)位
說明:①多字節(jié)數(shù)求和,從低字節(jié)開始,最低字節(jié)相加用ADD指令,高字節(jié)相加用ADDC指令。②N字節(jié)數(shù)相加,結(jié)果可能為N+1字節(jié)數(shù)。帶進(jìn)位加法指令應(yīng)用舉例(31H)(30H)+(41H)(40H)(52H)(51H)(50H)〔解〕MOVA,30H ADDA,40H MOV50H,A MOVA,31H ADDCA,41H MOV51H,A MOVA, #00H ADDCA,#00H MOV52H,A;低字節(jié)相加
;高字節(jié)相加
;取高位相加產(chǎn)生的進(jìn)位
3帶借位減法指令(Subtraction)SUBBA,Rn;A←(A)-(Rn)-(Cy)SUBBA,@Ri;A←(A)-((Ri))-(Cy)SUBBA,direct;A←(A)-(direct)-(Cy)SUBBA,#data;A←(A)-#data-(Cy)說明:①無不帶借位的減法指令。
若進(jìn)行不帶借的減法運(yùn)算,要在運(yùn)算前使用ADDA,#00H或CLRC等指令將進(jìn)位標(biāo)志清0。②減法指令中,無BCD碼調(diào)整。③對(duì)標(biāo)志位的影響:影響PSW中的C,AC,OV,和P位。〔例〕兩個(gè)雙字節(jié)數(shù)相減,被減數(shù)放在30H,31H,減數(shù)放在40H,41H中,差放入50H、51H。SUBB指令應(yīng)用舉例(31H)(30H)-(41H)(40H)(51H)(50H)〔解〕ADDA,#00HMOVA,30HSUBBA,40HMOV50H,AMOVA,31HSUBBA,41HMOV51H,A說明:多字節(jié)相減,從低字節(jié)開始,最低字節(jié)相減時(shí),應(yīng)先將進(jìn)位位清0。;將進(jìn)位位清0;低字節(jié)相減;高字節(jié)相減加法運(yùn)算:(ADD——4條)帶進(jìn)位加法運(yùn)算:(ADDC——4條)帶借位減法運(yùn)算:(SUBB——4條)所有的ADD、ADDC、SUBB運(yùn)算都是以A為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn)A。ADD、ADDC以及SUBB運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動(dòng)對(duì)PSW中的Cy標(biāo)志位置“1”。ADDC:(A)(A)+(Cy)+(第二操作數(shù))SUBB:(A)(A)-(Cy)-(第二操作數(shù))ADD、ADDC、SUBB指令小結(jié)(1)加1指令(Increase)INCA ;(A)←(A)+1INCRn ;(Rn)←(Rn)+1INCdirect ;(direct)←(direct)+1INC@Ri ;((Ri))←((Ri))+1INCDPTR ;(DPTR)←(DPTR)+1對(duì)標(biāo)志位的影響:除INCA影響P外,不影響任何標(biāo)志位。例如:已知(A)=0FFH 執(zhí)行INCA后,(A)=,Cy= 執(zhí)行ADDA,#01H后,(A)=,Cy=。00H不變。00H14、加1/減1操作:(INC,DEC—9條)(2)減1指令DEC(Decrease)DECA;(A)←(A)-1DECRn;(Rn)←(Rn)-1DECdirect;(direct)←(direct)-1DEC@Ri;((Ri))←((Ri))-1說明:與INC命令類似; 但無“DECDPTR”指令。例如:R0=30H,(30H)=22H, 執(zhí)行DEC@R0后,(30H)=。21H〔例〕已知: (A)=0FFH (R2)=0FH (R0)=40H (40H)=00H (DPTR)=1AFFH。執(zhí)行下列指令:其結(jié)果為:INCAINCR2INC@R0INCDPTR加1/減1支令應(yīng)用舉例;(A)=00H;(R2)=10H;(R0)=40H;(40H)=01H;(DPTR)=1B00H。〔例〕已知: (A)=10H (R5)=00H (30H)=2FH (R0)=40H (40H)=0FFH。執(zhí)行下列指令:其結(jié)果為:DECADECR5DEC30HDEC@R0加1/減1支令應(yīng)用舉例;(A)=0FH;(R5)=0FFH;(30H)=2EH;(40H)=0FEH,(P)=0(1)乘法指令MUL(Multiplication) MULAB ;BA←A×B 低8位→A,高8位→B功能:累加器A和寄存器B中的兩個(gè)無符號(hào)8位數(shù)相乘,所得16位乘積的低8位放在A中,高8位入在B中。例如:(A)=20H=32,(B)=0A0H=160, 執(zhí)行指令:MULAB結(jié)果:積為1400H=5120, (A)= (B)=(C)= (OV)=00H14H015、單字節(jié)乘/除運(yùn)算:(MUL,DIV—2條)乘法指令MUL說明沒有帶符號(hào)數(shù)乘法指令
A、B中都是無符號(hào)整數(shù)對(duì)PSW狀態(tài)的影響。 進(jìn)位標(biāo)志總是清零Cy=0
OV與結(jié)果有關(guān)。
OV=0,表示乘積小于256,(B)=0;
OV=1,表示乘積大于255,(B)≠0。DIVAB;(A)÷(B),(A)←商,(B)←余數(shù)功能:兩8位無符號(hào)數(shù)相除。 執(zhí)行前:(A)←被除數(shù);(B)←除數(shù)。 執(zhí)行后:(A)←商,(B)←余數(shù)。(2)除法指令DIV(Division)例如:(A)=0FBH=251,(B)=12H=18, 執(zhí)行指令DIVAB結(jié)果:(A)=0DH=13,(B)=11H=17,例如:(A)=0FBH=251,(B)=12H=18, 執(zhí)行指令DIVAB結(jié)果:(A)=0DH=13,(B)=11H=17,
(C)= (OV)=(2)除法指令DIV(Division)說明:a)沒有帶符號(hào)除法指令,A、B中都是無符號(hào)整數(shù)b)對(duì)標(biāo)志位的影響: 進(jìn)位標(biāo)志總是清零Cy=0如果除數(shù)B為“0”,OV=1,否則OV=00,0〔例〕編程實(shí)現(xiàn)下列運(yùn)算:F=D1×D2+D3/D4,其中D1、D2、D3、D4都為非0的8位二進(jìn)制無符號(hào)數(shù)?!步狻矼OVA, #D1 MOVB, #D2 MULAB
;計(jì)算D1×D2=BA MOV R2, A ;暫存D1×D2=R3R2的結(jié)果 MOV R3, B MOVA, #D3 MOVB, #D4 DIV AB ;計(jì)算D3/D4 ADD A, R2;乘積的低位與商相加 MOVR2, A;存F低位 MOVA, R3 ADDCA, #0;乘積的高位與低位和的進(jìn)位相加 MOVR3, A;存F高位在R3中乘/除運(yùn)算應(yīng)用舉例6、十進(jìn)制調(diào)整指令DAA(1條)問題引入:
在指令系統(tǒng)中,沒有專門的十進(jìn)制(BCD碼)的加法運(yùn)算指令,兩個(gè)十進(jìn)制(BCD碼)的加法只能使用ADD,ADDC命令,但計(jì)算結(jié)果不是十進(jìn)制(BCD碼)
。例如:(a)5+3=8(b)7+6=13(c)8+9=17010101111000+)0011+)0110+)10011000
110110001(a)的運(yùn)算結(jié)果是BCD碼;(b)(c)的運(yùn)算結(jié)果不是BCD碼。6、十進(jìn)制調(diào)整指令DAA(1條)解決辦法:對(duì)累加器中由上一條加法指令(加數(shù)和被加數(shù)均為壓縮的BCD碼)所獲得的結(jié)果進(jìn)行調(diào)整,使得結(jié)果為壓縮BCD碼形式。010101111000+)0011+)0110+)10011000
110110001注意:
ADD或ADDC與DAA指令一起使用;參與運(yùn)算的兩個(gè)加數(shù)均為壓縮型BCD碼;結(jié)果是大家熟悉的壓縮型BCD碼 +)0110+)0110 1001110111〔例〕在20H、21H中分別存放壓縮BCD碼55和72,試將兩數(shù)相加,并計(jì)算出結(jié)果。DAA指令應(yīng)用舉例〔解〕
MOVA,20HADDA,21HDAA,結(jié)果:
(A)= C=如果不使用DAA指令,則結(jié)果: (A)= C=27H10C7H0若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;例:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“123”。“DAA”指令完成的操作MOVA,#65HADDA,#58HDAA結(jié)果:(A)=23H(CY)=1131819265+58+66B>9D>9BD若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;又如:兩個(gè)十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“97”?!癉AA”指令完成的操作(續(xù))MOVA,#39HADDA,#58HDAA結(jié)果:(A)=97H(CY)=097+639+5891AC=1邏輯與運(yùn)算:(ANL——6條)邏輯或運(yùn)算:(ORL——6條)邏輯異或運(yùn)算:(XRL——6條)累加器清零/取反:(CLR,CPL——2條)累加器移位操作:(RL,RLC,RR,RRC—4條)三、邏輯運(yùn)算及移位類指令(5種/24條)指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11說明:邏輯運(yùn)算是按位進(jìn)行的,對(duì)進(jìn)位標(biāo)志位C不產(chǎn)生影響。 ∧--“與”,“有0即0,全1為1”∨--“或”,“有1即1,全0為0”--“異或”,“相異為1,相同為0”1、邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):(1)邏輯與ANL用于清0或者保留某些位: 例:ANLA,#0FH; 則(A)=0AH(高4位清0,低4位不變)(2)邏輯或ORL用于置1或者保留某些位: 例:ORLA,#0FH; 則(A)=9FH(高4位不變,低4位置1)(3)邏輯異或XRL用于取反或者保留某些位:說明: ①若與0進(jìn)行異或運(yùn)算,結(jié)果保持不變; ②若與1進(jìn)行異或運(yùn)算,結(jié)果取反; ③自身異或等效于清0。例:XRLA,A;結(jié)果為:(A)=0(已知累加器A中已存有數(shù):9AH)ANL,ORL,XRL指令的常見用法2、累加器清零/取反:(CLR,CPL—2條)CLRA;A←“0”CPLA;A←A例: (A)=3AH, 執(zhí)行 CPLA 結(jié)果為:(A)=0C5H
00111010B→11000101B說明:1)取反即為邏輯非運(yùn)算。 2)MCS-51單片機(jī)沒有求補(bǔ)指令,若對(duì)累加器A中數(shù)求補(bǔ),則程序如下:CPLAINCARLA 左環(huán)移An+1←An,A0←A7累加器A累加器ACy累加器ACy累加器ARRCA 帶進(jìn)位位右環(huán)移 An+1
→An,C→A7,A0
→CRRA 右環(huán)移An+1→An,A0
→A7RLCA 帶進(jìn)位位左環(huán)移
An+1←An,A0←C,C←A73、累加器移位操作:(4條)邏輯運(yùn)算及移位類指令總結(jié)此類指令改變程序的執(zhí)行順序——改變當(dāng)前PC值順序執(zhí)行:由PC自動(dòng)加1實(shí)現(xiàn)分支、循環(huán):通過控制轉(zhuǎn)移類指令強(qiáng)迫改變PC值來實(shí)現(xiàn)無條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:(NOP——1條)“耗時(shí)”一個(gè)機(jī)器周期。donothing!四、控制轉(zhuǎn)移類指令(4種/17條)LJMPaddr16;PC←addr16
長跳轉(zhuǎn)指令——可在64K范圍內(nèi)跳轉(zhuǎn)AJMPaddr11;PC←(PC)+2,PC10~0←addr11
絕對(duì)跳轉(zhuǎn)指令——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn)SJMPrel;PC←(PC)+2+rel
相對(duì)跳轉(zhuǎn)指令——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)JMP@A+DPTR;PC←(A)+(DPTR)
間接長跳轉(zhuǎn)指令——可在以DPTR為基址+A為偏移量之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)1、無條件轉(zhuǎn)移——4條說明:①在程序中addr16,addr16,rel等可用標(biāo)號(hào)代替,表示要轉(zhuǎn) 移的目的地址
②LJMP,STMP,AJMP功能相同,只是轉(zhuǎn)移范圍不同。地址機(jī)器碼00002000300030C30031E60032370033080034DAFB0036800200387803003A18003B80FE原地踏步指令:SJMP$常寫成:HERE:SJMPHERE
程序中標(biāo)號(hào)與地址之間的關(guān)系源程序注釋
ORG0000H;整個(gè)程序起始地址 LJMPMAIN;跳向主程序 ORG0030H;主程序起始地址MAIN:CLRC;MAIN為程序標(biāo)號(hào)LOOP:MOVA,@R0 ADDCA,@R1 INCR0 DJNZR1,LOOP;相對(duì)轉(zhuǎn)移 SJMPNEXT MOVR0,#03HNEXT:DECR0 SJMP$;
END;結(jié)束標(biāo)記例:根據(jù)累加器中的命令鍵值,設(shè)計(jì)命令鍵操作程序入口跳轉(zhuǎn)表。A0…7入口標(biāo)號(hào)PM0…PM7AJMPPM0PMTBJMP@A+DPTR散轉(zhuǎn)指令應(yīng)用舉例AJMPPM0AJMPPM7...例:根據(jù)累加器中的命令鍵值,設(shè)計(jì)命令鍵操作程序入口跳轉(zhuǎn)表。PM: CLR CRL A ; A=A*2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于節(jié)約糧食主題國旗下講話稿范文(13篇)
- 新型風(fēng)電軸承材料研究-洞察分析
- 填料對(duì)混凝土耐久性的影響-洞察分析
- 土壤水勢時(shí)空演變-洞察分析
- 虛擬仿真技術(shù)在職業(yè)教育中的應(yīng)用-洞察分析
- 心理健康與生活質(zhì)量-第1篇-洞察分析
- 物聯(lián)網(wǎng)數(shù)據(jù)質(zhì)量評(píng)估與治理-洞察分析
- 碳捕集與氣候變化應(yīng)對(duì)-洞察分析
- 水資源跨區(qū)域調(diào)配與協(xié)同管理-洞察分析
- 醫(yī)院醫(yī)生調(diào)換科室申請(qǐng)書(8篇)
- 自來水的供水環(huán)保與生態(tài)協(xié)調(diào)
- 羽毛球館運(yùn)營管理指南
- 糧油倉儲(chǔ)管理員職業(yè)等級(jí)考試知識(shí)題
- 2024年度首診負(fù)責(zé)制度課件
- 教師校園網(wǎng)絡(luò)安全培訓(xùn)
- (26)-F10.1伊斯蘭教概述
- 第四講 變電站倒閘操作
- 高鐵站消防培訓(xùn)課件
- 《雷達(dá)發(fā)射機(jī)》課件2
- 廣東省深圳市坪山區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(含解析)
- 專題5.5 一次函數(shù)的幾何綜合(壓軸題專項(xiàng)講練)(浙教版)(解析版)
評(píng)論
0/150
提交評(píng)論