版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第2章
AT89S51單片機(jī)的
指令系統(tǒng)
122第2章目錄2.1指令系統(tǒng)概述2.2指令格式2.3指令系統(tǒng)的尋址方式2.4AT89S51指令系統(tǒng)分類介紹
2.4.1數(shù)據(jù)傳送類指令
2.4.2算術(shù)運(yùn)算類指令
2.4.3邏輯操作類指令
2.4.4控制轉(zhuǎn)移類指令
2.4.5位操作類指令2.5AT89S51指令匯總2.6某些指令的說明3AT89S51單片機(jī)使用MCS-51指令系統(tǒng)。介紹指令系統(tǒng)尋址方式對(duì)111條基本指令按功能分類詳細(xì)講解。指令---是CPU按照人們的意圖來完成某種操作的命令,它以英文名稱或縮寫形式作為助記符。匯編語言指令---用助記符、符號(hào)地址、標(biāo)號(hào)等表示的書寫程序的語言。掌握匯編語言指令是程序設(shè)計(jì)的基礎(chǔ)。內(nèi)容概要42.1指令系統(tǒng)概述簡(jiǎn)明、易掌握、效率較高的指令系統(tǒng),復(fù)雜指令集。按所占字節(jié)分,分三種:(1)單字節(jié)指令49條;(2)雙字節(jié)指令45條;(3)三字節(jié)指令17條。按執(zhí)行時(shí)間來分,分三種:(1)1個(gè)機(jī)器周期(12個(gè)時(shí)鐘振蕩周期)的指令64條;(2)2個(gè)機(jī)器周期指令45條;(3)4個(gè)機(jī)器周期——乘、除指令。4512MHz晶振,每個(gè)機(jī)器周期為1s。2.2指令格式指令格式:指令的表示方法。指令通常由兩部分組成:操作碼和操作數(shù)。操作碼——指令進(jìn)行什么操作。操作數(shù)——指令操作的對(duì)象。可能是一具體數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。指令長度不同,格式也就不同。56(1)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。(2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。(3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。2.3指令系統(tǒng)的尋址方式尋址方式——在指令中說明操作數(shù)所在地址的方法。一般說,尋址方式越多,功能就越強(qiáng),靈活性則越大,指令系統(tǒng)就越復(fù)雜。尋址方式所要解決的主要問題就是如何在整個(gè)存儲(chǔ)器和寄存器的尋址空間內(nèi)快速地找到指定的地址單元。下面介紹指令系統(tǒng)7種尋址方式。671.寄存器尋址方式指令中的操作數(shù)為某一寄存器的內(nèi)容。例如:MOV A,Rn
;(Rn)→A,n=0~7把Rn中的源操作數(shù)送入到累加器A中。由于指令指定了從寄存器Rn中取得源操作數(shù),所以稱為寄存器尋址方式。本尋址方式的尋址范圍:(1)4組通用工作寄存區(qū)共32個(gè)工作寄存器。但只對(duì)當(dāng)前工作寄存器區(qū)的8個(gè)工作寄存器尋址,指令中的寄存器名稱只能是R0~R7。(2)部分特殊功能寄存器,如累加器A、寄存器B以及數(shù)據(jù)指針寄存器DPTR等。782.直接尋址方式指令中直接給出操作數(shù)的單元地址,該單元地址中的內(nèi)容就是操作數(shù),直接的操作數(shù)單元地址用“direct”表示。例如:
MOV A,direct
“direct”就是操作數(shù)的單元地址。例如:
MOV A,40H
表示把內(nèi)部RAM40H單元(direct)的內(nèi)容傳送到A。指令中源操作數(shù)(右邊的操作數(shù))采用的是直接尋址方式。
指令中兩個(gè)操作數(shù)都可由直接尋址方式給出。例如:
MOV direct1,direct289具體指令:MOV42H,62H把片內(nèi)RAM中62H單元的內(nèi)容送到片內(nèi)RAM中的42H單元中。3.寄存器間接尋址方式寄存器中存的是操作數(shù)地址,即先從寄存器中找到操作數(shù)的地址,再按該地址找到操作數(shù)。為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器名稱前面加前綴標(biāo)志“@”。例如:MOVA,@Ri
;i=0或1910其中,Ri的內(nèi)容為40H,即把內(nèi)部RAM40H地址單元中的內(nèi)容傳送給A。4.立即數(shù)尋址方式直接在指令中給出操作數(shù)——也稱立即數(shù)。為了與直接尋址指令中的直接地址加以區(qū)別,需在操作數(shù)前加前綴標(biāo)志“#”。例如:MOVA,#40H第一個(gè)字節(jié)是操作碼,第二字節(jié)是立即數(shù),就是放在程序存儲(chǔ)器內(nèi)的常數(shù)。10115.基址寄存器加變址寄存器間址尋址方式以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,以兩者內(nèi)容相加形成的16位地址作為目的地址進(jìn)行尋址。例如指令:MOVC A,@A+DPTR
其中,(A)=05H,(DPTR)=0400H,指令執(zhí)行結(jié)果是把程序存儲(chǔ)器0405H單元的內(nèi)容傳送給A。本尋址方式的指令有3條:
MOVC A,@A+DPTR MOVC A,@A+PC JMP A,@A+DPTR前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。例如,將固1112定的、按一定順序排列的表格存放在程序存儲(chǔ)器中,在程序運(yùn)行中由A的動(dòng)態(tài)參量來確定讀取對(duì)應(yīng)的表格參數(shù)。第3條為散轉(zhuǎn)指令,A中內(nèi)容為程序運(yùn)行后的動(dòng)態(tài)結(jié)果,可根據(jù)A中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。6.相對(duì)尋址方式解決程序轉(zhuǎn)移。該尋址是以該轉(zhuǎn)移指令的地址(PC值)加上它的字節(jié)數(shù),再加上相對(duì)偏移量(rel),形成新的轉(zhuǎn)移目的地址,從而程序轉(zhuǎn)移到該目的地址。轉(zhuǎn)移的目的地址用下式計(jì)算:目的地址=轉(zhuǎn)移指令所在的地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel13其中,偏移量rel是帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù),–128~+127。程序轉(zhuǎn)移范圍是以轉(zhuǎn)移指令的下條指令首地址為基準(zhǔn)地址,相對(duì)偏移在–128~+127之間。例如,LJMPrel程序要轉(zhuǎn)移到該指令的PC值加3再加上rel的目的地址處。編寫程序時(shí),只需在轉(zhuǎn)移指令中直接寫要轉(zhuǎn)向的地址標(biāo)號(hào)。例如:
LJMPLOOP
“LOOP”
為目的地址標(biāo)號(hào)。匯編時(shí),由匯編程序自動(dòng)計(jì)算和填入偏移量。但手工匯編時(shí),偏移量的值由手工計(jì)算。13147.位尋址方式對(duì)內(nèi)部RAM和特殊功能寄存器具有位尋址功能的某位內(nèi)容進(jìn)行置1和清0操作。位地址一般以直接位地址給出,位地址符號(hào)為“bit”。例如:MOVC,bit
其具體指令:MOVC,40H把位地址為40H的值送到進(jìn)位位C。由于AT89S51具有位處理功能,可直接對(duì)數(shù)據(jù)位方便地實(shí)現(xiàn)置1、清0、求反、傳送、判跳和邏輯運(yùn)算等操作,為測(cè)控系統(tǒng)的應(yīng)用提供了最佳代碼和速度,增強(qiáng)了實(shí)時(shí)性。14157種尋址方式已介紹完畢。問題:當(dāng)一條指令給定后,如何來確定該指令的尋址方式?例如:
MOVA,#40H,屬于立即數(shù)尋址還是寄存器尋址?要看以哪個(gè)操作數(shù)作為參照系。操作數(shù)分為源操作數(shù)和目的操作數(shù)。對(duì)于源操作數(shù)“#40H”來說,是“立即數(shù)尋址”方式,但對(duì)目的操作數(shù)“A”來說,是屬于“寄存器尋址”方式。一般而言,尋址方式指的是源操作數(shù),所以此例為立即數(shù)尋址方式。對(duì)指令系統(tǒng)7種尋址方式總結(jié),概括見表2-1。151616序號(hào)尋址方式尋址空間1寄存器尋址R0~R7、A、B、DPTR等2直接尋址內(nèi)部128字節(jié)RAM、特殊功能寄存器3寄存器間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器4立即數(shù)尋址程序存儲(chǔ)器中的立即數(shù)5基址寄存器加變址寄存器間接尋址讀程序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)6相對(duì)尋址程序存儲(chǔ)器相對(duì)轉(zhuǎn)移7位尋址內(nèi)部RAM中的可尋址位、SFR中的可尋址位表2-17種尋址方式及其尋址空間172.4AT89S51指令系統(tǒng)分類介紹共111條指令,按功能分為五類:(1)數(shù)據(jù)傳送類(28條)(2)算術(shù)運(yùn)算類(24條)(3)邏輯操作類(25條)(4)控制轉(zhuǎn)移類(17條)(5)位操作類(17條)17182.4.1數(shù)據(jù)傳送類指令使用最頻繁。一般數(shù)據(jù)傳送類指令的助記符為“MOV”,通用格式如下:MOV<目的操作數(shù)>,<源操作數(shù)>數(shù)據(jù)傳送類指令是把源操作數(shù)傳送到目的操作數(shù)。指令執(zhí)行之后,源操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)據(jù)傳送類操作屬“復(fù)制”性質(zhì),而不是“搬家”。18191.以累加器為目的操作數(shù)的指令
MOV A,Rn
;(Rn)→A,n=0~7 MOV A,@Ri
;((Ri))→Ai=0,1 MOV A,direct ;(direct)→A MOV A,#data ;#data→A把源操作數(shù)內(nèi)容送累加器A,源操作數(shù)有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式,例如: MOV A,R6 ;(R6)→A,寄存器尋址 MOV A,@R0 ;((R0))→A,間接尋址 MOV A,70H ;(70H)→A,直接尋址 MOV A,#78H ;78H→A,立即數(shù)尋址19202.以Rn為目的操作數(shù)的指令 MOVRn
,A ;(A)→Rn
,n=0~7 MOVRn
,direct ;(direct)→Rn
,n=0~7 MOVRn
,#data ;#data→Rn
,n=0~7把源操作數(shù)送入當(dāng)前寄存器區(qū)的R0~R7中的某一寄存器。3.以直接地址direct為目的操作數(shù)的指令 MOVdirect,A ;(A)→direct MOVdirect,Rn
;(Rn)→direct,n=0~7 MOVdirect1,direct2;(direct2)→direct1 MOVdirect,@Ri
;((Ri))→direct,i=0,1 MOVdirect,#data;#data→direct2021把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。direct指的是內(nèi)部RAM或SFR地址。4.以寄存器間接地址為目的操作數(shù)的指令
MOV @Ri,A ;(A)→((Ri)),i=0,1 MOV @Ri,direct;(direct)→((Ri)),i=0,1 MOV @Ri,#data;#data→((Ri)),i=0,1功能是把源操作數(shù)內(nèi)容送入R0或R1指定的存儲(chǔ)單元中。5.16位數(shù)傳送指令
MOV DPTR,#data16;#data16→DPTR功能是把16位立即數(shù)送入DPTR,用來設(shè)置數(shù)據(jù)存儲(chǔ)器的地址指針。2122DPTR為16位的數(shù)據(jù)指針,分為DPH和DPL。對(duì)于所有MOV類指令,累加器A是一個(gè)特別重要的8位寄存器,CPU對(duì)它具有其他寄存器所沒有的操作指令。后面將要介紹的加、減、乘、除指令都是以A作為目的操作數(shù)。23Rn為所選擇的寄存器組中的R0~R7,直接地址direct為內(nèi)部RAM的00H~7FH和特殊功能寄存器(地址范圍80H~FFH)在間接地址中,用R0或R1作為內(nèi)部RAM的地址指針,可訪問內(nèi)部RAM的00H~7FH共128個(gè)單元。6.堆棧操作指令內(nèi)部RAM中設(shè)定一個(gè)后進(jìn)先出(LIFO,LastInFirstOut)的區(qū)域,稱為堆棧。在特殊功能寄存器中有一個(gè)堆棧指針SP,指示堆棧的棧頂位置。堆棧操作有進(jìn)棧和出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。2324(1)進(jìn)棧指令
PUSH direct首先將棧指針SP加1,然后把direct中的內(nèi)容送到SP指示的內(nèi)部RAM單元中。例如:當(dāng)(SP)=60H,(A)=30H,(B)=70H時(shí),執(zhí)行下列指令
PUSH Acc ;(SP)+1=61H→SP,(A)→61H PUSH B ;(SP)+1=62H→SP,(B)→62H結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H。(2)出棧指令
POP direct將SP指示的棧頂單元的內(nèi)容送入direct字節(jié)中,SP減1。2425例如:當(dāng)(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(zhí)行指令
POPDPH ;((SP))→DPH,(SP)-1→SP POPDPL ;((SP))→DPL,(SP)-1→SP結(jié)果為(DPTR)=7030H,(SP)=60H。7.累加器A與外部數(shù)據(jù)存儲(chǔ)器RAM傳送指令
MOVXA,@DPTR ;((DPTR))→A,讀外部RAM MOVXA,@Ri
;((Ri))→A,讀外部RAM MOVX@DPTR,A ;(A)→((DPTR)),寫外部RAM MOVX@Ri
,A;(A)→((Ri)),寫外部RAM2526MOV的后面加“X”,表示訪問的是片外RAM,在執(zhí)行前兩條指令,
(P3.7)有效;后兩條指令,
(P3.6)有效。采用16位的DPTR間接尋址,可尋址整個(gè)64KB片外數(shù)據(jù)存儲(chǔ)器空間,高8位地址(DPH)由P2口輸出,低8位地址(DPL)由P0口輸出。采用Ri(i
=0,1)進(jìn)行間接尋址,可尋址片外256個(gè)單元的數(shù)據(jù)存儲(chǔ)器。8位地址由P0口輸出,鎖存在地址鎖存器中,然后P0口再作為8位數(shù)據(jù)口。8.查表指令共兩條,僅有的兩條讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令。由于程序2627存儲(chǔ)器只讀不寫,因此傳送為單向,從程序存儲(chǔ)器中讀出數(shù)據(jù)到A中。兩條查表指令均采用基址寄存器加變址寄存器間接尋址方式。(1)MOVC A,@A+PC以PC作為基址寄存器,A的內(nèi)容(無符號(hào)數(shù))和PC的當(dāng)前值(下一條指令的起始地址)相加后得到一個(gè)新的16位地址,把該地址的內(nèi)容送到A。例如:當(dāng)
(A)=30H時(shí),執(zhí)行地址1000H處的指令
1000H:
MOVC A,@A+PC2728該指令占用一個(gè)字節(jié),下一條指令的地址為1001H,(PC)=1001H再加上A中的30H,得1031H,結(jié)果把程序存儲(chǔ)器中1031H的內(nèi)容送入累加器A。優(yōu)點(diǎn):不改變特殊功能寄存器及PC的狀態(tài),根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點(diǎn):表格只能存放在該條查表指令所在地址的+256個(gè)單元之內(nèi),表格大小受到限制.(2)MOVCA,@A+DPTRDPTR為基址寄存器,A的內(nèi)容(無符號(hào)數(shù))和DPTR的內(nèi)容相加得到一個(gè)16位地址,把由該地址指定的程序存儲(chǔ)器單29元的內(nèi)容送到累加器A。例如:(DPTR)=8100H,(A)=40H,執(zhí)行指令
MOVC A,@A+DPTR將程序存儲(chǔ)器中8140H單元內(nèi)容送入A中。本指令執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此表格的大小和位置可以在64KB程序存儲(chǔ)器空間中任意安排。兩條指令的助記符都是在MOV的后面加“C”,是CODE的第一個(gè)字母,即表示程序存儲(chǔ)器中的代碼。2930執(zhí)行上述兩條指令時(shí),單片機(jī)的
引腳信號(hào)(程序存儲(chǔ)器讀)有效,這一點(diǎn)讀者要牢記。9.字節(jié)交換指令 XCH A,Rn
;
(A)?(Rn),n=0~7 XCHA,direct ;
(A)?(direct) XCH A,@Ri
;
(A)?((Ri)),i=0,1這組指令的功能是將累加器A的內(nèi)容和源操作數(shù)的內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等方式。例如:(A)=80H,(R7)=08H,(40H)=F0H(R0)=30H,(30H)=0FH執(zhí)行下列指令:3031 XCH A,R7 ;(A)?(R7) XCH A,40H ;(A)?(40H) XCH A,@R0 ;(A)?((R0))結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。10.半字節(jié)交換指令
XCHD A,@Ri累加器的低4位與間接尋址單元低4位交換。例如:(R0)=60H,(60H)=3EH,(A)=59H,執(zhí)行完“XCHDA,@R0”指令,則(A)=5EH,(60H)=39H。322.4.2算術(shù)運(yùn)算類指令指令系統(tǒng)中,有單字節(jié)的加、減、乘、除法指令,算術(shù)運(yùn)算功能比較強(qiáng)。算術(shù)運(yùn)算指令都是針對(duì)8位二進(jìn)制無符號(hào)數(shù)的,如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫具體的運(yùn)算程序,通過執(zhí)行程序?qū)崿F(xiàn)。算術(shù)運(yùn)算的結(jié)果將使PSW的進(jìn)位(Cy)、輔助進(jìn)位(Ac)、溢出(OV)3種標(biāo)志位置1或清0。32331.加法指令4條指令:
ADDA,Rn
;(A)+(Rn)→A,n=0~7 ADDA,direct ;(A)+(direct)→A ADDA,@Ri
;(A)+((Ri))→A,i=0,1 ADDA,#data ;(A)+#data→A8位加法指令的一個(gè)加數(shù)總是來自累加器A,而另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋址方式得到。加的結(jié)果總是放在累加器A中。使用本指令時(shí),要注意累加器A中的運(yùn)算結(jié)果對(duì)各個(gè)標(biāo)志位的影響:(1)如果位7有進(jìn)位,則進(jìn)位標(biāo)志Cy置1,否則Cy清0。3334(2)如果位3有進(jìn)位,輔助進(jìn)位標(biāo)志Ac置1,否則Ac(Ac為PSW寄存器中的一位)清0。(3)如果位6有進(jìn)位,而位7沒有進(jìn)位,或者位7有進(jìn)位,而位6沒有進(jìn)位,則溢出標(biāo)志位OV置1,否則OV清0。溢出標(biāo)志位OV的狀態(tài),只有帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。當(dāng)兩個(gè)帶符號(hào)數(shù)相加時(shí),OV=1,表示加法運(yùn)算超出了累加器A所能表示的帶符號(hào)數(shù)的有效范圍(-128~+127),即產(chǎn)生了溢出,表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無溢出產(chǎn)生。3435【例2-1】(A)=53H,(R0)=FCH,執(zhí)行指令
ADD A,R0運(yùn)算式為
結(jié)果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中1的位數(shù)為奇數(shù))。注意:在上面的運(yùn)算中,由于位6和位7同時(shí)有進(jìn)位,所以標(biāo)志位OV=0。35362.帶進(jìn)位加法指令特點(diǎn)是進(jìn)位標(biāo)志位Cy參加運(yùn)算,三個(gè)數(shù)相加。4條指令:
ADDCA,Rn
;(A)+(Rn)+C→A,n=0~7 ADDCA,direct ;(A)+(direct)+C→A ADDCA,@Ri
;(A)+((Ri))+C→A,i=0,1 ADDCA,#data ;(A)+#data+C→A如果位7有進(jìn)位,則進(jìn)位標(biāo)志Cy置“1”,否則Cy清“0”;如果位3有進(jìn)位,則輔助進(jìn)位標(biāo)志Ac置“1”,否則Ac清“0”;如果位6有進(jìn)位而位7沒有進(jìn)位,或者位7有進(jìn)位而位6沒有進(jìn)位,則溢出標(biāo)志OV置“1”,否則標(biāo)志OV清“0”。3637【例2-3】(A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令 ADDC A,20H運(yùn)算式為結(jié)果為
(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位數(shù)為奇數(shù)。)。37383.增1指令5條指令:
INCA INCRn
;n=0~7 INCdirect INC@Ri
;i=0,1 INCDPTR把指令中所指出的變量增1,且不影響PSW中的任何標(biāo)志。指令“INCDPTR”,16位數(shù)增1指令。首先對(duì)低8位指針DPL執(zhí)行加1,當(dāng)溢出時(shí),就對(duì)DPH的內(nèi)容進(jìn)行加1,不影響標(biāo)志Cy。38394.十進(jìn)制調(diào)整指令用于對(duì)BCD碼加法運(yùn)算結(jié)果的內(nèi)容修正,指令格式為: DAA是對(duì)壓縮的BCD碼(一個(gè)字節(jié)存放2位BCD碼)的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個(gè)BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮BCD碼的和數(shù)。(1)十進(jìn)制調(diào)整問題對(duì)BCD碼加法運(yùn)算,只能借助于二進(jìn)制加法指令。但二進(jìn)制數(shù)加法原則上并不適于十進(jìn)制數(shù)的加法運(yùn)算,有時(shí)會(huì)產(chǎn)生錯(cuò)誤結(jié)果。例如:3940上述的BCD碼運(yùn)算中:(a)結(jié)果正確。(b)結(jié)果不正確,因?yàn)锽CD碼中沒有1111這個(gè)編碼。(c)結(jié)果不正確,正確結(jié)果應(yīng)為17,而運(yùn)算結(jié)果卻是11。可見,二進(jìn)制數(shù)加法指令不能完全適用于BCD碼十進(jìn)制數(shù)的加法運(yùn)算,要對(duì)結(jié)果做有條件的修正,這就是所謂的十進(jìn)制調(diào)整問題。4041(2)出錯(cuò)原因和調(diào)整方法出錯(cuò)原因在于BCD碼共有16個(gè)編碼,但只用其中的10個(gè),剩下6個(gè)沒用到。這6個(gè)沒用到的編碼(1010,1011,1100,1101,1110,1111)為無效編碼。在BCD碼加運(yùn)算中,凡結(jié)果進(jìn)入或者跳過無效編碼區(qū)時(shí),結(jié)果出錯(cuò)。因此1位BCD碼加法運(yùn)算出錯(cuò)的情況有兩種:①加結(jié)果大于9,說明已經(jīng)進(jìn)入無效編碼區(qū)。②加結(jié)果有進(jìn)位,說明已經(jīng)跳過無效編碼區(qū)。無論哪種錯(cuò)誤,都因?yàn)?個(gè)無效編碼造成的。因此,只要出現(xiàn)上述兩種情況之一,就必須調(diào)整。方法是把運(yùn)算結(jié)果加6調(diào)整,即十進(jìn)制調(diào)整修正。4142十進(jìn)制調(diào)整方法如下:①累加器低4位大于9或輔助進(jìn)位位Ac=1,則低4位加6修正。②累加器高4位大于9或進(jìn)位位Cy=1,則高4位加6修正。③累加器高4位為9,低4位大于9,高4位和低4位分別加6修正上述調(diào)整修正,是通過執(zhí)行指令“DAA”來自動(dòng)實(shí)現(xiàn)的。【例2-4】
(A)=56H,(R5)=67H,把它們看作兩個(gè)壓縮的BCD數(shù),進(jìn)行BCD加法。執(zhí)行指令:
ADDA,R5 DAA高4位和低4位分別大于9,所以“DAA”指令要分別加6,對(duì)結(jié)果修正。4243結(jié)果為(A)=23H,Cy=1。由上可見,56+67=123,結(jié)果正確。43445.帶借位的減法指令4條指令:SUBB A,Rn
;
(A)-(Rn)-Cy→A,n=0~7SUBB A,direct ;
(A)-(direct)-Cy→ASUBB A,@Ri
;
(A)-((Ri))-Cy→A,
i=0,1SUBB A,#data ;
(A)-#data-Cy→A從A的內(nèi)容減去指定變量和進(jìn)位標(biāo)志Cy的值,結(jié)果存在A中。如果位7需借位則Cy置1,否則Cy清0;如果位3需借位則Ac置1,否則Ac清0;如果位6借位而位7不借位,或者位7借位而位6不借位,則溢出標(biāo)志位OV置“1”,否則OV清“0”。4445【例2-5】(A)=C9H,(R2)=54H,Cy=1,執(zhí)行指令
SUBB A,R2運(yùn)算式為結(jié)果:
(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位)。45466.減1指令 DEC A ;(A)-1→A DEC Rn
;(Rn)-1→Rn,n=0~7 DEC direct ;(direct)-1→direct DEC @Ri
;((Ri))-1→(Ri),i=0,1功能是指定的變量減1。若原來為00H,減1后下溢為FFH,不影響標(biāo)志位(P標(biāo)志除外)?!纠?-6】(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,執(zhí)行指令 DEC A ;(A)-1→A DEC R7 ;(R7)-1→R7 DEC 30H ;(30H)-1→30H DEC @R1 ;((R1))-1→(R1)4647結(jié)果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影響其他標(biāo)志。7.乘法指令
MUL AB;A×B→BA積的低字節(jié)在累加器A中,高字節(jié)在B中。如果積大于255,則OV置1,否則OV清0。Cy標(biāo)志總是清0。8.除法指令
DIV AB ;A/B→A(商),余數(shù)→B商(為整數(shù))存放在A中,余數(shù)存放在B中,且Cy和溢出標(biāo)志位OV清“0”。如果B的內(nèi)容為0(即除數(shù)為0),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位OV置1。4748【例3-7】(A)=FBH,(B)=12H,執(zhí)行指令 DIV AB結(jié)果:
(A)=0DH,(B)=11H,Cy=0,OV=0。3.4.3邏輯操作類指令1.累加器A清“0”指令
CLR A累加器A清0。不影響Cy、Ac、OV等標(biāo)志位。2.累加器A求反指令
CPL A將累加器A的內(nèi)容按位邏輯取反,不影響標(biāo)志位。48493.左環(huán)移指令
RL A功能是A向左循環(huán)移位,位7循環(huán)移入位0,不影響標(biāo)志位,如圖3-1所示。4.帶進(jìn)位左環(huán)移指令
RLC A將累加器A的內(nèi)容和進(jìn)位標(biāo)志位Cy一起向左環(huán)移一位,如圖2-2所示。49圖3-1左環(huán)移操作圖3-2
帶進(jìn)位左環(huán)移操作505.右環(huán)移指令
RR A這條指令的功能是A的內(nèi)容向右環(huán)移一位不影響其他標(biāo)志位,如圖3-3所示。6.帶進(jìn)位右環(huán)移指令
RRC AA的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,如圖3-4所示。50圖3-3
右環(huán)移操作圖2-4帶進(jìn)位右環(huán)移操作517.累加器半字節(jié)交換指令
SWAPA是將累加器A的高半字節(jié)(Acc.7~Acc.4)和低半字節(jié)(Acc.3~Acc.0)互換?!纠?-8】(A)=95H,執(zhí)行指令
SWAPA結(jié)果為
(A)=59H。8.邏輯與指令A(yù)NL A,Rn
;(A)∧(Rn)→A,n=0~7ANL A,direct ;(A)∧(direct)→AANL A,#data ;(A)∧#data→AANL A,@Ri
;(A)∧((Ri))→A,i=0~1ANL direct,A ;(direct)∧(A)→directANL direct,#data ;(direct)∧#data→direct5152是在指定的變量之間以位為基礎(chǔ)進(jìn)行“邏輯與”操作,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中?!纠?-9】
(A)=07H,(R0)=0FDH,執(zhí)行指令
ANL A,R0運(yùn)算式為結(jié)果:
(A)=05H。52539.邏輯或指令 ORL A,Rn
;(A)∨(Rn)→A,n=0~7 ORL A,direct ;(A)∨(direct)→A ORL A,#data ;(A)∨#data→A ORL A,@Ri
;(A)∨((Ri))→A,i=0,1 ORL direct,A ;(direct)∨(A)→direct ORL direct,#data ;(direct)∨#data→direct是在所指定的變量之間執(zhí)行位的“邏輯或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。5354【例2-10】
(P1)=05H,(A)=33H,執(zhí)行指令
ORL P1,A運(yùn)算式為結(jié)果:(P1)=35H。545510.邏輯異或指令XRL A,Rn
;(A)⊕(Rn)→A,n=0~7XRL A,direct ;(A)⊕(direct)→AXRL A,@Ri
;(A)⊕((Ri))→A,i=0,1XRL A,#data ;(A)⊕#data→AXRL direct,A ;(direct)⊕(A)→directXRL direct,#data ;(direct)⊕#data→direct功能是在所指定的變量之間執(zhí)行以位的“邏輯異或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。5556【例2-11】
(A)=90H,(R3)=73H,執(zhí)行指令
XRL A,R3運(yùn)算式為
結(jié)果:
(A)=E3H。56572.4.4控制轉(zhuǎn)移類指令1.長轉(zhuǎn)移指令
LJMP addr16指令執(zhí)行時(shí),把轉(zhuǎn)移的目的地址,即指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)向addr16指定的目的地址:64KB程序存儲(chǔ)器地址空間的任何位置。2.相對(duì)轉(zhuǎn)移指令
SJMP rel無條件轉(zhuǎn)移,rel為相對(duì)偏移量,是一單字節(jié)的帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù),因此程序轉(zhuǎn)移是雙向的。rel如為正,向地址增大的方向轉(zhuǎn)移;rel如為負(fù),向地址減小的方向轉(zhuǎn)移。5758執(zhí)行時(shí),在PC加2(本指令為2B)之后,把指令的有符號(hào)的偏移量rel加到PC上,并計(jì)算出目的地址。編程時(shí),只需寫上目的地址標(biāo)號(hào),相對(duì)偏移量由匯編程序自動(dòng)計(jì)算。例如: LOOP:MOV A,R6
……
SJMP LOOP
……匯編時(shí),跳到LOOP處的偏移量由匯編程序自動(dòng)計(jì)算和填入。3.絕對(duì)轉(zhuǎn)移指令
AJMP addr115859指令雙字節(jié),格式如下:指令提供11位地址A10~A0(即addr11),其中A10~A8則位于第1字節(jié)的高3位,A7~A0在第2字節(jié)。操作碼只占第1字節(jié)的低5位。指令構(gòu)造轉(zhuǎn)移目的地址:執(zhí)行本指令,PC加2,然后把指令中的11位無符號(hào)整數(shù)地址addr11(A10~A0)送入PC.10~PC.0,PC.15~PC.11保持不變,形成新的16位轉(zhuǎn)移目的地址。604.間接跳轉(zhuǎn)指令 JMP@A+DPTR單字節(jié)轉(zhuǎn)移指令,目的地址由A中8位無符號(hào)數(shù)與DPTR的16位無符號(hào)數(shù)內(nèi)容之和來確定。以DPTR內(nèi)容為基址,A的內(nèi)容作為變址。給A賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移。615.條件轉(zhuǎn)移指令執(zhí)行指令時(shí),如條件滿足,則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一指令。轉(zhuǎn)移目的地址在以下一條指令首地址為中心的256B范圍內(nèi)(-128~+127)。
JZ rel ;如果累加器內(nèi)容為0,則執(zhí)行轉(zhuǎn)移 JNZ rel ;如果累加器內(nèi)容非0,則執(zhí)行轉(zhuǎn)移6.比較不相等轉(zhuǎn)移指令
CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel62比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移,并轉(zhuǎn)向目的地址。如果第一操作數(shù)(無符號(hào)整數(shù))小于第二操作數(shù)(無符號(hào)整數(shù)),則進(jìn)位標(biāo)志位Cy置1,否則Cy清0。該指令的執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。7.減1不為0轉(zhuǎn)移指令把減1與條件轉(zhuǎn)移兩種功能合在一起。兩條: DJNZ Rn,rel ;n=0~7 DJNZ direct,rel63用于控制程序循環(huán)。預(yù)先裝入循環(huán)次數(shù),以減1后是否為“0”作為轉(zhuǎn)移條件,即實(shí)現(xiàn)按次數(shù)控制循環(huán)。8.調(diào)用子程序指令(1)長調(diào)用指令
LCALL addr16可調(diào)用64KB范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程序。執(zhí)行時(shí),先把PC加3獲得下一條指令的地址(斷點(diǎn)地址),并壓入堆棧(先低位字節(jié),后高位字節(jié)),堆棧指針加2。接著把指令的第二和第三字節(jié)(A15~A8,A7~A0)分別裝入PC的高位和低位字節(jié)中,然后從PC指定的地址開始執(zhí)行程序。執(zhí)行后不影響任何標(biāo)志位。64(2)絕對(duì)調(diào)用指令 ACALLaddr11與AJMP指令類似,為兼容MCS–48的CALL指令而設(shè),不影響標(biāo)志位。格式如下:2KB范圍內(nèi)的調(diào)用子程序的指令。659.子程序的返回指令
RET執(zhí)行本指令時(shí) (SP)→PCH,然后(SP)-1→SP (SP)→PCL,然后(SP)-1→SP功能:從堆棧中退出PC的高8位和低8位字節(jié),把棧指針減2,從PC值處開始繼續(xù)執(zhí)行程序。不影響任何標(biāo)志位。10.中斷返回指令 RETI與RET指令相似,不同處:該指令清除了中斷響應(yīng)時(shí)被置1的內(nèi)部中斷優(yōu)先級(jí)寄存器的中斷優(yōu)先級(jí)狀態(tài),其他相同。6611.空操作指令
NOP不進(jìn)行任何操作,耗一個(gè)機(jī)器周期時(shí)間,執(zhí)行(PC)+1→PC操作2.4.5位操作類指令
內(nèi)部有一個(gè)位處理機(jī),對(duì)應(yīng)位操作指令。1.?dāng)?shù)據(jù)位傳送指令
MOV C,bit MOV bit,C把源操作數(shù)指定的位變量送到目的操作數(shù)指定處。一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志,另一個(gè)可以是任何直接尋址位。不影響其他寄存器或標(biāo)志位。67例如: MOV C,06H ;(20H).6→Cy06H是位地址,20H是內(nèi)部RAM字節(jié)地址。06H是內(nèi)部RAM20H字節(jié)位6的位地址。 MOV P1.0,C ;Cy→P1.02.位變量修改指令 CLR C ;Cy位清0 CLR bit ;bit位清0 CPL C ;Cy位求反 CPL bit ;bit位求反 SETB C ;Cy位置1 SETB bit ;bit位置168這組指令將操作數(shù)指定的位清0、求反、置1,不影響其他標(biāo)志位。例如: CLR C ;Cy位清0 CLR 27H ;0→(24H).7位 CPL 08H ;→(21H).0位 SETB P1.7 ;P1.7位置13.位變量邏輯與指令 ANL C,bit ;bit∧Cy→Cy ANL C,/bit ;∧Cy→Cy69第2條指令先對(duì)直接尋址位求反,然后與進(jìn)位標(biāo)志位C進(jìn)行“邏輯與”運(yùn)算,結(jié)果送回到位累加器中。4.位變量邏輯或指令 ORL C,bit ORL C,/bit第1條指令是直接尋址位與進(jìn)位標(biāo)志位Cy(位累加器)進(jìn)行“邏輯或”運(yùn)算,結(jié)果送回到進(jìn)位標(biāo)志位中。第2條指令先對(duì)直接尋址位求反,然后與位累加器(進(jìn)位標(biāo)志位)進(jìn)行“邏輯或”運(yùn)算,結(jié)果送回到進(jìn)位標(biāo)志位中。705.條件轉(zhuǎn)移類指令 JC rel ;如進(jìn)位標(biāo)志位Cy=1,則轉(zhuǎn)移 JNC
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備監(jiān)理師考試題庫及完整答案(必刷)
- 2025技術(shù)保密技術(shù)合同樣本
- 2025貿(mào)易合同 音像制品經(jīng)銷合同
- 2025土地管理承包合同
- 2024年度四川省公共營養(yǎng)師之三級(jí)營養(yǎng)師能力提升試卷A卷附答案
- 2024年度四川省公共營養(yǎng)師之二級(jí)營養(yǎng)師過關(guān)檢測(cè)試卷B卷附答案
- 2025關(guān)于瓷磚購銷的合同范本
- 2025瑞草堂健康服務(wù)中心加盟合同書
- 上海市混合廢塑料垃圾熱解處理項(xiàng)目可行性研究報(bào)告
- 2025年中國專業(yè)運(yùn)輸汽車行業(yè)深度調(diào)研與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 數(shù)據(jù)中心電力設(shè)備調(diào)試方案
- 2024年度國際物流運(yùn)輸合同3篇
- 新入職員工年終工作總結(jié)課件
- 廣西南寧市第三十七中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期11月第一次月考語文試題(含答案)
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(基礎(chǔ)篇)(含答案)
- 2024年人力資源個(gè)人年終工作總結(jié)(6篇)
- 2024年中考物理真題及分類匯編-考點(diǎn)25:磁現(xiàn)象-電生磁
- 中華傳統(tǒng)文化之文學(xué)瑰寶學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 靜脈導(dǎo)管維護(hù)
- 年度先進(jìn)員工選票標(biāo)準(zhǔn)格式
- OBC測(cè)試報(bào)告模板
評(píng)論
0/150
提交評(píng)論