



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章MCS51單微機指令系統(tǒng)南京郵電大學電氣工程系OUTLINE4.1指令系統(tǒng)概述4.2尋址方式4.3分類指令4.4匯編語言程序設計4.1.1指令的概念
指令是CPU能夠識別并指揮計算機執(zhí)行某種操作的命令;一種計算機所能執(zhí)行的全部指令的集合稱為這種計算機的指令系統(tǒng)。 程序設計語言是實現(xiàn)人機對話(交換信息)的基本工具,其可分為
機器語言以8位二進制碼(即1字節(jié))為單位,指令分為單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。匯編語言為使用助記符、符號和數(shù)字等來表示指令的程序語言,易于理解和記憶,通用性不強,屬于某種計算機所獨有。
高級語言例如C語言4.1.1指令的概念
例如,要實現(xiàn)把數(shù)據(jù)11H傳送至累加器A,其機器碼指令為:0111010000010001為了便于書寫和記憶,可采用十六進制表示,則以上指令可表示為:74H11H同樣是實現(xiàn)把數(shù)據(jù)11H傳送至累加器A,其匯編語言指令為:MOVA,#11H@ 間址寄存器的前綴符號。Rn
n=0~7,表示當前寄存器組的8個通用寄存器R0~R7中的一個。Ri
i=0,l,通過通用寄存器R0和Rl間接尋址的片內RAM單元direct8位直接地址,可以是片內RAM單元的地址或一個特殊功能寄存器的地址。#data指令中所含的8位立即數(shù)。#data16
指令中所含的16位立即數(shù)。4.1.2指令系統(tǒng)符號標識的說明addr1616位目的地址,只限于在LCALL和LJMP指令中使用。addr1111位目的地址,只限于在ACALL和AJMP指令中使用。rel以二進制補碼表示的8位帶符號偏移量,常用于相對轉移指令DPTR
數(shù)據(jù)指針。Bit位地址/
位地址的前綴標志,表示對該位操作數(shù)取反。(×)
表示取地址單元x或寄存器x中的內容。((×))
表示以地址單元或寄存器x中的內容為地址的單元中的內容。$
當前指令的地址←或→表示數(shù)據(jù)傳輸?shù)姆较颉硎緮?shù)據(jù)交換操作數(shù)據(jù)形式80C51匯編指令描述中主要有以下常用的數(shù)據(jù)形式:
二進制數(shù):用0,1組成,末尾帶字母B,例如10101100B。
十進制數(shù):由0~9組成,末尾什么都不帶或帶D,例如37。
十六進制數(shù):由0~F組成,末尾帶字母H,例如2AH。
立即數(shù):以“#”開頭,后跟數(shù)值,例如#23、#12H。
行標號:對應程序空間的16位地址,匯編時翻譯成相應的數(shù)據(jù)(即地址),且可直接用于程序中。
SFR:特殊功能寄存器名稱,且可作為直接地址用于程序中。例如指令MOVA,#01H的功能等價于MOV0E0H,#01H,因為累加器A的地址是0E0H。
尋址:在指令中給出的尋找操作數(shù)或操作數(shù)所在地址的方法。 4.2尋址方式執(zhí)行任何一條指令都需要使用操作數(shù)80C5l指令系統(tǒng)中共有7種尋址方式,其對應的尋址空間及使用的寄存器如表4-1所示。序號尋址方式尋址空間及使用的寄存器1立即尋址程序存儲器中的立即數(shù)2寄存器尋址使用R0~R7、A、B、DPTR、CY3寄存器間接尋址片內RAM:使用R0、R1(如@R0、@R1)片外RAM:使用DPTR、R0、R1
(如@DPTR、@R1、@R0)4直接尋址片內RAM低128字節(jié)和特殊功能寄存器5變址尋址程序存儲器空間,使用A、DPTR、PC(如@A+PC、@A+DPTR)6相對尋址程序存儲器空間,使用PC(如PC+偏移量)7位尋址片內RAM低128字節(jié)中的位空間和特殊功能寄存器中的可位尋址位表4-1尋址方式、尋址空間及使用的寄存器
在指令中直接給出操作數(shù),出現(xiàn)在指令中的操作數(shù)稱為立即數(shù)。 在立即數(shù)前面必需加上前綴“#”。 例如:指令MOVDPTR,#1234H
指令功能:把16位立即數(shù)1234H送入數(shù)據(jù)指針DPTR中。⒈立即尋址
在指令中將指定寄存器的內容作為操作數(shù)。寄存器尋址方式中,用符號名稱來表示寄存器。 例如:指令INCR0
功能:把寄存器R0的內容加1,再送回R0中。由于操作數(shù)在R0中,指定了R0,也就得到了操作數(shù)。2.寄存器尋址寄存器尋址方式的尋址范圍包括:(1)4個寄存器組共32個通用寄存器。指令中只能使用當前寄存器組。通過指定PSW中的RS1、RS0,以選擇使用的當前寄存器組。(2)部分特殊功能寄存器。例如累加器A、B寄存器對以及數(shù)據(jù)指針DPTR。2.寄存器尋址指令:INCRn;其功能是將當前工作寄存器區(qū)中Rn寄存器中的內容加1回送Rn。2.寄存器尋址
在指令中給出的寄存器內容是操作數(shù)的地址,從該地址中取出的才是操作數(shù)。寄存器間接尋址也需以寄存器符號名稱的形式表示。在寄存器間接尋址中,在寄存器的名稱前面加前綴“@”。3.寄存器間接尋址寄存器間接尋址的尋址范圍:⑴片內RAM的低128單元,只能采用R0或R1為間址寄存器。其形式為@Ri(i=0,1)。⑵片外RAM的64KB單元,使用DPTR作為間址寄存器。例如:MOVXA,@DPTR。⑶片外RAM低256單元,使用R0或R1作間址寄存器。例如:MOVXA,@R0。⑷堆棧區(qū):堆棧操作指令PUSH和POP,以SP作間址寄存器的間接尋址方式。3.寄存器間接尋址例如:指令MOVA,@R0;(A)←((R0))功能是把以R0中所存儲數(shù)據(jù)為地址的片內RAM單元中的數(shù)據(jù)送累加器A。R0=30H,(30H)=12H3.寄存器間接尋址在指令中直接給出操作數(shù)單元的地址。
例如:指令MOVA,30H;A←(30H)功能:把片內RAM中30H單元內的數(shù)據(jù)傳送給累加器A。 4.直接尋址直接尋址方式只能給出8位地址,限于片內RAM:⑴低128單元,在指令中直接以單元地址形式給出。⑵特殊功能寄存器,可以單元地址形式給出外,還可以寄存器符號形式給出。直接尋址是訪問特殊功能寄存器的唯一方法4.直接尋址
以DPTR或PC為基址寄存器,累加器A為變址寄存器,以兩者內容相加后形成的16位程序存儲器地址作為操作數(shù)地址。又稱基址寄存器+變址寄存器間接尋址。例如:MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC))
功能:該指令的功能是先使PC指向下一條指令地址,然后將當前PC值與累加器A中的數(shù)據(jù)相加,形成變址尋址的單元地址,并將程序存儲器中該地址中的數(shù)據(jù)送累加器A。5.變址尋址例:MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC))5.變址尋址80C51指令系統(tǒng)中的變址尋址指令有如下特點: ⑴變址尋址方式只能對程序存儲器進行尋址
⑵變址尋址指令只有3條,均為單字節(jié)指令
MOVCA,@A+DPTR MOVCA,@A+PC JMP@A+DPTR ⑶變址尋址方式用于查表操作。5.變址尋址
在指令中給出的操作數(shù)為程序轉移的偏移量。 在相對轉移指令中,給出地址偏移量(以“rel”表示),把PC的當前值加上偏移量就構成了程序轉移的目的地址。轉移的目的地址可用如下公式表示:目的地址=(轉移指令所在地址+轉移指令字節(jié)數(shù))+rel
注:偏移量rel是一個帶符號的8位二進制補碼數(shù),所能表示的數(shù)的范圍是-128~+127。因此,以相對轉移指令的所在地址為基點,向前最大可轉移(127+轉移指令字節(jié)數(shù))個單元地址,向后最大可轉移(128-轉移指令字節(jié)數(shù))個單元地址6.相對尋址例如:指令JZ75H;機器碼為:60H75H
PC當前值是1000H,則指令的操作碼60H存放在程序存儲器的1000H單元中,偏移量75H存放在1001H單元中。指令執(zhí)行時,因指令為2字節(jié),首先PC值加2修正為1002H,接下來根據(jù)累加器A的值確定后續(xù)的執(zhí)行:如累加器A值為0,滿足轉移條件,則程序將轉移到1002H+75H=1077H處執(zhí)行。位尋址的尋址范圍:(1)片內RAM中的位尋址區(qū)。片內RAM中的單元地址20H~2FH,共16個單元128位,為位尋址區(qū),位地址是00H~7FH。例如:MOVC,2BH指令的功能是把位尋址區(qū)的2BH位狀態(tài)送累加位C。(2)可位尋址的特殊功能寄存器位??晒┪粚ぶ返奶厥夤δ芗拇嫫鞴灿?1個,有尋址位83位。7.位尋址尋址位在指令中有以下4種表示方法:直接使用位地址表示字節(jié)單元地址加位。例如88H單元的位5,則表示為88H.5
特殊功能寄存器符號加位、例如PSW寄存器的位5,可表示為:為PSW.5
位名稱表示方法,特殊功能寄存器中的一些尋址位是有名稱的,例如PSW寄存器位5為F0標志位,則可使用F0表示該位7.位尋址
指令的表示方法稱之為指令格式包括:指令的長度和指令內部信息的安排等。一條指令通常由操作碼和操作數(shù)兩部分組成。
4.3指令分類按照指令字節(jié)數(shù)分類:單字節(jié)、雙字節(jié)和三字節(jié)指令。MCS-51匯編語言的44種助記符代表了33種操作功能,與尋址方式組合后,構造出了111條指令。從指令執(zhí)行時間來分類:單機器周期指令有64種雙機器周期指令有45種僅乘法、除法指令的執(zhí)行時間為4個機器周期共有111條指令,按其功能可分為5大類:⑴數(shù)據(jù)傳送類指令(29條);⑵算術運算類指令(24條);⑶邏輯運算類指令(24條);⑷控制轉移類指令(17條);⑸布爾操作(位)類指令(17條)。4.3指令分類
數(shù)據(jù)傳送指令示意圖4.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令按功能分類:內部8位數(shù)據(jù)傳送指令
16位數(shù)據(jù)傳送指令外部數(shù)據(jù)傳送指令程序存儲器數(shù)據(jù)傳送指令交換指令和堆棧操作指令助記符8種:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP4.3.1數(shù)據(jù)傳送類指令◆源操作數(shù)可采用寄存器、寄存器間接、直接、立即、寄存器基址加變址等5種尋址方式◆目的操作數(shù)可以采用寄存器、寄存器間接、直接等3種尋址方式◆一般是把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行后源操作數(shù)不變,目的操作數(shù)被修改為源操作數(shù)◆若要求進行數(shù)據(jù)傳送時,目的操作數(shù)不變,則可以用交換指令4.3.1數(shù)據(jù)傳送類指令◆數(shù)據(jù)傳送類指令不影響標志位C、AC、OV
對于P標志一般不加以說明堆棧操作指令可以直接修改程序狀態(tài)字PSW,這時可以使某些標志位發(fā)生改變。4.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令的特點:⑴可以進行直接地址到直接地址的數(shù)據(jù)傳送,能把一個并行I/O口中的內容傳送到片內RAM單元中,而不必經(jīng)過累加器或工作寄存器Rn。⑵用R0和R1寄存器間址訪問片外數(shù)據(jù)存儲器256個字節(jié)址及片內RAM中的任一單元。用DPTR間址訪問片外全部64KB的數(shù)據(jù)存儲器或I/O。4.3.1數(shù)據(jù)傳送類指令
⑶累加器A能對Rn寄存器尋址;能與特殊功能寄存器之間進行一個字節(jié)的數(shù)據(jù)傳送;能對片內RAM直接尋址;能與片內RAM單元之間進行低半字節(jié)的數(shù)據(jù)交換。
⑷
能用變址尋址方式訪問程序存儲器中的表格,將程序存儲器單元中的固定常數(shù)或表格字節(jié)內容傳送到累加器A中。
4.3.1數(shù)據(jù)傳送類指令
80C51內部存儲器和寄存器之間的數(shù)據(jù)傳送。格式:
MOV<目的字節(jié)>,<源字節(jié)>功能:把源字節(jié)的內容送到目的字節(jié),而源字節(jié)的內容不變。
操作屬于拷貝性質。
(1)內部8位數(shù)據(jù)傳送指令
源操作數(shù):累加器A,工作寄存器Rn,…,7),直接地址direct、間接尋址寄存器@Ri和立即數(shù)#data等5種。
目的操作數(shù):累加器A,工作寄存器Rn,直接地址direct和間接尋址寄存器@Ri等4種。以MOV為其助記符,若以目的操作數(shù)分類,可將內部8位數(shù)據(jù)傳送指令分為4組。
(1)內部8位數(shù)據(jù)傳送指令
指令 功能 尋址范圍機器碼
MOVA,Rn;
(A)←(Rn)R0-R711101rrr 8種操作碼(E8~EFH)
MOVA,direct;
(A)←(direct)00-FFH11100101
direct
雙字節(jié)
MOV A,@Ri;
(A)←((Ri))00-FFH1110011r(E6~E7H) 2種操作碼
MOV A,#data;(A)←(#data)#00-#FFH01110100data
雙字節(jié)這組指令的功能是將源操作數(shù)的內容送入累加器A。源操作數(shù)的尋址方式有寄存器尋址、直接尋址、寄存器間接尋址及立即尋址等。上述指令以累加器A為目的操作數(shù),執(zhí)行結果均會影響程序狀態(tài)寄存器PSW中的P標志位。⒈以累加器A為目的操作數(shù)的指令組例如,已知(A)=10H,(R0)=20H,片內RAM(20H)=11H,(21H)=55H,則:MOVA,R0;(A)=(R0)=20HMOVA,@R0;(A)=((R0))=(20H)=11HMOVA,21H;(A)=(21H)=55HMOVA,#21;(A)=21=15H=00010101B需說明的是,指令系統(tǒng)及匯編語言通過不同的后綴來表示不同進制的數(shù)據(jù)。例如十六進制數(shù)的后綴為H,二進制數(shù)的后綴為B,無后綴的數(shù)據(jù)默認為十進制數(shù)⒈以累加器A為目的操作數(shù)的指令組
MOVRn,A ;(Rn)←(A)
MOVRn,direct ;(Rn)←(direct)
MOVRn,#data;(Rn)←data把源操作數(shù)的內容送入當前工作寄存器區(qū)的R0~R7中的某一個寄存器。
⒉以工作寄存器Rn為目的操作數(shù)的指令組例如,已知(30H)=10H,則:MOVR1,30H;(R1)=(30H)=10H
MOV direct,A ;(direct)←(A)MOV direct,Rn ;(direct)←(Rn)MOV direct1,direct2 ;(direct1)←(direct2)
MOV direct,@Ri ;(direct)←((Ri))MOV direct,#data ;(direct)←data功能:把源操作數(shù)的內容送入由直接地址指出的存儲單元。
direct為8位直接地址,可尋址0~255個單元,對80C51可直接尋址內部RAM0~127個地址單元和
128~255地址的特殊功能寄存器。
⒊以直接地址direct為目的操作數(shù)的指令組
MOV @Ri,A;((Ri))←(A)
MOV @Ri,direct;((Ri))←(direct)
MOV @Ri,#data;((Ri))←#data功能:把源操作數(shù)的內容送入由當前工作寄存器區(qū)的Ri中的數(shù)據(jù)作為地址的片內數(shù)據(jù)單元。源操作數(shù)有寄存器尋址、直接尋址和立即尋址3種尋址方式。⒋以間接尋址寄存器Ri為目的操作數(shù)的指令組例如,已知(R0)=20H,(30H)=06H,則:MOV@R0,30H;(20H)=(30H)=06H
MOVDPTR,#data16;(DPTR)←data16
把16位常數(shù)裝入數(shù)據(jù)指針DPTR。唯一的一條16位指令
16位常數(shù)在指令的第二、第三字節(jié)中(第二字節(jié)為高位字節(jié)DPH,第三字節(jié)為低位字節(jié)DPL)。
例:執(zhí)行指令MOVDPTR,#1234H執(zhí)行結果:(DPH)=12H,(DPL)=34H
5.16位數(shù)據(jù)傳送指令6.堆棧操作指令組PUSHdirect;SP←(SP)+1,(SP)←(direct)
POPdirect;direct←((SP)),SP←(SP)-1
入棧(PUSH)指令又稱“壓棧”操作。指令執(zhí)行后(SP)+1指向棧頂上一個空單元,將直接地址direct單元內容送入SP所指示的堆棧單元。 出棧(POP)指令又稱“彈出”操作,由SP所尋址的片內RAM中棧頂?shù)膬热?(SP))送入直接尋址單元direct中,然后執(zhí)行(SP)-1并送入SP。例:假設(DPTR)=1122H,當響應中斷時需將DPTR入棧保護,若此時(SP)=60H,則數(shù)據(jù)入棧時SP及堆棧存儲區(qū)中內容的變化過程如下。
PUSHDPL;(SP)←(SP)+1,將DPL入棧。此指令執(zhí)行后,SP=61H,(61H)=22H
PUSHDPH;(SP)←(SP)+1,將DPH入棧。此指令執(zhí)行后,SP=62H,(62H)=11H需說明的是,單片機堆棧每個單元只能保存8位數(shù)據(jù),對于16位DPTR寄存器,其入棧操作必須分為兩步。6.堆棧操作指令組字節(jié)交換指令XCH組:XCHA,Rn ;(A)←→(Rn)XCHA,direct;(A)←→directXCHA,@Ri;(A)←→((Ri))XCHDA,@Ri;A3~0←→((Ri))3~0SWAPA;A3~0←→A7~4功能∶操作碼XCH實現(xiàn)的是字節(jié)互換操作碼XCHD實現(xiàn)的是半字節(jié)互換;操作碼SWAP實現(xiàn)的是半;字節(jié)互換。十六進制數(shù)或BCD碼都是以4位二進制數(shù)表示,XCHD和SWAP指令主要用于實現(xiàn)十六進制數(shù)或BCD碼的數(shù)位交換。7.數(shù)據(jù)交換指令
實現(xiàn)累加器A與外部數(shù)據(jù)存儲器或I/O口之間傳送一個字節(jié)數(shù)據(jù)的指令。采用間接尋址方式訪問外部數(shù)據(jù)存儲器,有Ri和DPTR兩種間接尋址方式。
采用R0或R1作間址寄存器時,可尋址256個外部數(shù)據(jù)存儲器單元,8位地址和數(shù)據(jù)均由P0口分時輸入和輸出。若要訪問大于256個單元的片外RAM時,可選用任何其它輸出口線來輸出高8位的地址(一般選用P2口輸出高8位地址)。
采用16位DPTR作間址可尋址整個64KB片外數(shù)據(jù)存貯空間,低8位(DPL)由P0口進行分時使用,高8位(DPH)由P2口輸出。(2)外部數(shù)據(jù)的傳送指令組MOVXA,@Ri;A←((Ri))MOVX@Ri,A;
((Ri))←(A)MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;
((DPTR))←(A) 說明:這組指令用于訪問外部擴展的數(shù)據(jù)存儲器,可以讀出或寫入。當訪問其0~255地址范圍時,可通過R0或R1間接尋址的方式訪問,即通過R0或R1指定外部RAM的地址;如果使用數(shù)據(jù)指針DPTR進行間接尋址,則可訪問全部64KB的外部數(shù)據(jù)存儲器空間。⒈外部數(shù)據(jù)存儲器或I/O內容送累加器A例如,已知(R0)=10H,(R1)=30H,片外RAM(30H)=66H,則:MOVXA,@R1;(A)=片外RAM((R1))=片外RAM(30H)=66HMOVX@R0,A;片外RAM(10H)=片外RAM((R0))=(A)=66H
例如,某單片機應用系統(tǒng)外擴了16KBRAM,要求把片內RAM的20H單元內容送至外部RAM的1000H單元中,代碼為:MOVDPTR,#1000H;外部RAM的訪問地址送外部RAM地址指針DPTRMOVR0,#20H;片內RAM的訪問地址送片內RAM間接
尋址寄存器R0MOVA,@R0;取內部數(shù)據(jù)存儲器20H單元內容MOVX@DPTR,A;送外部數(shù)據(jù)存儲器1000H單元MOVCA,@A+PC;(A)←程序存儲器((A)+(DPTR))MOVCA,@A+DPTR;(PC)←(PC)+1,(A)←((A)+(PC))功能:從程序存儲器中讀取數(shù)據(jù)(如表格、常數(shù)等)。A為變址寄存器,PC、DPTR為基址寄存器,單字節(jié)指令;DPTR為基址寄存器時,允許數(shù)表存放在程序存儲器的任意單元,稱為遠程查表;PC為基址寄存器時,數(shù)表只能放在當前PC往下的255個單元中,稱為近程查表。編程時需計算A值與數(shù)表首址的偏移量。(3)程序存儲器數(shù)據(jù)傳送指令例如,查表求平方數(shù)(遠程查表法),指令如下: MOVDPTR,#TABLE ;指向表首址
MOVCA,@A+DPTR ;查表得到平方數(shù)
MOV20H,A ;存平方數(shù)HERE:SJMPHERETAB∶DB00H,01H,04H,09H ;平方表02~92DB16H,25H,36H DB49H,64H,81H遠程查表法實例例4:求平方數(shù)(近程查表)0030H:MOVA,#3;需查詢平方數(shù)的數(shù)據(jù)“3”送至累加器A0032H:ADDA,#2;雙字節(jié)指令,修正偏移量,rel=20034H:MOVCA,@A+PC;單字節(jié)指令,查表得到平方數(shù)0035H:SJMPNEXT ;雙字節(jié)指令TABLE∶DB00H,01H,04H,09H,16H;平方表02~92 DB25H,36H,49H,64H,81H ……ORG0060HNEXT:……注∶rel=TABLE-(查表指令地址+1);MOVC指令為單字節(jié)。近程查表法實例4.3.2算術運算類指令
通過算術邏輯運算單元ALU進行數(shù)據(jù)運算處理。包括加、減、乘、除四則運算,還有帶借位減法、比較指令。加法類指令包括加法、帶進位的加法、加1以及二-十進制調整。
ALU僅執(zhí)行無符號二進制整數(shù)的算術運算。對于帶符號數(shù)則要進行其它處理。 助記符8種:ADD、ADDC、INC、DA、SUBB、DEC、MUL、DIV。除了加1和減1指令之外,算術運算結果將使CY、AC、OV置位或復位。
ADDA,Rn ;(A)+(Rn)→(A)
ADDA,direct;(A)+(direct)→(A)
ADDA,@Ri;(A)+((Ri))→(A)
ADDA,#data;(A)+data→(A)
功能:將工作寄存器Rn、片內RAM單元中的內容、間接地址存儲器中的8位無符號二進制數(shù)及立即數(shù)與累加器A中的內容相加,結果仍存放在A中。
1.加法指令該組指令對PSW中標志位的影響如下:(1)若D7位有進位,則進位標志位CY=1,否則CY=0。(2)若D3位有進位,則輔助進位標志位AC=1,否則AC=0。(3)若D7和D6不同時有進位,則溢出標志位OV=1,否則OV=0。(OV)=1表示兩個正數(shù)相加而和為負數(shù)或兩個負數(shù)相加而和為正數(shù)的錯誤結果。(4)相加結果送入累加器A中后,將根據(jù)累加器A中1的個數(shù)調整奇偶標志位P。1.加法指令
例:設(A)=C3H,(R0)=AAH。 執(zhí)行指令:ADDA,R0
11000011B
+10101010B01101101B
執(zhí)行結果:(A)=6DH,(CY)=1,(OV)=1,(AC)=0,P=1。
1.加法指令
ADDCA,Rn;(A)←(A)+(Rn)+(CY)
ADDCA,direct;(A)←(A)+(direct)+(CY)
ADDCA,@Ri;(A)←(A)+((Ri))+(CY)
ADDCA,#data;(A)←(A)+#data+(CY)
功能:將工作寄存器Rn、片內RAM單元中的內容、間接地址存儲器中的8位二進制數(shù)及立即數(shù)與累加器A的內容和當前進位標志CY的內容相加,相加的結果仍存放在A中。常用于多字節(jié)數(shù)相加。2.帶進位加法指令這類指令將影響標志位AC、CY、OV、P。當和的第3位有進位時,將AC標志置位,否則清0。當和的第7位有進位時,將CY標志置位,表示和數(shù)溢出,否則清0。
對于帶符號數(shù)運算,當和的第7位與第6位中有一位進位而另一位不產(chǎn)生進位時,溢出標志OV置位,否則為0。(OV)=1表示兩個正數(shù)相加,和為負數(shù);或兩個負數(shù)相加而和為正數(shù)的錯誤結果。
2.帶進位加法指令
例:設(A)=0D3H,(R0)=0AAH,(CY)=1。 執(zhí)行指令:ADDCA,R0 11010011 +10101010
+1(CY) 101111110
執(zhí)行結果:(A)=7EH,(CY)=1,(OV)=l, (AC)=0。 對于帶符號數(shù)的帶進位相加,溢出標志為1,意味著出錯,上例為兩個負數(shù)相加,出現(xiàn)結果為正數(shù)的錯誤。2.帶進位加法指令
例:已知(A)=B3H,(R1)=56H。 執(zhí)行ADDA,R1指令:
B3H10110011
+56H
+0101011009H
1
00001001
CY=1CY=1,OV=0,AC=0
若兩個數(shù)是無符號數(shù),則B3H+56H=109H,答案正確。若兩個數(shù)是帶符號數(shù),則B3H的原碼是(–77D),56H原碼為86D,(–77D)+86D=09D,答案也是正確的,OV=0。
12.帶進位加法指令INC Rn ;(Rn)←(Rn)+1INC direct ;(direct)←(direct)+1INC @Ri ;((Ri))←((Ri))+1INC A ;(A)←(A)+lINC DPTR ;(DPTR)←(DPTR)+1
功能:將工作寄存器Rn、片內RAM單元中的內容、間接地址存儲器中的8位二進制數(shù)、累加器A和數(shù)據(jù)指針DPTR的內容加1,相加的結果仍存放在原單元中。3.增量指令和減量指令
當指令中的direct為P0~P3端口(地址分別為內部RAM的80H、90H、A0H、B0H)時,其功能是修改輸出口的內容,指令執(zhí)行過程中,首先讀入端口內容,在CPU中加1,再輸出到端口,要注意的是讀入來自端口的鎖存器而不是端口的引腳。這類指令具有讀-修改-寫的功能。例:設(R0)=2FH,(2FH)=0FFH,(30H)=10H。
INC @R0 ;(2FH)=((R0))=0FFH+1=00H
INC R0 ;(R0)=2FH+1=30H
INC @R0 ;(30H)=((R0))=10H+1=11H執(zhí)行結果為(R0)=30H,(2FH)=00H.(30H)=11H3.增量指令和減量指令
DEC A ;(A)-1→(A)
DEC Rn ;(Rn)-1→(Rn)
DEC direct;(direct)-1→(direct)
DEC @Ri;((Ri))-1→((Ri))3.增量指令和減量指令例:設(R0)=7FH,(7EH)=00H,(7FH)=40H。執(zhí)行指令:DEC @R0;(7FH)-1=40H-l=3FH→(7FH)DECR0;(R0)一l=7FH-l=7EH→(R0)DEC @R0;(7EH)-l=00H-l=FFH→(7EH)執(zhí)行結果:(R0)=7EH,(7EH)=FFH, (7FH)=3FH3.增量指令和減量指令SUBB A,Rn ;(A)-(Rn)-(CY)→(A)SUBB A,drect ;(A)一(drect)一(CY)→(A)SUBB A,@Ri ;(A)一((Ri))一(CY)→(A)SUBB A,#dala ;(A)-data-(CY)→(A)功能:從A中減去進位位CY和指定的變量,差存入A中。
CY:若第7位有借位則CY置1,否則CY清0。
AC:若第3位有借位,則AC置1,否則AC清0。
OV:若第7位和第6位中有一位需借位而另一位不借位,則OV置1;OV位用于帶符號的整數(shù)減法。
80C51指令系統(tǒng)中沒有不帶借位的減法4.帶借位減法指令
DA A
功能:對兩個BCD碼的加法結果進行調整。 說明:BCD碼采用4位二進制數(shù)編碼,并且只采用了其中的10個編碼,即0000~1001,分別代表BCD碼0~9,而1010~1111為無效碼。 當相加結果大于9,說明已進入無效編碼區(qū); 當相加結果有進位,說明已跳過無效編碼區(qū)。 凡結果進入或跳過無效編碼區(qū)時,結果是錯誤的,相加結果均比正確結果小6(差6個無效編碼)。5.二-十進制調整指令 十進制調整的修正方法為:當累加器低4位大于9或半進位標志AC=1時,則進行低4位加6修正 (A0~3)+6→(A0~3)
即(A)=(A)+06H
當累加器高4位大于9或進位標志CY=1時,進行高4位加6修正 (A4~7)+6→(A4~7)
即(A)=(A)+60H5.二-十進制調整指令
例:設(A)=01010110=56BCD, (R3)=01100111=67BCD,(CY)=1執(zhí)行指令:ADDCA,R3 DAA執(zhí)行ADDCA,R3
(A)01010110(56BCD)(R3)01100111(67BCD)
十(CY)1.10111110(高、低4位均大于9)再執(zhí)行DAA01100110(加66H操作)
Cy=1
00100100(124BCD)即BCD碼數(shù)56+67+1=124設兩個4位BCD碼分別存在內部RAM的50H、51H和60H、61H單元中,求兩個BCD之和,結果存入內部40H、41H單元。
MOVR0,#50H ;被加數(shù)首址
MOVR1,#60H ;加數(shù)首址
MOVA,@R0 ;取被加數(shù)
ADDA,@R1 ;與加數(shù)相加
DAA ;二-十進制調整
MOV40H,A ;存和INCR0 ;高位相加
INCR1 MOVA,@R0
ADDCA,@R1 DAA MOV41H,A例:兩個多字節(jié)無符號BCD碼數(shù)相加
例8:對累加器A中壓縮BCD碼數(shù)減1 ADDA,#99H DAA HERE:SJMPHERE說明:累加器A允許的最大BCD碼數(shù)為99BCD,當對A實行加99BCD碼數(shù)時,必然形成對BCD碼百位數(shù)的進位,而剩在A中的內容正是壓縮BCD碼數(shù)減1。 如BCD的59H,經(jīng)加99H和DAA的調整后,為58H且CY=1,不考慮進位CY,則BCD碼59-1=58
⒈乘法指令
MUL AB功能:將A和B中兩個無符號8位二進制數(shù)相乘,16位積的低8位存于A中,高8位存于B中。例:設(A)=50H(80D),(B)=A0H(160D)。執(zhí)行指令:MULAB 即80×160=12800=3200H執(zhí)行結果:乘積3200H(12800),(A)=00H,(B)=32H, (OV)=1,(CY)=0(CY總是清0)。(OV)=1表示乘積大于255,即高位B不為0,否則OV置0.6.乘法/除法指令
DIV AB
除法指令的功能是將A中無符號8位二進制數(shù)除以B中的無符號8位二進制數(shù),商存于A,余數(shù)存于B中,并將CY和OV置0;當(B)=0,OV置1,CY清0。當除數(shù)(B)=0時,結果不定,則OV置1。CY總是清0。例:設(A)=FBH(251D),(B)=12H(18D)。執(zhí)行指令:DIVAB執(zhí)行結果:(A)=0DH(商為13),(B)=11H(余數(shù)為17)(OV)=0,(CY)=0。 ⒉除法指令
把累加器A中無符號二進制整數(shù)(00~FFH)轉換為3位壓縮BCD碼(0~255),并存入內存30H和31H單元BINBCD:MOVB,#100 DIVAB;A÷100 百位在A,余數(shù)在B MOV30H,A ;百位數(shù)送30HMOVA,B MOVB,#0AH DIVAB;余數(shù)÷10,十位在A低4位,個位數(shù)在B SWAPA ;十位數(shù)放A的高4位
ADDA,B ;十位數(shù)和個位數(shù)組合后送31H MOV31H,A RET例9:數(shù)的碼制轉換4.3.3邏輯運算類指令
1.單邏輯運算類指令:與、或、異或、清除、求反、移位助記符9種:ANL、ORL、XRL、RL、RLC、RR、RRC、CPL、CLR
只按位進行邏輯運算,結果不影響PSW中標志位4.3.3邏輯運算類指令
CLRA;(A)←0CPLA;(A)←~ARLA;(An+1)←(An),(A0)←(A7)RLCA;(An+1)←(An),(A0)←C,C←(A7)RRA;(An)←(An+1),(A7)←(A0)RRCA;(An)←(An+1),(A7)←C,C←(A0)4.3.3邏輯運算類指令
設(A)=0A6H(10100110B),(CY)=1,則執(zhí)行RRCA指令后的執(zhí)行結果為(A)=0D3H(11010011B),(CY)=0。
助記符為ANL,用符號“∧”表示:
ANLA,Rn ;(A)←(A)∧(Rn)
ANLA,direct ;(A)←(A)∧(direct)
ANLA,@Ri ;(A)←(A)∧((Ri))
ANLA,#data ;(A)←(A)∧dataANLdirect,A ;(direct)←(direct)∧(A)
ANLdirect,#data ;(direct)←(drect)∧data
功能:將目的地址單元中的數(shù)和源地址單元中的數(shù)按“位”相“與”,其結果放回目的地址單元中。2.雙操作數(shù)邏輯操作指令(1)邏輯“與”運算指令例:設(A)=A3H(10100011B),
(R0)=AAH(10101010B)。執(zhí)行指令:ANLA,Rn執(zhí)行結果:(A)=A2H(10100010B)。例:設P1=FFH執(zhí)行指令:ANLP1,#0F0H執(zhí)行結果:P1=F0H,P1.7~P1.4位狀態(tài)不變,P1.3~P1.0位被清除
邏輯“與”運算指令用做清除或屏蔽某些位。(1)邏輯“與”運算指令助記符為ORL,用符號“∨”表示:
ORLA,Rn;(A)←(A)∨(Rn)
ORLA,direct ;(A)←(A)∨(direct)
ORLA,@Ri ;(A)←(A)∨((Ri))
ORLA,#data ;(A)←(A)∨dataORLdirect,A ;(direct)←(direct)∨(A)
ORLdirect,#data;(direct)←(direct)∨data
功能:將目的地址單元中的數(shù)和源地址單元中的數(shù)按“位”相“或”,其結果放回目的地址單元中(2)
邏輯“或”運算指令例:設(A)=0A2H(10100010B),(R0)=45H(01000101B)。執(zhí)行指令:ORLA,R0
執(zhí)行結果:(A)=0E7H(11100111B)。
邏輯或運算指令用做指定位強迫置位。給某些位置1,合并兩個數(shù)中的“1”。
(2)
邏輯“或”運算指令
助記符為XRL,用符號“⊕”表示,其運算規(guī)則為:0⊕0=0 1⊕1=0 0⊕1=11⊕0=1
XRL A,Rn ;(A)←(A)⊕(Rn)
XRL A,drect ;(A)←(A)⊕(direct)
XRL A,@Ri ;(A)←(A)⊕((Ri))
XRL A,#data;(A)←(A)⊕dataXRL direct,A;(direct)←(direct)⊕(A)
XRL direct,#data;(direct)←(direct)⊕data
功能:將目的地址單元中的數(shù)和源地址單元中的數(shù)按“位”相“異或”,其結果放回目的地址單元中。(3)邏輯“異或”運算指令例:設(A)=A3H(10100011B),(R0)=45H(01000l0lB)。執(zhí)行指令為XRL A,R0
10100011
⊕ 01000101 11100110
執(zhí)行結果為(A)=E6H(111001l0B)。用于對目的操作數(shù)的某些位取反,也可以判兩個數(shù)是否相等,若相等則結果為0。(3)邏輯“異或”運算指令4.3.4控制轉移類指令
程序的順序執(zhí)行是由PC自動加1來實現(xiàn)的,但在應用系統(tǒng)中,往往會遇到一些情況,需要強迫改變程序執(zhí)行順序,比如調用子程序,比如根據(jù)檢測值與設定值的比較結果要求程序轉移到不同的分支入口等。
80C51設有豐富的控制轉移指令,可分為無條件轉移指令、條件轉移指令、循環(huán)轉移指令、子程序調用和返回指令及空操作指令等。但不包括布爾變量控制程序轉移指令助記符12種:AJMP、LJMP、SJMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP4.3.4控制轉移類指令
指令功能SJMPrel ;(PC)←(PC)+2,(PC)←(PC)+relAJMPaddr11;(PC)←(PC)+2,(PC10~PC0)←addr11LJMPaddrl6;(PC)←addr16
功能:程序無條件地轉移到各自指定的目標地址去執(zhí)行,不同的指令形成的目標地址不同。
1.無條件轉移指令
SJMPrel10000000相對地址
目標地址是由當前PC值和指令的第2字節(jié)提供的8位帶符號的相對地址rel相加而成的。指令可轉向當前PC值的后128B或前127B。
(PC)=(PC)+2 ;當前PC地址
(PC)=(PC)+rel(1)相對尋址指令當相對地址為FEH(-02)時,SJMP指令實現(xiàn)原地轉圈的運行狀態(tài)。有兩種情況:⑴根據(jù)偏移量計算轉移的目的地址例:在2100H地址上有SJMP指令:2100H SJMP 7FH源地址為2100H,當前PC值為(2100H+02H)=2102H,偏移量rel=7FH,是正數(shù),執(zhí)行指令SJMP7FH后,程序轉移至PC=2102H+7FH=2181H去執(zhí)行。(1)相對尋址指令例:在2100H地址上有SJMP指令2100H SJMP 80H
當前PC值為(2100H+02H)=2102H,偏移量rel=80H,是負數(shù),程序轉移至PC=2102H-80H=2082H去執(zhí)行。
(1)相對尋址指令★采用符號位擴展的方法進行計算。
8位偏移量的符號位為1,則高8位為全1,即FFH,若8位偏移量的符號位為0,則高8位為全0,即00H。
2102H 2102H
+007FH
+FF80H 2181H 2082H(1)相對尋址指令⑵根據(jù)目的地址計算偏移量
在人工進行匯編時,必須算出偏移量rel,才能得到機器碼。rel=(目標地址-當前PC地址)的低8位,而高8位必須是00H或FFH,否則超出短轉移范圍,溢出出錯。例:2100H 80
FEHERE:SJMPHERErel:2100H-2102H=FFFEH。高8位是FFH,表示負跳,偏移量為FEH(-2)。(1)相對尋址指令AJMP addr11A10A9A800001A7A6A5A4A3A2A1A0◆目標地址由指令第1字節(jié)的高3位a10~a8和指令第2字節(jié)的a7~a0所組成。以指令提供的11位地址去取代當前PC的低11位,形成新的PC值,即為本絕對轉移地址。◆程序的目標地址必須包含AJMP指令后第1條指令的第1個字節(jié)(即當前PC值)在內的2KB范圍內(即高5位地址必須相同)。(2)
短跳轉指令例:設(PC)=0456H,標號JMPADR所指的單元為0123H。執(zhí)行指令:AJMPJMPADR 機器碼為00100001
00100011執(zhí)行結果程序轉向為(PC)=0123H例:0000H2111AJMP0111H ;轉移有效
07FEH8110AJMP0C10H;當前PC值為 ;0800H,轉移有效
0100HAJMP0B11H ;轉移無效機器碼為01100001
00010001,PC=0000001100010001(2)
短跳轉指令
LJMP addr16◆目標地址由指令第2字節(jié)(高8位地址)和第3字節(jié)(低8位地址)組成。◆程序轉向的目標地址可以包含程序存儲器的整個64KB空間。例:設(PC)=0123H,標號ADR所指單元地址為3456H。 執(zhí)行指令:LJMPADR
執(zhí)行結果:(PC)=3456H(3)
長轉移指令JMP @A+DPTR;(PC)←(A)+(DPTR)◆目標地址是將累加器A中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的內容相加而得(在程序運行時動態(tài)決定)。相加運算不影響累加器A和數(shù)據(jù)指針DPTR的原內容。若相加的結果大于64KB,則從程序存儲器的零地址往下延續(xù)。◆當DPTR的值固定,而給A賦以不同的值,即可實現(xiàn)程序的多分支轉移。如實現(xiàn)鍵盤譯碼散轉功能2.散轉指令例:設(A)=06H,(DPTR)=2000H。 執(zhí)行指令:JMP@A+DPTR
執(zhí)行結果: (PC)=(A)+(DPTR)=06H+2000H=2006H
程序轉向456CH單元執(zhí)行。
2.散轉指令MOVA,R0RL AADDA,R0;前三條指令實現(xiàn)了(R0)*3,送至AMOVDPTR,#TAB;散轉表首址送DPTRJMP @A+DPTRTAB:LJMPPRPG0 ;轉程序PROG0
LJMPPRPG1 ;轉程序PROG1LJMPPRPG2 ;轉程序PROG2LJMPPRPG3 ;轉程序PROG3例:要求根據(jù)R0中存放的命令編號(0~3),將程序分別跳轉至標號為PROG0~PROG3的處理子程序執(zhí)行。2.散轉指令
在滿足指令中規(guī)定的條件(如累加器內容是否為零,兩個操作數(shù)是否相等)時才執(zhí)行無條件轉移,否則程序順序執(zhí)行。
6條指令可分為判零轉移指令和比較轉移指令兩部分3.條件轉移指令
JZ rel
;若(A)=0,則(PC)=(PC+2)+rel
;若(A)≠0,則(PC)=(PC)+2
JNZ rel
;若(A)≠0,則(PC)=(PC+2)+rel
;若(A)=0,則(PC)=(PC)+2
滿足各自條件時,程序轉向指定的目標地址執(zhí)行(相當于執(zhí)行SJMPrel)。當不滿足各自條件時,程序順序往下執(zhí)行。★rel=目標地址-PC的當前值注意:差值的最高兩位必須為00H或FFH,否則超出偏移量允許范圍。rel取低兩位。(1)累加器判零轉移指令 ◆偏移量rel是用補碼形式表示的帶符號的8位數(shù),程序轉移的目標地址為當前PC值的后128B或前127B。 ◆指令執(zhí)行后不影響任何操作數(shù)和標志位。例:設(A)=01H執(zhí)行程序
JZLOOP1 ;因為(A)≠0,程序繼續(xù)執(zhí)行
DECA ;(A)一l=00HJZLOOP2 ;因為(A)=00H,程序轉向標號;LABEL2指示的地址執(zhí)行
LABEL1:…LABEL2:…(1)累加器判零轉移指令
DJNZRn,rel;①(PC)←(PC)+2,(Rn)←(Rn)-1;;②如果(Rn)≠0,則(PC)←(PC)+rel,
否則順序執(zhí)行DJNZdirect,rel;①(PC)←(PC)+3,(direct)←(direct)-1;;②如果(direct)≠0,則(PC)←(PC)+rel,
否則順序執(zhí)行
功能:每執(zhí)行一次本指令,先將指定的Rn或direct的內容減1,再判別其內容是否為0。
不為0,轉向目標地址,繼續(xù)執(zhí)行循環(huán)程序;
為0,則結束循環(huán)程序段,程序往下執(zhí)行(2)循環(huán)轉移指令例:從P1.7引腳輸出5個方波
MOVR2,#10 ;5個方波,10個狀態(tài)
LOP:CPLP1.7 ;P1.7狀態(tài)變反
DJNZR2,LOP
將2000H單元開始的一批數(shù)據(jù)傳送到從3000H開始的單元中,數(shù)據(jù)長度在內部RAM的30H中。
MOVDPTR,#2000H;源數(shù)據(jù)區(qū)首址
PUSHDPL ;源數(shù)據(jù)區(qū)首址壓棧保護
PUSHDPH MOVDPTR,#3000H;目的數(shù)據(jù)區(qū)首址
MOVR6,DPL ;目的數(shù)據(jù)區(qū)首址存入寄存器
MOVR7,DPH 例12:數(shù)據(jù)塊移動LP:POPDPH ;取數(shù)據(jù)區(qū)地址指針POPDPLMOVXA,@DPTR;取源數(shù)INCDPTRPUSHDPLPUSHDPHMOVDPL,R6 ;取目的數(shù)據(jù)區(qū)地址指針MOVDPH,R7MOVX@DPTR,A;存入目的數(shù)據(jù)區(qū) INCDPTR MOVR6,DPL MOVR7,DPH DJNZ30H,LP ;若數(shù)據(jù)塊未移完,則繼續(xù)
POPDPH POPDPL SJMP$
注意:2000H和3000H都在外部RAM或I/O中,使用地址指針均為DPTR,注意DPTR的保護、恢復。CJNEA,direct,rel;CJNEA,#data,rel;CJNERn,#data,rel;CJNE@Ri,#data,rel功能:①(PC)←(PC)+3;②如果(OP1)≠(OP2),(PC)←(PC)+rel,且若OP1<OP2則CY=1,否則CY=0;③否則(即(OP1)=(OP2))順序執(zhí)行程序,且CY不變其指令格式為:CJNE(操作數(shù)1),(操作數(shù)2),rel ◆具有比較轉移和數(shù)值大小比較的功能(3)比較轉移指令10111rrr
#data
rel
這組指令的功能是對指定的兩操作數(shù)進行比較,即(操作數(shù)1)-(操作數(shù)2),◆比較結果均不改變兩個操作數(shù)的值,僅影響標志位CY比如
CJNERn,#data,rel指令的編碼為
CJNE指
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培土生金潤腸法治療肺脾氣虛津虧型功能性便秘的臨床療效觀察
- 住宅樓裝修合同范例
- 養(yǎng)生館雇傭合同范例
- 制式補充合同范例
- 加工背包合同范例
- 會計教育培訓合同范例
- 中融信托合同范本
- 人社部員工勞動合同范例
- 個人和廚師合同范本
- 乳膠合同范例
- XX基于物聯(lián)網(wǎng)技術的智慧養(yǎng)老院建設方案
- 2024年執(zhí)業(yè)醫(yī)師考試-臨床執(zhí)業(yè)助理醫(yī)師考試近5年真題集錦(頻考類試題)帶答案
- 斷絕父子關系協(xié)議書
- 金屬材料課程設計作業(yè)
- 2023年古文中的化學知識歸納及相關練習題(含答案)
- 《基礎寫作》試卷及答案
- 2025年高考數(shù)學復習大題題型歸納:解三角形(原卷)
- 醫(yī)院軟式內鏡清洗消毒技術規(guī)范
- 2024年中央空調市場占有率分析:中央空調國產(chǎn)品牌市場占有率上升至52.57%
- 2024年電力交易員(中級工)職業(yè)鑒定理論考試題庫-下(多選、判斷題)
- 輪胎英語詞匯
評論
0/150
提交評論