




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四講
51單片機(jī)指令系統(tǒng)3/20/202414.18051指令系統(tǒng)概述4.2尋址方式4.3指令說明4.4偽指令4.5實(shí)用程序設(shè)計(jì)3/20/202424.18051指令系統(tǒng)概述4.1.1指令、指令系統(tǒng)的概念指令:為使計(jì)算機(jī)內(nèi)部執(zhí)行一種操作,而提供給用戶編程使用的一種命令。機(jī)器語(yǔ)言:計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼,以二進(jìn)制代碼來(lái)描述指令功能的語(yǔ)言,稱之為機(jī)器語(yǔ)言。匯編語(yǔ)言:由于機(jī)器語(yǔ)言不便被人們識(shí)別、記憶、理解和使用,因此給每條機(jī)器語(yǔ)言指令賦予助記符號(hào)來(lái)表示,這就形成了匯編語(yǔ)言。也就是說,匯編語(yǔ)言是便于人們識(shí)別、記憶、理解和使用的一種指令形式,它和機(jī)器語(yǔ)言指令一一對(duì)應(yīng)。3/20/20243指令系統(tǒng):計(jì)算機(jī)能夠執(zhí)行的全部操作所對(duì)應(yīng)的指令集合,稱為這種計(jì)算機(jī)的指令系統(tǒng)。指令的三種屬性:功能、時(shí)間和空間。功能屬性:是指每條指令都對(duì)應(yīng)一個(gè)特定的操作功能;時(shí)間屬性:是指一條指令執(zhí)行所用的時(shí)間,一般用機(jī)器周期來(lái)表示;空間屬性:是指一條指令在程序存儲(chǔ)器中存儲(chǔ)所占用的字節(jié)數(shù)。
指令的兩種描述形式:機(jī)器語(yǔ)言形式和匯編語(yǔ)言形式。采用機(jī)器語(yǔ)言編寫的程序稱之為目標(biāo)程序。采用匯編語(yǔ)言編寫的程序稱之為源程序。3/20/20244時(shí)間屬性劃分:?jiǎn)螜C(jī)器周期指令(64條)、雙機(jī)器周期指令(45條)和只有乘、除法兩條4個(gè)機(jī)器周期的指令。4.1.2
MCS-51單片機(jī)指令系統(tǒng)
MCS-51單片機(jī)指令系統(tǒng)具有功能強(qiáng)、指令短、執(zhí)行快等特點(diǎn),共有111條指令。功能上劃分:數(shù)據(jù)傳送、算術(shù)操作、邏輯操作、程序轉(zhuǎn)移、位操作等五大類??臻g屬性劃分:?jiǎn)巫止?jié)指令(49條)、雙字節(jié)指令(46條)和三字節(jié)指令(只有16條)。3/20/20245每條指令通常由操作碼和操作數(shù)兩部分組成。操作碼:表示計(jì)算機(jī)執(zhí)行該指令將進(jìn)行何種操作,操作數(shù):表示參加操作的數(shù)的本身或操作數(shù)所在的地址。4.1.3匯編指令行格式[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]
MCS-51單片機(jī)的指令有無(wú)操作數(shù)、單操作數(shù)、雙操作數(shù)三種情況。匯編語(yǔ)言指令有如下的格式:3/20/202464.1.4常用的縮寫符號(hào)A——累加器。B——寄存器,用于MUL和DIV指令中。C——進(jìn)位標(biāo)志或進(jìn)位位。@——間接尋址寄存器或基址寄存器的前綴,如@Ri,@DPTR。direct——8位內(nèi)部RAM單元的地址??梢允且粋€(gè)內(nèi)部數(shù)據(jù)區(qū)RAM單元(00H~7FH)地址
特殊功能寄存器地址(I/O端口、控制寄存器、狀態(tài)寄存器80H~0FFH)。#data——8位立即數(shù),指令中的8位常數(shù)。#data16——16位立即數(shù),指令中的16位常數(shù)。3/20/20247X——
表示寄存器名。(X)——表示X單元中的內(nèi)容。((X))——表示以X單元的內(nèi)容為地址的存儲(chǔ)器單元內(nèi)容,即(X)作地址,該地址單元的內(nèi)容用((X))表示。/——位操作數(shù)的前綴,表示對(duì)該位取反。rel
——8位帶符號(hào)的偏移量字節(jié),用于SJMP和所有條件轉(zhuǎn)移指令中。偏移量相對(duì)于下一條指令的第一個(gè)字節(jié)計(jì)算,在-128~+127范圍內(nèi)取值?!硎静僮髁鞒蹋瑢⒓惨环降膬?nèi)容送入箭頭所指另一方的單元中去。$——指本條指令起始地址。3/20/202484.2尋址方式所謂尋址方式,就是指令給出參與運(yùn)算的操作數(shù)的有效地址的方式。在MCS-51單片機(jī)指令系統(tǒng)中,有以下7種尋址方式:
(1)立即尋址;
(2)直接尋址;
(3)寄存器尋址;
(4)寄存器間接尋址;
(5)基址寄存器加變址寄存器間接尋址;
(6)相對(duì)尋址;
(7)位尋址;3/20/20249寄存器尋址按所選定的工作寄存器R0~R7進(jìn)行操作,指令機(jī)器碼的低3位的八種組合000,001,…,110,111分別指明所用的工作寄存器R0,R1,…,R6,R7。
如:MOVA,Rn(n=0~7),這8條指令對(duì)應(yīng)的機(jī)器碼分別為E8H~EFH。4.2.1寄存器尋址
在指令選定的某寄存器的內(nèi)容作為操作數(shù),以完成指令規(guī)定的操作,稱為寄存器尋址。例如:MOV
A,R0指令中源操作數(shù)R0和目的操作數(shù)A都是寄存器尋址。該指令的功能是把工作寄存器R0中的內(nèi)容傳送到累加器A中,如R0中的內(nèi)容為30H,則執(zhí)行該指令后A的內(nèi)容也為30H。3/20/202410
累加器A,寄存器B、數(shù)據(jù)指針DPTR和布爾處理器的位累加器Cy也可用寄存器尋址方式訪問。例如:MOVA,40H指令中的源操作數(shù)40H就是直接尋址,40H為操作數(shù)的地址。該指令的功能是把片內(nèi)RAM地址為40H單元的內(nèi)容送到A中。該指令的機(jī)器碼為E5H40H,8位直接地址在指令操作碼中占一個(gè)字節(jié)。4.2.2直接尋址
指令中直接給出操作數(shù)所在的存儲(chǔ)器地址,以供取數(shù)或存數(shù)的尋址方式稱為直接尋址。3/20/202411位地址空間。在MCS-51單片機(jī)指令系統(tǒng)中,直接尋址方式中可以訪問3種存儲(chǔ)器空間:內(nèi)部數(shù)據(jù)存儲(chǔ)器的低128個(gè)字節(jié)單元(00H~7FH)。特殊功能寄存器。特殊功能寄存器只能用直接尋址方式進(jìn)行訪問。3/20/2024124.2.3寄存器間接尋址由指令指出某一寄存器的內(nèi)容作為操作數(shù)地址的尋址方法,稱為寄存器間接尋址。注意:寄存器中的內(nèi)容不是操作數(shù)本身,而是操作數(shù)的地址,到該地址單元中才能得到操作數(shù)。寄存器起地址指針的作用。尋址內(nèi)部RAM區(qū)的數(shù)據(jù)時(shí),可使用寄存器R0、R1(、SP)作為地址指針。當(dāng)訪問外部RAM時(shí),可使用R0、R1及DPTR作為地址指針。寄存器間接尋址符號(hào)為“@”3/20/202413例如:MOVA,@R1指令的源操作數(shù)@R1是寄存器間接尋址。該指令的功能是將以工作寄存器R1中的內(nèi)容為地址的片內(nèi)RAM單元的數(shù)據(jù)傳送到A中去。例如:若R1中的內(nèi)容為80H,片內(nèi)RAM地址為80H的單元中的內(nèi)容為2FH,則執(zhí)行該指令后,片內(nèi)RAM80H單元的內(nèi)容2FH被送到A中。寄存器間接尋址示意圖如圖3.1所示。3/20/2024144.2.4立即尋址立即尋址方式是指操作數(shù)包含在指令字節(jié)中。跟在指令操作碼后面的數(shù)就是參加運(yùn)算的數(shù),該操作數(shù)稱為立即數(shù)。
匯編指令中,在一個(gè)數(shù)的前面冠以"#"符號(hào)作前綴,就表示該數(shù)為立即尋址。例如:MOV
A,#30H指令中30H就是立即數(shù)。這一條指令的功能是執(zhí)行將立即數(shù)30H傳送到累加器A中的操作。3/20/2024154.2.5
基址寄存器加變址寄存器間接尋址
基址寄存器DPTR或PC的內(nèi)容為基本地址,加上變址寄存器A的內(nèi)容作為操作數(shù)的地址。MOVCA,@A+DPTRMOVCA,@A+PC3/20/2024164.2.6相對(duì)尋址
例如:SJMPrel
執(zhí)行該指令時(shí),先將PC+2,再把指令中帶符號(hào)的偏移量加到PC上,得到跳轉(zhuǎn)的目標(biāo)地址送入PC。相對(duì)尋址是以當(dāng)前程序計(jì)數(shù)器PC值加上指令中給出的偏移量rel,而構(gòu)成實(shí)際操作數(shù)地址的尋址方法。指令中給出的偏移量是一個(gè)8位帶符號(hào)的常數(shù),可正可負(fù),其范圍為-128~+127。常出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。3/20/2024174.2.7位尋址位尋址是在位操作指令中直接給出位操作數(shù)的地址,可以對(duì)片內(nèi)RAM中的128位和特殊功能寄存器SFR中的93位進(jìn)行尋址。例如:MOVC,bit3/20/2024184.3指令說明1、數(shù)據(jù)傳送指令2、程序轉(zhuǎn)移指令3、算術(shù)運(yùn)算指令4、邏輯運(yùn)算指令5、位運(yùn)算指令3/20/2024194.3.1數(shù)據(jù)傳送指令1、內(nèi)部數(shù)據(jù)傳送指令(1)以累加器A為目的操作數(shù)的指令MOVA,Rnn=0~7MOVA,directMOVA,@Rii=0,1MOVA,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入累加器A。3/20/202420(2)以Rn為目的操作數(shù)的指令MOVRn,AMOVRn,directMOVRn,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的R0~R7中的某一個(gè)寄存器。3/20/202421(3)以直接尋址的單元為目的操作數(shù)的指令
MOVdirect,AMOVdirect,Rn
MOVdirect,directMOVdirect,@Ri
MOVdirect,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入內(nèi)部RAM單元或特殊功能寄存器(直接地址指出的存儲(chǔ)單元)。3/20/202422(4)以寄存器間接尋址的單元為目的操作數(shù)指令MOV@Ri,AMOV@Ri,directMOV@Ri,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入R0,R1所指出的內(nèi)部RAM單元。(5)16位數(shù)據(jù)傳送指令MOVDPTR,#data16這組指令的功能是:將16位的立即數(shù)送入數(shù)據(jù)指針寄存器DPTR。3/20/202423MOVR0,#30H;(R0)←30HMOVA,@R0 ;(A)←((R0))MOVR1,A ;(R1)←(A)MOVB,@R1 ;(B)←((R1))MOV@R1,P1 ;((R1))←(P1)MOVP2,P1 ;(P2)←(P1)MOV10H,#20H ;(10H)←20H執(zhí)行上述指令后的結(jié)果為:
(R0)=30H,(R1)=(A)=40H,
(B)=10H,(40H)=(P1)=(P2)=CAH,
(10H)=20H。例1
設(shè)內(nèi)部RAM(30H)=40H,(40H)=10H,(10H)=00H(P1)=CAH,分析以下程序執(zhí)行后各單元及寄存器、
P2口的內(nèi)容。3/20/2024242、查表指令訪問程序存儲(chǔ)器的數(shù)據(jù)傳送指令又稱作查表指令,采用基址寄存器加變址寄存器間接尋址方式,把程序存儲(chǔ)器中存放的表格數(shù)據(jù)讀出,傳送到累加器A。MOVCA,@A+PC以PC作為基址寄存器,A的內(nèi)容作為無(wú)符號(hào)數(shù)和PC的內(nèi)容(下一條指令的起始地址)相加后得到一個(gè)16位的地址,并將該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。3/20/202425MOVCA,@A+DPTR這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無(wú)關(guān)。因此,表格的大小和位置可以在64KB程序存儲(chǔ)器中任意安排,并且一個(gè)表格可以為各個(gè)程序塊所共用。指令是以DPTR作為基址寄存器,累加器A的內(nèi)容作為無(wú)符號(hào)數(shù)與DPTR內(nèi)容相加,得到一個(gè)16位的地址,并把該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。3/20/202426如果用以DPTR為基址寄存器的查表指令,其程序如下:MOVDPTR,2000H ;置表首地址MOVA,09HMOVCA,@A+DPTR例:從片外程序存儲(chǔ)器2000H單元開始存放0~9的平方值,以PC作為基址寄存器進(jìn)行查表得9的平方值。3/20/202427
完成上述功能的程序如下:MOVA,#03H ;(A)←03HPUSHDPH ;保護(hù)DPTR高8位入棧PUSHDPL ;保護(hù)DPTR低8位入棧MOVDPTR,#2000H;(DPTR)←2000HMOVCA,@A+DPTR ;(A)←(2000H+03H)POPDPL ;彈出DPTR低8位POPDPH ;彈出DPTR高8位執(zhí)行結(jié)果:(A)=09H,(DPTR)=3A00H。例若在外部程序存儲(chǔ)器中2000H單元開始依次存放0~9的平方值,數(shù)據(jù)指針(DPTR)=3A00H,用查表指令取得2003H單元的數(shù)據(jù)后,要求保持DPTR中的內(nèi)容不變。3/20/2024283、累加器A與外部數(shù)據(jù)存儲(chǔ)器傳送指令
MOVXA,@DPTRMOVXA,@Ri
MOVX@DPTR,AMOVX@Ri,ADPTR所包含的16位地址信息由P0(低8位)和P2(高8位)輸出,而數(shù)據(jù)信息由P0口傳送,P0口作分時(shí)復(fù)用的總線。由Ri作為間接尋址寄存器時(shí),P0口上分時(shí)輸出Ri指定的8位地址信息及傳輸8位數(shù)據(jù)。
這組指令是:在累加器A與外部數(shù)據(jù)存儲(chǔ)器RAM單元或I/O口之間進(jìn)行數(shù)據(jù)傳送。前兩條指令執(zhí)行時(shí),P3.7
引腳上輸出RD有效信號(hào),用作外部數(shù)據(jù)存儲(chǔ)器的讀選通信號(hào);后兩條指令執(zhí)行時(shí),P3.6
引腳上輸出WR有效信號(hào),用作外部數(shù)據(jù)存儲(chǔ)器的寫選通信號(hào)。3/20/202429例:設(shè)外部RAM(0203H)=FFH,分析以下指令執(zhí)行后的結(jié)果。
MOVDPTR,#0203H
;(DPTR)←0203HMOVXA,@DPTR
;(A)←((DPTR))MOV30H,A
;(30H)←(A)
MOVA,#0FH
;(A)←0FHMOVX@DPTR,A
;((DPTR))←(A)執(zhí)行結(jié)果為:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。3/20/2024304、字節(jié)交換指令XCHA,RnXCHA,@RiXCHA,direct將累加器A的內(nèi)容和源操作數(shù)內(nèi)容相互交換。3/20/2024315、堆棧操作指令在MCS-51單片機(jī)的內(nèi)部RAM中,可以設(shè)定一個(gè)先進(jìn)后出的區(qū)域,稱其為堆棧。在特殊功能寄存器中有一個(gè)堆棧指針SP,它指出棧頂?shù)奈恢?。PUSHdirect;進(jìn)棧指令POPdirect;出棧指令進(jìn)棧指令的功能是:首先將堆棧指針SP的內(nèi)容加1,然后將直接地址所指出的內(nèi)容送入SP指出的內(nèi)部RAM單元;
出棧指令的功能是:將SP所指出的內(nèi)部RAM單元的內(nèi)容送入由直接地址所指出的字節(jié)單元,接著將堆棧指針SP的內(nèi)容減1。3/20/202432例如:
進(jìn)入中斷服務(wù)子程序時(shí),把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR進(jìn)棧保護(hù)。設(shè)當(dāng)前SP為60H。
PUSHPSWPUSHACCPUSHDPLPUSHDPH執(zhí)行后,SP內(nèi)容修改為64H,而61H、62H、63H、64H單元中依次棧入PSW、A、DPL、DPH的內(nèi)容。當(dāng)中斷服務(wù)程序結(jié)束之前,如下程序段(SP保持64H不變)
POPDPHPOPDPLPOPACCPOPPSW執(zhí)行之后,SP內(nèi)容修改為60H,而64H、63H、62H、61H單元中的內(nèi)容依次彈出到DPH、DPL、A、PSW中。3/20/2024334.3.2程序轉(zhuǎn)移指令1、無(wú)條件轉(zhuǎn)移指令這是2KB范圍內(nèi)的無(wú)條件跳轉(zhuǎn)指令,執(zhí)行該指令時(shí),先將PC+2,然后將addr11送入PC10~PC0,而PC15~PC11保持不變。這樣得到跳轉(zhuǎn)的目的地址。需要注意的是,目標(biāo)地址與AJMP后面一條指令的第一個(gè)字節(jié)必須在同一個(gè)2KB區(qū)域的存儲(chǔ)器區(qū)內(nèi)。短跳轉(zhuǎn)指令
AJMPaddr113/20/202434
執(zhí)行該指令時(shí),將16位目標(biāo)地址addr16
裝入PC,程序無(wú)條件轉(zhuǎn)向指定的目標(biāo)地址。轉(zhuǎn)移的目標(biāo)地址可以在64KB程序存儲(chǔ)器地址空間的任何地方,不影響任何標(biāo)志。長(zhǎng)跳轉(zhuǎn)指令LJMPaddr16相對(duì)轉(zhuǎn)移指令
SJMPrel執(zhí)行該指令時(shí),先將PC+2,再把指令中帶符號(hào)的偏移量加到PC上,得到跳轉(zhuǎn)的目標(biāo)地址送入PC。3/20/202435執(zhí)行該指令時(shí),把累加器A中的8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針中的16位數(shù)相加,結(jié)果作為下條指令的地址送入PC,不改變累加器A和數(shù)據(jù)指針DPTR的內(nèi)容,也不影響標(biāo)志。利用這條指令能實(shí)現(xiàn)程序的散轉(zhuǎn)。散轉(zhuǎn)指令JMP@A+DPTR3/20/202436例:
根據(jù)累加器A的值,轉(zhuǎn)不同處理程序的入口。
MOVDPTR,#TABLE ;表首地址送DPTRJMP@A+DPTR ;根據(jù)A值轉(zhuǎn)移
TABLE:AJMPTAB1 ;當(dāng)(A)=0時(shí)轉(zhuǎn)TAB1執(zhí)行
AJMPTAB2;當(dāng)(A)=2時(shí)轉(zhuǎn)TAB2執(zhí)行
AJMPTAB3 ;當(dāng)(A)=4時(shí)轉(zhuǎn)TAB3執(zhí)行3/20/202437無(wú)條件轉(zhuǎn)移指令3/20/2024382、條件轉(zhuǎn)移指令
條件轉(zhuǎn)移指令是當(dāng)某種條件滿足時(shí),程序轉(zhuǎn)移執(zhí)行;條件不滿足時(shí),程序仍按原來(lái)順序執(zhí)行。轉(zhuǎn)移的條件可以是上一條指令或更前一條指令的執(zhí)行結(jié)果(常體現(xiàn)在標(biāo)志位上),也可以是條件轉(zhuǎn)移指令本身包含的某種運(yùn)算結(jié)果。
由于該類指令采用相對(duì)尋址,因此程序可在以當(dāng)前PC值為中心的-128~+127范圍內(nèi)轉(zhuǎn)移。3/20/202439JZrel;(A)=0轉(zhuǎn)移JNZrel;(A)≠0轉(zhuǎn)移JCrel;若(Cy)=1,則轉(zhuǎn)移PC←(PC)+2+relJNCrel;若(Cy)=0,則轉(zhuǎn)移PC←(PC)+2+relJBbit,rel;若(bit)=1,則轉(zhuǎn)移PC←(PC)+3+relJNBbit,rel;若(bit)=0,則轉(zhuǎn)移PC←(PC)+3+relJBCbit,rel;若(bit)=1,則轉(zhuǎn)移PC←(PC)+3+rel,并bit←03/20/202440
例:將片外RAM首地址為DATA1的一個(gè)數(shù)據(jù)塊轉(zhuǎn)送到片內(nèi)RAM首地址為DATA2的存儲(chǔ)區(qū)中。外部RAM向內(nèi)部RAM的數(shù)據(jù)轉(zhuǎn)送一定要經(jīng)過累加器A,利用判零條件轉(zhuǎn)移正好可以判別是否要繼續(xù)傳送或者終止。完成數(shù)據(jù)傳送的參考程序如下:
MOVR0,#DATA1;R0作為外部數(shù)據(jù)塊的地址指針
MOVR1,#DATA1;R1作為內(nèi)部數(shù)據(jù)塊的地址指針LOOP:MOVXA,@R0;取外部RAM數(shù)據(jù)送入AHERE:JZHERE ;數(shù)據(jù)為零則終止傳送
MOV@R1,A ;數(shù)據(jù)傳送至內(nèi)部RAM單元
INCR0 ;修改指針,指向下一數(shù)據(jù)地址
INCR1 SJMPLOOP ;循環(huán)取數(shù)3/20/202441
比較轉(zhuǎn)移指令共有4條。這組指令是先對(duì)兩個(gè)規(guī)定的操作數(shù)進(jìn)行比較,根據(jù)比較的結(jié)果來(lái)決定是否轉(zhuǎn)移。若兩個(gè)操作數(shù)相等,則不轉(zhuǎn)移,程序順序執(zhí)行;若兩個(gè)操作數(shù)不等,則轉(zhuǎn)移。3、比較不相等轉(zhuǎn)移指令
CJNE比較是進(jìn)行一次減法運(yùn)算,但其差值不保存,兩個(gè)數(shù)的原值不受影響,而標(biāo)志位要受到影響。如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù),則置位進(jìn)位標(biāo)志CY,否則,清“0”CY.
利用標(biāo)志位CY作進(jìn)一步的判斷,可實(shí)現(xiàn)三分支轉(zhuǎn)移。3/20/202442CJNEA,direct,rel
CJNEA,#data,rel
CJNERn,#data,rel
CJNE@Ri,#data,rel
例:
當(dāng)從P1口輸入數(shù)據(jù)為01H時(shí),程序繼續(xù)執(zhí)行,否則等待,直到P1口出現(xiàn)01H。參考程序如下:
MOVA,#01H ;立即數(shù)01H送AWAIT:CJNEA,P1,WAIT ;(P1)≠01H,則等待3/20/202443
減1條件轉(zhuǎn)移指令有兩條。每執(zhí)行一次這種指令,就把第一操作數(shù)減1,并把結(jié)果仍保存在第一操作數(shù)中,然后判斷是否為零。若不為零,則轉(zhuǎn)移到指定的地址單元,否則順序執(zhí)行。4、減1不為0轉(zhuǎn)移指令DJNZ這組指令對(duì)于構(gòu)成循環(huán)程序是十分有用的,可以指定任何一個(gè)工作寄存器或者內(nèi)部RAM單元作為循環(huán)計(jì)數(shù)器。每循環(huán)一次,這種指令被執(zhí)行一次,計(jì)數(shù)器就減1。預(yù)定的循環(huán)次數(shù)不到,計(jì)數(shù)器不會(huì)為0,轉(zhuǎn)移執(zhí)行循環(huán)操作;到達(dá)預(yù)定的循環(huán)次數(shù),計(jì)數(shù)器就被減為0,順序執(zhí)行下一條指令,也就結(jié)束了循環(huán)。3/20/202444DJNZRn,rel
DJNZdirect,rel
例:
將內(nèi)部RAM從DATA單元開始的10個(gè)無(wú)符號(hào)數(shù)相加,相加結(jié)果送SUM單元保存。設(shè)相加結(jié)果不超過8位二進(jìn)制數(shù),則相應(yīng)的程序如下:
MOVR0,#0AH;設(shè)置循環(huán)次數(shù)
MOVR1,#DATA;R1作地址指針,指向數(shù)據(jù)塊首地址
CLRA ;A清零LOOP:ADDA,@R1;加一個(gè)數(shù)
INCR1 ;修改指針,指向下一個(gè)數(shù)
DJNZR0,LOOP;R0減1,不為0循環(huán)
MOVSUM,A;存10個(gè)數(shù)相加的和3/20/2024453/20/202446
在程序設(shè)計(jì)中,通常把具有一定功能的公用程序段編制成子程序,當(dāng)主程序需要使用子程序時(shí)用調(diào)用指令,而在子程序的最后安排一條子程序返回指令,以便執(zhí)行完子程序后能返回主程序繼續(xù)執(zhí)行。5、調(diào)用及返回指令3/20/202447所用的子程序的入口地址必須與ACALL下面一條指令的第一個(gè)字節(jié)在同一個(gè)2KB區(qū)域的存儲(chǔ)器區(qū)內(nèi)。短調(diào)用指令A(yù)CALLaddr11
3/20/202448
LCALLaddr16
長(zhǎng)調(diào)用指令3/20/202449子程序返回指令
RET中斷返回指令RETI3/20/202450空操作指令是一條單字節(jié)單周期指令。它控制CPU不做任何操作,僅僅是消耗這條指令執(zhí)行所需要的一個(gè)機(jī)器周期的時(shí)間,不影響任何標(biāo)志位,故稱為空操作指令。NOP指令在設(shè)計(jì)延時(shí)程序、拼湊精確延時(shí)時(shí)間及在程序等待或修改程序等場(chǎng)合是很有用的。7、空操作指令NOP;(PC)←(PC)+13/20/2024514.3.3算術(shù)運(yùn)算指令
加、減法指令加減法指令形式結(jié)構(gòu)圖(a)加減法指令關(guān)系圖;(b)加1、減1指令關(guān)系圖
3/20/2024521、加法指令不帶進(jìn)位的加法指令
ADDA,Rn
ADDA,directADDA,@Ri
ADDA,#data對(duì)標(biāo)志位的影響:如果位7有進(jìn)位,則置“1”進(jìn)位CY;否則清“0”CY.如果位3有進(jìn)位,則置“1”進(jìn)位AC;否則清“0”AC.如果位6有進(jìn)位輸出而位7沒有,或者位7有進(jìn)位輸出而位6沒有,則置位溢出標(biāo)志OV,否則清“0”O(jiān)V.3/20/202453帶進(jìn)位的加法指令A(yù)DDCA,Rn
ADDCA,directADDCA,@Ri
ADDCA,#data這組指令的功能與普通加法指令類似,唯一的不同之處是,在執(zhí)行加法時(shí),還要將上一次進(jìn)位標(biāo)志Cy的內(nèi)容也一起加進(jìn)去。對(duì)于標(biāo)志位的影響也與普通加法指令相同。3/20/202454最后一條指令是對(duì)16位的數(shù)據(jù)指針寄存器DPTR執(zhí)行加1操作,指令執(zhí)行時(shí),先對(duì)低8位指針DPL的內(nèi)容加1,當(dāng)產(chǎn)生溢出時(shí)就對(duì)高8位指針DPH加1,但不影響任何標(biāo)志。增量指令I(lǐng)NCAINCRn
INCdirectINC@Ri
INCDPTR這組指令的功能是:將指令中所指出操作數(shù)的內(nèi)容加1。若原來(lái)的內(nèi)容為0FFH,則加1后將產(chǎn)生溢出,使操作數(shù)的內(nèi)容變成00H,但不影響任何標(biāo)志。3/20/2024552、減法指令
這組指令的功能是:將累加器A的內(nèi)容與第二操作數(shù)及進(jìn)位標(biāo)志相減,結(jié)果送回到累加器A中。若要進(jìn)行不帶借位的減法操作,則必須先將Cy清“0”。帶進(jìn)位減法指令
SUBBA,Rn
SUBBA,directSUBBA,@Ri
SUBBA,#data3/20/202456如位6有借位而位7沒有借位,或位7有借位而位6沒有借位,則溢出標(biāo)志OV置“1”,否則清“0”。對(duì)標(biāo)志位的影響:如果位7(D7)有借位,則進(jìn)位標(biāo)志Cy置“1”,否則清“0”;如果位3(D3)有借位,則輔助進(jìn)位標(biāo)志AC置“1”,否則清“0”;3/20/202457這組指令的功能是:將指出的操作數(shù)內(nèi)容減1。如果原來(lái)的操作數(shù)為00H,則減1后將產(chǎn)生下溢出,使操作數(shù)變成0FFH,但不影響任何標(biāo)志。(除A減1影響P)減1指令
DECADECRn
DECdirectDEC@Ri
3/20/2024583、乘法指令這條指令的功能是:將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘,乘積的低8位存放在累加器A中,高8位存放于寄存器B中。如果乘積超過0FFH,則溢出標(biāo)志OV置“1”,
否則清“0”。進(jìn)位標(biāo)志Cy總是被清“0”。
MULAB3/20/2024594、除法指令將累加器A中的內(nèi)容除以寄存器B中的8位無(wú)符號(hào)整數(shù),所得商的整數(shù)部分存放在累加器A中,余數(shù)部分存放在寄存器B中,清“0”進(jìn)位標(biāo)志Cy和溢出標(biāo)志OV。DIVAB這條指令的功能是:若原來(lái)B中的內(nèi)容為0,則執(zhí)行該指令后A與B中的內(nèi)容不定,并將溢出標(biāo)志OV置“1”。在任何情況下,進(jìn)位標(biāo)志Cy總是被清“0”。
3/20/2024603/20/202461這組指令的功能是:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯與操作,并將結(jié)果送回目的操作數(shù)的單元中。(1)邏輯與指令
ANLA,Rn
ANLA,directANLA,@Ri
ANLA,#dataANLdirect,AANLdirect,#data4.3.4邏輯運(yùn)算操作3/20/202462這組指令的功能是:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯或操作,并將結(jié)果送回目的操作數(shù)的單元中。(2)邏輯或指令
ORLA,Rn
ORLA,directORLA,@Ri
ORLA,#dataORLdirect,AORLdirect,#data3/20/202463這組指令的功能是:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯異或操作,并將結(jié)果送回到目的操作數(shù)的單元中。(3)邏輯異或指令
XRLA,Rn
XRLA,directXRLA,@Ri
XRLA,#dataXRLdirect,AXRLdirect,#data3/20/202464(4)移位操作RLA;累加器A的內(nèi)容向左環(huán)移1位RLCA;累加器A的內(nèi)容帶進(jìn)位標(biāo)志位向左環(huán)移1位RRA;累加器A的內(nèi)容向右環(huán)移1位RRCA;累加器A的內(nèi)容帶進(jìn)位標(biāo)志位向右環(huán)移1位這組指令的功能是:對(duì)累加器A的內(nèi)容進(jìn)行簡(jiǎn)單的邏輯操作。除了帶進(jìn)位標(biāo)志位的移位指令外,其它都不影響Cy,AC,OV等標(biāo)志。3/20/202465
CLRA;對(duì)累加器A清“0”CPLA;對(duì)累加器A按位取反3/20/202466
位操作也稱布爾變量操作,它是以位(bit)作為單位來(lái)進(jìn)行運(yùn)算和操作的。MCS-51單片機(jī)內(nèi)部有一個(gè)功能相對(duì)獨(dú)立的布爾處理機(jī),它有借用進(jìn)位標(biāo)志CY作為位累加器,有位存儲(chǔ)器(即位尋址區(qū)中的各位),指令系統(tǒng)中有17條專門進(jìn)行位處理的指令集。位處理指令可以完成以位為對(duì)象的數(shù)據(jù)轉(zhuǎn)送、運(yùn)算、控制轉(zhuǎn)移等操作。4.3.5位操作指令3/20/202467
(1)直接地址方式:如0A8H;(2)點(diǎn)操作符方式:如IE.0;(3)位名稱方式:如EX0;(4)用戶定義名方式:如用偽指令BIT定義:
WBZD0BITEX0
經(jīng)定義后,允許指令中使用WBZD0代替EX0。
指令中位地址的表達(dá)形式有以下幾種:3/20/202468(1)位變量傳送指令這組指令的功能是:把源操作數(shù)指出的布爾變量送到目的操作數(shù)指定的位地址單元中。
其中一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志Cy,另一個(gè)操作數(shù)可以是任何可直接尋址位。MOVC,bitMOVbit,C3/20/202469(2)位變量修改指令CLRCCLRbitCPLCCPLbitSETBCSETBbit這組指令對(duì)操作數(shù)所指出的位進(jìn)行清“0”,取反,置“1”的操作,不影響其它標(biāo)志。3/20/202470(3)位變量邏輯操作指令這組指令的功能是:如果源位的布爾值是邏輯0,則將進(jìn)位標(biāo)志清“0”;否則,進(jìn)位標(biāo)志保持不變,不影響其它標(biāo)志。位變量邏輯與指令A(yù)NLC,bitANLC,/bitbit前的斜杠表示對(duì)(bit)取反,直接尋址位取反后用作源操作數(shù),但不改變直接尋址位原來(lái)的值。例如指令:ANLC,/ACC.0執(zhí)行前ACC.0為0,C為1,則指令執(zhí)行后C為1,而ACC.0仍為0。3/20/202471位變量邏輯或指令這組指令的功能是:如果源位的布爾值是邏輯1,則將進(jìn)位標(biāo)志置“1”;否則,進(jìn)位標(biāo)志保持不變,不影響其它標(biāo)志。ORLC,bitORLC,/bit3/20/202472例:
利用位操作指令,模擬圖所示硬件邏輯電路的功能。3/20/202473
MOVC,P1.1 ;(CY)←(P1.1) ORLC,P1.2 ;(CY)←(P1.1)∨(P1.2)=A ANLC,P1.0;(CY)←(P1.0)∧A CPLC ;(CY)←(P1.0)∧A=B MOVF0,C ;F0內(nèi)暫存B MOVC,P1.3 ;(CY)←(P1.3) ANLC,/P1.4 ;(CY)←(P1.3)∧(P1.4)=D ORLC,F(xiàn)0 ;(CY)←B∨D MOVP1.5,C ;運(yùn)算結(jié)果送入P1.53/20/2024743/20/2024754.3.6十進(jìn)制指令(1)半字節(jié)交換指令
XCHDA,@RiSWAPA將累加器A的低4位內(nèi)容和(Ri)所指出的內(nèi)部RAM單元的低4位內(nèi)容相互交換。將累加器A的高4位與低4位之間進(jìn)行交換。3/20/202476
這條指令對(duì)累加器A參與的BCD碼加法運(yùn)算所獲得的8位結(jié)果進(jìn)行十進(jìn)制調(diào)整,使累加器A中的內(nèi)容調(diào)整為二位壓縮型BCD碼的數(shù)。使用時(shí)必須注意,它只能跟在加法指令之后,不能對(duì)減法指令的結(jié)果進(jìn)行調(diào)整,且其結(jié)果不影響溢出標(biāo)志位。(2)十進(jìn)制調(diào)整指令
DAA執(zhí)行過程:判斷A中的低4位是否大于9和輔助進(jìn)位標(biāo)志AC是否為“1”,若兩者有一個(gè)條件滿足,則低4位加6操作;同樣,A中的高4位大于9或進(jìn)位標(biāo)志Cy為“1”兩者有一個(gè)條件滿足時(shí),高4位加6操作。3/20/2024774.4偽指令偽指令不要求計(jì)算機(jī)做任何操作,也沒有對(duì)應(yīng)的機(jī)器碼,不產(chǎn)生目標(biāo)程序,不影響程序的執(zhí)行,僅僅是能夠幫助進(jìn)行匯編的一些指令。偽指令主要作用:指定程序或數(shù)據(jù)的起始位置;給出一些連續(xù)存放數(shù)據(jù)的地址;為中間運(yùn)算結(jié)果保留一部分存儲(chǔ)空間;表示源程序結(jié)束等等。不同版本的匯編語(yǔ)言,偽指令的符號(hào)和含義可能有所不同,但基本用法是相似的。3/20/202478功能:規(guī)定其后面的目標(biāo)程序或數(shù)據(jù)塊的起始地址。它放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,說明緊跟在其后的程序段或數(shù)據(jù)塊的起始地址就是ORG后面給出的地址。
1、定位偽指令ORG格式:[標(biāo)號(hào):]ORG地址(十六進(jìn)制表示)例如:
ORG2000H START:MOVA,#7FH3/20/202479格式:[標(biāo)號(hào):]END
2、匯編結(jié)束偽指令END作用:END是匯編語(yǔ)言源程序的結(jié)束標(biāo)志,表示匯編結(jié)束。在END以后所寫的指令,匯編程序都不予處理。一個(gè)源程序只能有一個(gè)END命令,否則就有一部分指令不能被匯編。3/20/202480
用EQU偽指令對(duì)某符號(hào)賦值后,該符號(hào)的值在整個(gè)程序中不能再改變。3、賦值偽指令EQU功能:將表達(dá)式的值或寄存器名賦予EQU前面的符號(hào)名。格式:符號(hào)名EQU表達(dá)式或符號(hào)名EQU寄存器名例如:
TAB1EQU1000HTAB2EQU2000H
匯編后TAB1、TAB2分別具有值1000H、2000H。3/20/2024814、位地址賦值偽指令BIT格式:
符號(hào)名BIT位地址功能:將位地址賦予BIT前面的符號(hào)名,經(jīng)賦值后可用該符號(hào)名代替BIT后面的位地址。例如:PLGBITF0AIBITP1.0
經(jīng)以上偽指令定義后,在程序中就可以把PLG和AI作為位地址來(lái)使用。3/20/202482例如:
ORG2000HTAB1:DB30H,8AH,7FH,73DB'5','A','BCD'5、定義字節(jié)偽指令DB格式:[標(biāo)號(hào):]DB項(xiàng)或項(xiàng)表其中項(xiàng)或項(xiàng)表指一個(gè)字節(jié)數(shù)據(jù),用逗號(hào)分開的字節(jié)數(shù)據(jù)串,或以引號(hào)括起來(lái)的字符串。功能:把項(xiàng)或項(xiàng)表的數(shù)據(jù)(字符串按字符順序以ASCII碼)存入從標(biāo)號(hào)地址開始的連續(xù)存儲(chǔ)單元中。3/20/202483
由于ORG2000H,所以TAB1的地址為2000H,因此,以上偽指令經(jīng)匯編后,將對(duì)2000H開始的連續(xù)存儲(chǔ)單元賦值:(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H;十進(jìn)制數(shù)73以十六進(jìn)制數(shù)存放(2004H)=35H;35H是數(shù)字5的ASCII碼(2005H)=41H;41H是字母A的ASCII碼(2006H)=42H;42H是字符串'BCD'中B的ASCII碼(2007H)=43H;43H是字符串'BCD'中C的ASCII碼(2008H)=44H;44H是字符串'BCD'中D的ASCII碼3/20/202484例如:
ORG1500HTAB2:DW1234H,80H
匯編以后:(1500H)=12H,
(1501H)=34H,
(1502H)=00H,
(1503H)=80H6、定義字偽指令DW格式:[標(biāo)號(hào):]DW項(xiàng)或項(xiàng)表DW偽指令與DB相似,但用于定義字的內(nèi)容。項(xiàng)或項(xiàng)表指所定義的一個(gè)字(兩個(gè)字節(jié))或用逗號(hào)分開的字串。匯編時(shí),機(jī)器自動(dòng)按高8位先存入,低8位在后的格式排列。3/20/2024857、數(shù)據(jù)賦值偽指令DATA用于給一個(gè)8位的內(nèi)部RAM單元起一個(gè)名字。同一個(gè)單元可以有多個(gè)名字。格式:名字DATA直接字節(jié)地址8、數(shù)據(jù)賦值偽指令XDATA用于給一個(gè)8位的外部RAM單元起一個(gè)名字。同一個(gè)單元可以有多個(gè)名字。格式:名字XDATA直接字節(jié)地址3/20/2024864.5實(shí)用程序設(shè)計(jì)4.5.1程序結(jié)構(gòu)的三種形式
1.三種形式順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)2.匯編語(yǔ)言程序設(shè)計(jì)步驟:
◆分析問題
◆確定算法
◆設(shè)計(jì)程序流程圖
◆分配內(nèi)存單元
◆編寫匯編語(yǔ)言源程序
◆調(diào)試程序3/20/202487【例】將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入RAM兩個(gè)單元中。ORG 0030HMOV A,30H;取值A(chǔ)NL A,#0FH;取低4位ADD A,#30H;轉(zhuǎn)換成ASCII碼MOV 32H,A ;保存結(jié)果MOV A,30H;取值SWAP A ;高4位與低4位互換ANL A,#0FH;取低4位(原來(lái)的高4位)ADD A,#30H;轉(zhuǎn)換成ASCII碼MOV 31H,A ;保存結(jié)果SJMP $END結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASCII碼存ASCII碼開始4.5.2順序結(jié)構(gòu)程序設(shè)計(jì)3/20/2024881.分支程序有三種基本形式,即單分支、雙分支、多分支。
2.分支程序的設(shè)計(jì)要點(diǎn)如下:(1)先建立可供條件轉(zhuǎn)移指令測(cè)試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1AnK=0K=1…K=nK=?……4.5.3分支程序設(shè)計(jì)單分支雙分支多分支3/20/2024893.
分支程序設(shè)計(jì)舉例【例】設(shè)X存在30H單元中,根據(jù)下式
X+2 X>0Y= 100 X=0。
∣X∣ X<0A為負(fù)數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←|X|A←64HA←X+2存數(shù)(31H)←A(30H)求出Y值,將Y值存入31H單元。3/20/202490分析:根據(jù)數(shù)據(jù)的符號(hào)位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)是否為0。參考程序如下:
ORG 0030HMOV A,30H ;取數(shù)
JB ACC.7,NEG
;負(fù)數(shù),轉(zhuǎn)NEG
JZ ZER0
;為零,轉(zhuǎn)ZER0ADD A,#02H ;為正數(shù),求X+2AJMPSAV ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#64H ;數(shù)據(jù)為零,Y=100AJMPSAV ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)
NEG:DECA ;
CPL A ;求∣X∣SAV:MOV31H,A ;保存數(shù)據(jù)
SJMP $ ;暫停
END3/20/202491
4.5.4多分支程序設(shè)計(jì)-散轉(zhuǎn)程序
散轉(zhuǎn)程序是分支程序的一種,它可根據(jù)運(yùn)算結(jié)果或輸入數(shù)據(jù)將程序轉(zhuǎn)入不同的分支。
MCS-51指令系統(tǒng)中有一條跳轉(zhuǎn)指令JMP@A+DPTR,用它可以很容易地實(shí)現(xiàn)散轉(zhuǎn)功能。該指令把累加器的8位無(wú)符號(hào)數(shù)與16位數(shù)據(jù)指針的內(nèi)容相加,并把相加的結(jié)果裝入程序計(jì)數(shù)器PC,控制程序轉(zhuǎn)向目標(biāo)地址去執(zhí)行。例根據(jù)工作寄存器R0內(nèi)容的不同,使程序轉(zhuǎn)入相應(yīng)的分支。(R0)=0對(duì)應(yīng)的分支程序標(biāo)號(hào)為ONE;(R0)=1對(duì)應(yīng)的分支程序標(biāo)號(hào)為TWO;
(R0)=N對(duì)應(yīng)的分支程序標(biāo)號(hào)為PRN。3/20/202492程序如下:LP0:MOVDPTR,#TABLE;取表頭地址
MOVA,R0ADDA,R0;R0內(nèi)容乘以2JNCLP1;無(wú)進(jìn)位轉(zhuǎn)移
INCDPH;加進(jìn)位位LP1:JMP@A+DPTR;跳至散轉(zhuǎn)表中相應(yīng)位置
TABLE:AJMPONEAJMPTWOAJMPTHREEAJMPFOURAJMPPRN3/20/2024931.循環(huán)程序的結(jié)構(gòu)循環(huán)程序一般由四個(gè)主要部分組成:
初始化部分:為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置初值。
處理部分:
為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實(shí)體,也是循環(huán)程序的主體。
循環(huán)控制部分:
這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束,直到符合結(jié)束條件時(shí),跳出循環(huán)為止。結(jié)束部分:
這部分主要是對(duì)循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。4.5.4循環(huán)程序3/20/202494(a)當(dāng)型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束循環(huán)結(jié)構(gòu)程序流程圖3/20/2024952.
循環(huán)程序設(shè)計(jì)舉例例:不同存儲(chǔ)區(qū)域之間的數(shù)據(jù)傳輸。將內(nèi)部RAM30H單元開始的內(nèi)容依次傳送到外部RAM0100H單元開始的區(qū)域,直到遇到傳送的內(nèi)容是0為止。3/20/202496
(2)匯編語(yǔ)言源程序。
ORG 0000HMOV R0,#30H;
MOV DPTR,#0100H;
TRANS:MOVA,@R0
;A←(R0)
MOVX@DPTR,A
;(DPTR)←A
CJNEA,#00H,NEXT
SJMPFINISH
;A=0,傳送完成
NEXT:
INC R0
;修改地址指針
INC DPTR
AJMP TRANS
;繼續(xù)傳送
FINISH:
SJMP $ END3/20/2024973.多重循環(huán)結(jié)構(gòu)程序某些復(fù)雜問題或者循環(huán)數(shù)超過256,則需采用多重循環(huán)的程序結(jié)構(gòu),即循環(huán)程序中包含循環(huán)程序或一個(gè)大循環(huán)中包含多個(gè)小循環(huán)程序,稱多重循環(huán)程序結(jié)構(gòu),又稱循環(huán)嵌套。循環(huán)的重?cái)?shù)不限,但必須每循環(huán)的層次分明,不能有相互交叉!外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確多重循環(huán)示意圖3/20/202498范例:延時(shí)程序設(shè)計(jì)(晶振12MHz)DEL:MOVR7,#200DEL1:
MOVR6,#125DEL2:
DJNZR6,DEL2;125×2=250
DJNZR7,DEL1;250×200=50msRET精確的計(jì)算:(250+1+2)×200+1=50.301msMOVRn#data是單機(jī)器周期指令DJNZRn,rel
是雙機(jī)器周期指令3/20/2024994.5.6子程序設(shè)計(jì)子程序作為一個(gè)具有獨(dú)立功能的程序段,編程時(shí)需遵循以下原則:1.子程序的編程原則(1)子程序的第一條指令必須有標(biāo)號(hào),明確子程序入口地址。(2)以返回指令RET結(jié)束子程序。(3)簡(jiǎn)明扼要的子程序說明部分。(4)較強(qiáng)的通用性和可浮動(dòng)性,盡可能避免使用具體的內(nèi)存單元和絕對(duì)轉(zhuǎn)移地址等。
(5)注意保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。3/20/2024100
;程序名:BCDBIN
;功能:BCD碼轉(zhuǎn)換為二進(jìn)制數(shù) ;入口參數(shù):要轉(zhuǎn)換的BCD碼存在累加器A中 ;出口參數(shù):轉(zhuǎn)換后的二進(jìn)制數(shù)存放在累加器A中 ;占用資源:寄存器BBCDBIN:
PUSHB
;保護(hù)現(xiàn)場(chǎng)
PUSHPSWPUSH ACC ;暫存A的內(nèi)容
ANLA,#0F0H ;屏蔽掉低4位
SWAP A ;將A的高4位與低4位交換
MOV B,#10 MUL AB ;乘法指令,
MOV B,A;乘積不會(huì)超過256,
POP ACC;取原BCD數(shù)
ANL A,#0FH;屏蔽掉高4位
ADD A,B ;個(gè)位數(shù)與十位數(shù)相加
POP PS
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省本溪市2025年高三下學(xué)期歷史試題統(tǒng)練(八)含解析
- 浙江中考科學(xué)模擬試卷含答案解析5份
- 河南省南陽(yáng)唐河縣聯(lián)考2025屆初三聯(lián)考(三)英語(yǔ)試題含答案
- 古代散文特征問題試題及答案
- 達(dá)州市公共交通有限公司2024年第二批公交駕駛員招聘(22人)筆試參考題庫(kù)附帶答案詳解
- 貴州企業(yè)招聘2025貴州貴旅國(guó)際旅行服務(wù)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025福建省廈門輪船有限公司廈門輪總海上客運(yùn)旅游有限公司校園招聘2人筆試參考題庫(kù)附帶答案詳解
- 2025年銀行反洗錢知識(shí)競(jìng)賽題庫(kù)及答案(400題)
- 2025廣西河池市鳳山縣招聘國(guó)有企業(yè)領(lǐng)導(dǎo)班子人員考察人選筆試參考題庫(kù)附帶答案詳解
- 2025新疆紅星城市開發(fā)建設(shè)有限公司及各子分公司第一次社會(huì)招聘(7人)筆試參考題庫(kù)附帶答案詳解
- 建筑公司勞動(dòng)防護(hù)用品管理制度
- 機(jī)械加工PFMEA案例
- 消費(fèi)者心理與行為分析PPT(第四版)完整全套教學(xué)課件
- GB/T 7324-2010通用鋰基潤(rùn)滑脂
- 鐵塔基礎(chǔ)自檢驗(yàn)收記錄表
- 《梅嶺三章》教學(xué)實(shí)錄
- 英國(guó)FBA超重標(biāo)簽
- DB50∕T 906-2019 殯葬服務(wù)標(biāo)志和設(shè)置規(guī)范
- 安全生產(chǎn)管理和國(guó)內(nèi)外先進(jìn)管理經(jīng)驗(yàn)講義PPT通用課件
- 人教版八年級(jí)物理下冊(cè) 第八章 運(yùn)動(dòng)和力 練習(xí)題(含答案)
- 部編版道德與法治小學(xué)六年級(jí)下冊(cè)第二單元 《愛護(hù)地球 共同責(zé)任》單元練習(xí)試題(共六套).docx
評(píng)論
0/150
提交評(píng)論