




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
內(nèi)核單片機(jī)匯編語言程序設(shè)計(jì)第1頁/共142頁2第2頁/共142頁3第4章51內(nèi)核單片機(jī)匯編語言程序設(shè)計(jì)4.1、匯編指令格式4.2、尋址方式4.3、指令系統(tǒng)4.4、匯編程序常用偽指令4.5、匯編語言程序設(shè)計(jì)第3頁/共142頁4一、基本概念指令——使單片機(jī)完成基本操作的命令。程序——完成某項(xiàng)特定任務(wù)的指令的集合。高級(jí)語言:匯編語言:機(jī)器語言:程序設(shè)計(jì)語言:用二進(jìn)制代碼表示指令和數(shù)據(jù)。用助記符表示指令操作功能,用標(biāo)號(hào)表示操作對(duì)象。獨(dú)立于機(jī)器,面向過程,接近自然語言和數(shù)學(xué)表達(dá)式。第四章51內(nèi)核單片機(jī)匯編語言程序設(shè)計(jì)第4頁/共142頁5匯編程序功能
源程序(匯編指令程序)
匯編目標(biāo)程序(機(jī)器語言程序)
匯編指令與機(jī)器碼指令有一一對(duì)應(yīng)的關(guān)系。匯編程序是一種翻譯程序,將源程序翻譯成目標(biāo)程序。
(翻譯)手工匯編機(jī)器匯編
(常用)匯編的兩種方式
第5頁/共142頁6關(guān)于機(jī)器匯編的說明兩次掃描過程。第一次掃描:檢查語法錯(cuò)誤,確定符號(hào)名字;建立使用的全部符號(hào)名字表;每一符號(hào)名字后跟一對(duì)應(yīng)值(地址或數(shù))。第二次掃描:在第一次掃描基礎(chǔ)上,將符號(hào)地址轉(zhuǎn)換成地址(代真);利用操作碼表將助記符轉(zhuǎn)換成相應(yīng)的目標(biāo)碼。
第6頁/共142頁7源程序
目標(biāo)程序
地址
ORG1000HSTART:MOVR0,2FHMOVR2,#00HMOVA,@R0MOVR3,AINCR3SJMPNEXTLOOP:INCR0CJNE@R0,#44H,NEXT
INCR2NEXT:DJNZR3,LOOP
MOV2AH,R2SJMP$END
第一次匯編第二次匯編1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE第7頁/共142頁8時(shí)間屬性:指一條指令執(zhí)行完畢所需要的時(shí)間空間屬性:指一條指令存儲(chǔ)于程序存儲(chǔ)器中所占的字節(jié)數(shù)功能屬性:指一條指令所對(duì)應(yīng)的一個(gè)特定的操作功能指令的三種屬性
STC系列單片機(jī)采用了80C51內(nèi)核,其指令集與MCS—51系列單片機(jī)完全相同,本章介紹的指令系統(tǒng)可適用于所有51內(nèi)核的單片機(jī)。第8頁/共142頁9指令的構(gòu)成
指令=
操作碼
+操作數(shù)操作碼——表示該指令所能執(zhí)行的操作功能。操作數(shù)——表示參加操作的數(shù)的本身或操作數(shù)所在的地址。
匯編語言指令基本格式[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]4.1匯編指令格式第9頁/共142頁10描述符號(hào):
Rn
——工作寄存器R0~R7Ri——間接尋址寄存器R0、R1Direct
——直接地址,包括內(nèi)部128BRAM單元地址、所有SFR地址。#data——8位立即數(shù)#data16——16位立即數(shù)
addr16——16位目的地址addr11——11位目的地址
rel
——用補(bǔ)碼表示的8位相對(duì)偏移量bit——可直接位尋址的位
第10頁/共142頁11
/bit——指定位求反,再參與邏輯操作,但取反后不影響該位的原值
(x)——x中的內(nèi)容((x))——x中的地址中的內(nèi)容→
——表示操作流程,將箭尾一方內(nèi)容送入箭頭所指一方的單元中去
$——當(dāng)前指令地址
第11頁/共142頁124.2尋址方式尋址方式——尋找操作數(shù)或?qū)ふ也僮鲾?shù)所在存儲(chǔ)單元地址的方式共七種尋址方式:
寄存器尋址直接尋址立即數(shù)尋址寄存器間接尋址變址尋址相對(duì)尋址位尋址必須掌握第12頁/共142頁13操作數(shù)以常數(shù)的形式直接出現(xiàn)在指令中,用“#”作前綴;該常數(shù)與操作碼一起存放在ROM中,可以立即得到并執(zhí)行。例如:MOVA,#52H74HA立即數(shù)操作碼程序存儲(chǔ)器PC+1PC52H4.2.1立即(數(shù))尋址52H第13頁/共142頁14例如:MOVDPTR,#5678HDPTR由兩個(gè)特殊功能寄存器DPH和DPL組成90H56H78H56H78HPCPC+1PC+2操作碼低位立即數(shù)高位立即數(shù)程序存儲(chǔ)器SFRDPLDPH
注意:1.只有源操作數(shù)能使用立即尋址方式。
2.立即數(shù)長(zhǎng)度必須小于或等于目的操作數(shù)的長(zhǎng)度。第14頁/共142頁15
操作數(shù)存放在R0~R7、A或DPTR中;
B寄存器在乘、除法指令中是寄存器尋址,在數(shù)據(jù)傳送指令中是直接尋址。其他SFR的尋址方式不屬于寄存器尋址。例如:MOVA,R54.2.2寄存器尋址101PC操作碼程序存儲(chǔ)器內(nèi)部RAMR5AXXXXR6R711101第15頁/共142頁16
指令中直接給出操作數(shù)的地址,數(shù)據(jù)存放在該地址對(duì)應(yīng)的存儲(chǔ)單元中。直接尋址方式可以訪問的范圍:4.2.3直接尋址片內(nèi)RAM低128B單元(00H——7FH)SFR(既可用單元地址形式給出,也可用寄存器符號(hào)的形式給出)
注意:直接尋址方式是訪問特殊功能寄存器的唯一方法。第16頁/共142頁17
MOVP0,A
(P0代表符號(hào)地址,是直接尋址方式)例如:MOVA,63H4.2.3直接尋址74H63HPCPC+1操作碼直接地址程序存儲(chǔ)器內(nèi)部RAM63HAXXMOV80H,A
XX第17頁/共142頁18可用作地址指針的工作寄存器是R0、R1,以及DPTR例如:MOVA,@R1;A←((R1))PC操作碼程序存儲(chǔ)器內(nèi)部RAMA11100114.2.4寄存器間接尋址指令中寄存器的內(nèi)容作為操作數(shù)存放的地址間接尋址寄存器前用“@”表示前綴1R130H30H58H58H第18頁/共142頁19
使用該方式訪問數(shù)據(jù)存儲(chǔ)器時(shí)注意:訪問片內(nèi)RAM只能用R0和R1作指針;若片內(nèi)擴(kuò)展RAM或片外RAM僅有256B單元時(shí),既可以用R0或R1作指針間接訪問,也可用DPTR作指針間接訪問;大于256B時(shí)只能以DPTR作指針間接訪問。第19頁/共142頁20
操作數(shù)地址=變地址+基地址基地址寄存器:DPTR或PC;變址寄存器:A該尋址方式常用于訪問程序存儲(chǔ)器,查表。例如:MOVCA,@A+DPTRPC操作碼程序存儲(chǔ)器SFR32HALUA5H4.2.5變址尋址10010011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH設(shè)DPTR=32A5H,A=23H第20頁/共142頁21
用于相對(duì)轉(zhuǎn)移指令中以當(dāng)前PC值作為基地址,與指令中給定的相對(duì)偏移量rel相加,以所得之和作為目的位置的地址
當(dāng)前PC值
=源地址+轉(zhuǎn)移指令所占的字節(jié)數(shù)(實(shí)際上是轉(zhuǎn)移指令的下一條指令的地址)
rel:以補(bǔ)碼表示的有符號(hào)單字節(jié)數(shù)(-128~127),負(fù)數(shù)表示從當(dāng)前地址向下轉(zhuǎn)移,正數(shù)表示從當(dāng)前地址向上轉(zhuǎn)移。
4.2.6相對(duì)尋址第21頁/共142頁22PC操作碼程序存儲(chǔ)器PCALU2050HPC+12051HPC+2偏移量rel=08H例如:JZ08H;
rel為正數(shù),從當(dāng)前地址向上轉(zhuǎn)移 當(dāng)A=0時(shí),PC←PC+2+rel//轉(zhuǎn)移 當(dāng)A≠0時(shí),PC←PC+2//程序順序執(zhí)行 2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H第22頁/共142頁23PC操作碼程序存儲(chǔ)器PCALU2050HPC+12051HPC+2偏移量rel=F4H例如:JZF4H;
rel為負(fù)數(shù),從當(dāng)前地址向下轉(zhuǎn)移 當(dāng)A=0時(shí),PC←PC+2+rel//轉(zhuǎn)移 當(dāng)A≠0時(shí),PC←PC+2//程序順序執(zhí)行 2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H第23頁/共142頁24操作數(shù)是二進(jìn)制位在指令中直接給出位地址,利用位處理器對(duì)某一位進(jìn)行數(shù)據(jù)傳送、邏輯運(yùn)算等操作例如:MOVC,07H;C←(07H)PC操作碼程序存儲(chǔ)器C20H00PC+1PSWSFRX4.2.7位尋址07H07XA2H第24頁/共142頁25
兩種位尋址區(qū):(1)內(nèi)部RAM中的位尋址區(qū):字節(jié)地址為20H~2FH;(2)SFR的可尋址位。
位地址的幾種表示方法: 1)直接使用位地址;如:PSW的位6可表示為0D6H2)字節(jié)地址帶位號(hào);或0D0H.63)SFR名帶位號(hào); 或PSW.6
4)位符號(hào)地址表示;
或AC
第25頁/共142頁26數(shù)據(jù)傳送指令共29條,包括:普通傳送指令、數(shù)據(jù)交換指令和堆棧操作指令程序存儲(chǔ)器ROM特殊功能寄存器SFR片內(nèi)RAM128字節(jié)擴(kuò)展數(shù)據(jù)存儲(chǔ)器RAMMOVCMOVXMOVPUSHPOPXCHXCHD4.3指令系統(tǒng)4.3.1數(shù)據(jù)傳送指令注意:該類指令只有以A為目的操作數(shù)的指令影響PSW中的P標(biāo)志位,其它數(shù)據(jù)傳送指令對(duì)各標(biāo)志位無影響。第26頁/共142頁27回憶操作數(shù)描述符:direct,Rn,@Ri,#data,DPTR等。1)以A為目的操作數(shù)的傳送指令MOVA,#dataMOVA,directMOVA,RnMOVA,@RiMOVRn,#dataMOVRn,directMOVRn,A1、普通傳送指令片內(nèi)RAM傳送指令MOV;A←(Rn);A←data;A←(direct);A←((Ri))2)以Rn為目的操作數(shù)的傳送指令;Rn←A;Rn←data;Rn
←(direct)第27頁/共142頁28MOVdirect,RnMOVdirect,@Ri4)以@Ri為目的操作數(shù)的傳送指令MOV@Ri,#data
;(Ri)←dataMOV@Ri,direct;(Ri)←(direct)MOV@Ri,A ;(Ri)←(A)MOVDPTR,#data16;唯一的16位數(shù)據(jù)傳送指令。(direct)←
(A)MOVdirect,A;3)以direct為目的操作數(shù)的傳送指令MOVdirect,#data(direct)←dataMOVdirect,direct(direct)←(direct)(direct)←
(Rn)(direct)←
((Ri))5)以DPTR為目的操作數(shù)的傳送指令第28頁/共142頁29
MOVRn,RnMOV@Ri,@RiMOVRn,@RiMOV#data,A
××××注意:1)在數(shù)據(jù)傳送指令中目的操作數(shù)和源操作數(shù)中不能同時(shí)出現(xiàn)工作寄存器。2)SFR只能用直接尋址方式訪問。3)片內(nèi)RAM高128B(80H-FFH)只能用寄存器間接尋址方式訪問?!纠?-1】寫出將R0的內(nèi)容送到R5中的程序段。
MOVA,R0 MOVR5,A第29頁/共142頁30擴(kuò)展數(shù)據(jù)存儲(chǔ)器傳送指令對(duì)片內(nèi)擴(kuò)展RAM或片外擴(kuò)展RAM及外部接口電路進(jìn)行數(shù)據(jù)傳送的相關(guān)指令:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A執(zhí)行過程中會(huì)使/WR、/RD有效。;A←((Ri));A←((DPTR));((Ri))←A;((DPTR))←A(讀)(讀)(寫)(寫)注意:1)通過DPTR間接尋址,可以對(duì)整個(gè)64KB片外RAM訪問。
2)通過@Ri間接尋址,只能對(duì)擴(kuò)展RAM的低256字節(jié)訪問,如果地址范圍大于256B時(shí),應(yīng)謹(jǐn)防地址沖突。第30頁/共142頁31【例4-2】試編寫一程序段,實(shí)現(xiàn)將片外RAM地址為01E0H開始的16個(gè)單元中的內(nèi)容傳送到片內(nèi)擴(kuò)展RAM地址為04FFH開始的單元中。
參考程序?yàn)椋?MOV R2,#10H MOV P2,#01H MOV R0,#0E0H MOV DPTR,#04FFH LOOP:ORLAUXR,#00000010B MOVXA,@R0 ANL AUXR,#11111101B MOVX@DPTR,A INC R0 INC DPTR
DJNZ R2,LOOP
D7D6D5D4D3D2D1D0T0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRSEXTRAM=1時(shí),訪問片外擴(kuò)展RAM第31頁/共142頁32程序存儲(chǔ)器傳送指令MOVC(查表指令)
MOVCA,@A+DPTRMOVCA,@A+PC
MOVC含義是傳送常數(shù)。(A)+(
DPTR)或PC當(dāng)前值=一個(gè)16位的地址,將該ROM地址中的內(nèi)容傳送給
A。以DPTR為基地址的指令,可在ROM的64KB范圍內(nèi)查表;(常用)以PC為基地址的指令只能在(PC)+
1為基點(diǎn)的256B范圍內(nèi)查表;(不推薦)使用第一條指令前,需事先將表首地址存入DPTR中,相對(duì)于表首偏移量存入A寄存器中。第32頁/共142頁33例如:(A)=30H,當(dāng)前地址1000HMOVCA,@A+PC ;A←(????H)例如: ORG 8000HMOV A,#30HMOVCA,@A+PC ;A←(????H)……ORG 8030HDB41H,42H,43H,44H,45H例如:(DPTR)=8100H,(A)=40H
MOVC A,@A+DPTR
;A←(????H)80331031閱讀以下三個(gè)程序段,并回答????的內(nèi)容。8140第33頁/共142頁34【例4-3】將ROM02FFH單元的內(nèi)容送片內(nèi)RAM的50H單元中。
參考程序如下: MOVA,#0 MOVDPTR,#02FFH
MOVCA,@A+DPTR MOV50H,A
第34頁/共142頁35【例4-4】設(shè)data是一個(gè)BCD碼常數(shù),試用查表法獲得其相應(yīng)的ASCII碼。將0-9的ASCII碼組成一個(gè)表依次存放于程序存儲(chǔ)器中以TAB為首地址的各單元中。參考程序如下: MOVA,#data
MOVDPTR,#TAB
MOVCA,@A+DPTR
……TAB:DB30H,31H,32H
DB33H,34H,35H,36H,37H,38H,39H
第35頁/共142頁362、數(shù)據(jù)交換指令普通傳送指令數(shù)據(jù)傳送是單向的,傳送后只有目的操作數(shù)變化。數(shù)據(jù)交換指令是雙向傳送,交換后兩個(gè)操作數(shù)都變。整字節(jié)交換指令XCHA,Rn(A)←→(Rn)
XCHA,direct(A)←→(direct)XCHA,@Ri(A)←→((Ri))半字節(jié)交換指令XCHDA,@Ri(A3-0)←→((Ri)3-0)A寄存器高低半字節(jié)交換指令SWAPA(A3-0)←→(A7-4)第36頁/共142頁37【例4-5】已知(R0)=30H,(A)=65H,(30H)=8FH,分析執(zhí)行如下指令后A與30H單元中數(shù)據(jù)的變化。
XCH
A,@R0XCHD A,@R0SWAP A;交換后,(A)=8FH,(30H)=65H;交換后,(A)=85H,(30H)=6FH;交換后(A)=58H第37頁/共142頁38【例4-6】將片內(nèi)RAM30H和31H單元中的ASCII碼轉(zhuǎn)換成壓縮式BCD碼存入20H單元。其中30H單元中的數(shù)值為低位,31H單元中的數(shù)值為高位。
分析:0-9的ASCII碼的低4位即是所對(duì)應(yīng)的BCD碼。參考程序如下: MOV R0,#30H MOV R1,#31H
XCHD A,@R1
SWAP A
XCHD A,@R0
XCH A,20H
第38頁/共142頁39(2)(SP)←(direct)3、堆棧操作指令PUSHdirectPOPdirect
PUSHdirect
指令執(zhí)行中,機(jī)器自動(dòng)進(jìn)行兩步操作:(1)SP←(SP)+1POPdirect
指令執(zhí)行中,機(jī)器也自動(dòng)進(jìn)行兩步操作:(1)direct←((SP))(2)SP←(SP)-1不影響任何標(biāo)志位堆棧:按后進(jìn)先出原則讀寫的特殊RAM區(qū)。在用戶初始化程序中要先給堆棧指針賦初值,確定棧底位置。使用指令:MOVSP,#DATA第39頁/共142頁404FH50H51H52HSP80HPSW=80H例:“PUSHPSW”指令的執(zhí)行過程執(zhí)行前:SP=4FH執(zhí)行后:SP=50H第40頁/共142頁414FH50H51H52HSPSP80HPSW=××H例:“POPPSW”指令的執(zhí)行過程80H執(zhí)行前:SP=50H執(zhí)行后:SP=4FH第41頁/共142頁42【例4-7】在程序存儲(chǔ)器中從標(biāo)號(hào)為TAB1的單元開始依次存放0-9的平方值,R7中存有0-9中的某個(gè)數(shù),用查表指令取出R7中數(shù)據(jù)所對(duì)應(yīng)的平方值并存入R7中,要求執(zhí)行后DPTR中的內(nèi)容不改變。
參考程序如下: PUSHDPH PUSHDPL MOV A,R7 MOV DPTR,#TAB1 MOVCA,@A+DPTR MOV R7,A POP DPL
POP DPH …… TAB1:DB00H,01H,04H,09H,……
第42頁/共142頁43包括:加、減、乘、除;增量、減量;十進(jìn)制的BCD碼調(diào)整。1、加法指令不帶進(jìn)位位加法指令A(yù)DDA,#data;A←(A)+dataADDA,direct;A←(A)+(direct)ADDA,Rn;A←(A)+(Rn)
ADDA,@Ri;A←(A)+((Ri))
無符號(hào)數(shù)相加時(shí):若C=1,(其值>255)。
有符號(hào)數(shù)相加時(shí):若OV=1,說明有溢出。3.3.2算術(shù)運(yùn)算類指令第43頁/共142頁44帶進(jìn)位位加法指令A(yù)DDCA,#data;A←(A)+data+(CY)
ADDCA,direct;A←(A)+(direct)+(CY)ADDCA,Rn;A←(A)+(Rn)+(CY)
ADDCA,@Ri;A←(A)+((Ri))+(CY)ADD和ADDC指令的目的操作數(shù)均是A寄存器。ADD和ADDC指令在執(zhí)行時(shí)要影響CY、AC、OV和P標(biāo)志位。OV僅用來判斷有符號(hào)數(shù)運(yùn)算是否正確。常用ADD和ADDC指令配合實(shí)現(xiàn)多字節(jié)加法運(yùn)算。對(duì)于加法指令的說明第44頁/共142頁45【例4-8】設(shè)(A)=28H,(R1)=7CH,分析執(zhí)行指令 ADDA,R1后的結(jié)果。
00101000+0111110010100100結(jié)果為: A=0A4H,CY=0,AC=1,P=1,OV=1第45頁/共142頁46【例4-9】設(shè)雙字節(jié)數(shù)X存在片內(nèi)RAM40H、41H單元,Y存在42H、43H單元,編程求Z=X+Y,并存入片內(nèi)RAM44H、45H、46H單元。(所有數(shù)據(jù)按高字節(jié)存于低地址單元的規(guī)則存放)
參考程序如下: MOV A,41H ADD A,43H MOV 46H,A MOV A,40H
ADDC A,42H
MOV 45H,A MOV A,#00H
ADDCA,#00H
MOV 44H,A
第46頁/共142頁472、減法指令SUBBA,#data ;A←(A)-data-(CY)
SUBBA,direct ;A←(A)-(direct)-(CY)
SUBBA,Rn ;A←(A)-(Rn)-(CY)
SUBBA,@Ri ;A←(A)-((Ri))-(CY)51指令系統(tǒng)只有帶借位的減法指令,當(dāng)需要執(zhí)行不帶借位的減法運(yùn)算時(shí),可先通過“CLRC”指令,將進(jìn)位標(biāo)志CY清零。
SUBB指令在執(zhí)行時(shí)要影響CY、AC、OV和P標(biāo)志位。OV僅用來判斷有符號(hào)數(shù)運(yùn)算是否正確。
對(duì)于減法指令的說明
第47頁/共142頁48【例4-10】設(shè)(A)=52H,(R0)=0B4H,分析執(zhí)行指令 CLRC SUBBA,R0 后的結(jié)果。
01010010-1011010010011110結(jié)果為: A=9EH,CY=1,AC=1,P=1,OV=1第48頁/共142頁49【例4-11】?jī)蓚€(gè)雙字節(jié)無符號(hào)數(shù)分別存放于寄存器R0R1及R2R3中,試編程計(jì)算它們的差,結(jié)果存于寄存器R4R5中。其中R0和R1中分別存放被減數(shù)的高8位和低8位。R2和R3中分別存放減數(shù)的高8位和低8位。差的高、低8位分別存于寄存器R4和R5中。
參考程序如下:
MOV A,R1
CLR C
SUBB A,R3
MOV R5,A
MOV A,R0
SUBB A,R2
MOV R4,A
第49頁/共142頁503、加1指令I(lǐng)NCA;(A)←(A)+1,以下類同。INCRnINCdirectINC@RiINCDPTRINC指令除了INCA要影響P標(biāo)志位外,對(duì)其它標(biāo)志位都沒有影響。【例4-12】設(shè)(R0)=7EH,片內(nèi)RAM(7EH)=0FFH,(7FH)=40H(DPTR)=21FEH,分析逐條執(zhí)行下列指令后各單元的內(nèi)容。
INC @R0 INC R0 INC @R0 INC DPTR INC DPTR ;使7EH單元的內(nèi)容由0FFH變?yōu)?0H;使R0的內(nèi)容由7EH變?yōu)?FH;使7FH單元的內(nèi)容由40H變?yōu)?1H;使DPL為FFH,DPH不變;使DPL為00H,DPH變?yōu)?2H第50頁/共142頁514、減1指令DECA;(A)←(A)-1,以下類同。DECRnDECdirectDEC@RiDEC指令除了DECA要影響P標(biāo)志位外,對(duì)其它標(biāo)志位都沒有影響。在51內(nèi)核單片指令系統(tǒng)中,沒有“DECDPTR”指令。
對(duì)于減1指令的說明
第51頁/共142頁525、乘、除法指令乘法指令MULAB
;(A)×(B),積的低8位在A中,積的高8位在;B中,CY總為0。當(dāng)積大于255時(shí)(即B中不為0);則置位OV標(biāo)志。51內(nèi)核單片機(jī)乘、除法指令只針對(duì)無符號(hào)數(shù)運(yùn)算。這兩條指令影響CY、OV和P,其它標(biāo)志位不受影響。除法指令DIVAB
;(A)÷(B),商在A中,余數(shù)在B中。 ;(CY)總是0。;若除數(shù)(B)=0,則(OV)=1,否則(OV)=0。第52頁/共142頁53【例4-13】試將A寄存器中的二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼,結(jié)果的百位數(shù)存放于31H單元,十位數(shù)和個(gè)位數(shù)壓縮后存于30H單元。
參考程序如下:
MOV B,#100
DIV AB
MOV 31H,A
MOV A,#10
XCH A,B
DIV AB SWAP A
ADD A,B
MOV 30H,A
第53頁/共142頁54DAA;二——十進(jìn)制調(diào)整指令。(A3~0)>9時(shí)或(AC)=1時(shí),(A3~0)
(A3~0)+6(A7~4)>9或(C)=1時(shí),(A7~4)
(A7~4)+6選擇修正值的規(guī)則:6、十進(jìn)制調(diào)整指令執(zhí)行過程中,CPU能根據(jù)加法運(yùn)算后,A中的值和PSW中的AC及CY標(biāo)志位的狀況自動(dòng)選擇一個(gè)修正值(00H、06H、60H、66H)與原運(yùn)算結(jié)果相加,進(jìn)行二——十進(jìn)制調(diào)整。DAA指令只能跟在加法指令后面使用。參加運(yùn)算的兩數(shù)是BCD碼才有必要調(diào)整。第54頁/共142頁55【例4-14】設(shè)A寄存器內(nèi)存有BCD碼56H,寄存器R3內(nèi)存有BCD碼67H,執(zhí)行ADDA,R3指令后,結(jié)果應(yīng)該是123,但實(shí)際結(jié)果為:
0101011056+0110011167
10111101BDH
需再執(zhí)行指令DAA,對(duì)上面的結(jié)果進(jìn)行調(diào)整,因高4位及低4位數(shù)都大于9,故需加66H。
10111101 +01100110
加66H調(diào)整
100100011123第55頁/共142頁56
BCD碼減法方法:減法可以轉(zhuǎn)換為加法運(yùn)算,將減數(shù)轉(zhuǎn)換為十進(jìn)制補(bǔ)碼,然后相加,再用DAA指令進(jìn)行調(diào)整。例如:
80-30=80+[-30]補(bǔ)=80+(100-30)=150結(jié)果中百位數(shù)字1在CY中,A寄存器中的50H即80-30的BCD碼。在實(shí)際運(yùn)算時(shí),不能用一個(gè)字節(jié)表示十進(jìn)制數(shù)100,可用99+1表示,即10011001B+1=10011010B=9AH,因?yàn)?AH經(jīng)過十進(jìn)制調(diào)整后就是100。第56頁/共142頁57十進(jìn)制無符號(hào)數(shù)的減法運(yùn)算可按以下步驟進(jìn)行:
第一步:求減數(shù)的十進(jìn)制補(bǔ)碼(9AH-減數(shù));第二步:被減數(shù)與減數(shù)的十進(jìn)制補(bǔ)碼相加;第三步:經(jīng)DAA指令調(diào)整后就得到所求的十進(jìn)制減法運(yùn)算結(jié)果?!纠?-15】設(shè)M1、M2、M3分別為十進(jìn)制的被減數(shù)、減數(shù)和差的符號(hào)地址,編寫減法運(yùn)算程序。 CLR C ;CY清0 MOV A,#9AH ;A←#9AH SUBB A,M2 ;求-M2的十進(jìn)制補(bǔ)碼 ADD A,M1 ;M1與-M2的十進(jìn)制補(bǔ)碼相加 DA A ;十進(jìn)制調(diào)整 MOV M3,A ;差存入M3第57頁/共142頁584.3.3邏輯運(yùn)算指令該類指令除了帶進(jìn)位循環(huán)及A為第一操作數(shù)的指令影響CY和P外,其它指令不影響PSW中的標(biāo)志位。1.邏輯與指令 ANLA,#data
;A←(A)∧data,以下類同
ANLA,Rn
ANLA,direct ANLA,@Ri ANLdirect,#data ANLdirect,A
【例4-16】設(shè)當(dāng)前P1口輸出35H,使其高4位輸出0,低4位不變。解;
ANLP1,#0FH
此做法稱為“屏蔽”位。注意:跟“0”相與可將該位清0
跟“1”相與該位保持不變第58頁/共142頁592.邏輯或指令 ORLA,#data
;A←(A)∨data,以下類同
ORLA,Rn
ORLA,direct ORLA,@Ri ORLdirect,#data ORLdirect,A
注意:跟“1”相或可將該位置1
跟“0”相或該位保持不變
【例4-17】將A中的低3位送入片內(nèi)RAM30H單元低3位,并且保持30H單元的高5位不變。解;
ANL A,#07H ANL 30H,#0F8H ORL 30H,A這稱為“數(shù)位組合”。第59頁/共142頁603.邏輯異或指令 XRLA,#data
;A←(A)⊕data,以下類同
XRLA,Rn
XRLA,direct XRLA,@Ri XRLdirect,#data XRLdirect,A
注意:跟“1”異或可取反 跟“0”異或保持不變
【例4-18】設(shè)(A)=0B5H=10110101B,執(zhí)行下列操作: XRL A,#0FH;則A的低4位取反,高4位保持不變,(A)=10111010B這稱為“指定位求反”。第60頁/共142頁614.A寄存器的清零和求反指令清零指令:CLRA
;A←0求反指令:CPLA ;
【例4-18】雙字節(jié)數(shù)求補(bǔ)碼。一個(gè)16位正數(shù)X存于R3(高8位)R2(低8位)中,求-X的補(bǔ)碼,并將結(jié)果仍存于R3、R2。參考程序如下:MOV A,R2
CPL A
ADD A,#01H
MOV R2,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
第61頁/共142頁625.移位指令循環(huán)左移:RLA
循環(huán)右移:RRA帶進(jìn)位位的循環(huán)左移:RLCA 帶進(jìn)位位的循環(huán)右移:RRCAA.0A.7A.0A.7A.0A.7CYA.0A.7CY
循環(huán)移位只能對(duì)A寄存器進(jìn)行,每次只能移動(dòng)一位對(duì)于某些數(shù)左移一位相當(dāng)于乘以2,右移一位相當(dāng)于除以2。第62頁/共142頁634.3.4控制轉(zhuǎn)移類指令作用:改變程序計(jì)數(shù)器PC的值,從而改變程序執(zhí)行方向。分為四大類:無條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;子程序調(diào)用指令;返回指令。1、無條件轉(zhuǎn)移指令LJMPaddr16AJMPaddr11SJMPrelJMP@A+DPTR第63頁/共142頁64長(zhǎng)轉(zhuǎn)移指令LJMPaddr16;轉(zhuǎn)移目的地址PC←addr16,0000H~FFFFH,64KB
長(zhǎng)轉(zhuǎn)移指令:LJMPAAAAH;AAAAHPCPC=0000HPC=AAAAH0000H0001H······AAA9HAAAAH0002H假設(shè)執(zhí)行該指令前,PC的值為0000H。注意:該指令可以轉(zhuǎn)移到64KB程序存儲(chǔ)器中的任意位置。第64頁/共142頁65絕對(duì)轉(zhuǎn)移指令PC高5位(保持不變)PC低11位A10A9A800001A7A6A5A4A3A2A1A0操作碼(第一字節(jié))操作數(shù)(第二字節(jié))程序計(jì)數(shù)器PCAJMPaddr11;PC+2PC,addr11PC.10~PC.0
轉(zhuǎn)移目的地址與(PC)+2在同一個(gè)2KB范圍內(nèi)。第65頁/共142頁66【例4-20】分析AJMP指令地址為2300H,或AJMP指令地址為2FFFH兩種情況下,執(zhí)行指令:AJMP0FFH后,程序轉(zhuǎn)移的目標(biāo)位置?
(1)
若AJMP指令的地址為2300H: 當(dāng)執(zhí)行該指令時(shí),PC=2302H, 完成該指令后,PC15-11=00100B保持不變, PC10-0←00011111111B 即轉(zhuǎn)移目的地址為PC=20FFH。(2)若AJMP指令的地址PC=2FFFH:執(zhí)行該指令時(shí)PC=3001H,指令執(zhí)行后PC15-11=00110B保持不變,PC10-0←00011111111B,轉(zhuǎn)移目的地址PC=30FFH??梢姡m然addr11相同,指令機(jī)器碼相同,但轉(zhuǎn)移的目的地址卻可能不同。第66頁/共142頁67相對(duì)短轉(zhuǎn)移指令SJMPrel ;PC←(PC)+2+rel實(shí)際使用中常寫成SJMPaddr16,匯編時(shí)會(huì)自動(dòng)轉(zhuǎn)換成rel。該指令的轉(zhuǎn)移范圍是:相對(duì)PC當(dāng)前值向上127字節(jié),向下128字節(jié)。注意:在單片機(jī)程序設(shè)計(jì)中,通常用到一條SJMP指令:
SJMP$;功能:原地踏步,動(dòng)態(tài)停機(jī)。調(diào)試程序時(shí)通常用它,使程序不再向后執(zhí)行。第67頁/共142頁68【例4-21】計(jì)算轉(zhuǎn)移指令的目標(biāo)地址。1)835AH:SJMP35H2)835AH:SJMP0E7H
解:1)rel=35H=00110101B為正數(shù),因此程序向上轉(zhuǎn)移。目標(biāo)地址=當(dāng)前PC+rel=(835AH+02H)+35H=8391H
2)rel=0E7H=11100111B為負(fù)數(shù),因此程序向下轉(zhuǎn)移。目標(biāo)地址=835AH+02H+0FFE7H=8343H相對(duì)長(zhǎng)轉(zhuǎn)移指令
JMP@A+DPTR;間接轉(zhuǎn)移,散轉(zhuǎn)移指令。轉(zhuǎn)移目的地址=(A)+(DPTR)本指令不影響標(biāo)志位,不改變
A寄存器及DPTR中的內(nèi)容。常用于多分支程序結(jié)構(gòu)中,可在程序運(yùn)行過程中動(dòng)態(tài)地決定程序分支走向。在64KB范圍內(nèi)無條件轉(zhuǎn)移第68頁/共142頁69【例4-22】R1中存有從00H-0FH中的某一個(gè)數(shù),編寫程序,根據(jù)R1中的數(shù)值,轉(zhuǎn)移至不同處理程序入口。
參考程序如下: MOV A,R1 RL A ADD A,R1 MOV DPTR,#TABLE
JMP @A+DPTR
TABLE: LJMP TAB0
LJMP TAB1 LJMP TAB2
……TAB0:……TAB1:……TAB2:……LJMP是三字節(jié)指令,跳轉(zhuǎn)前A寄存器中內(nèi)容需是3的倍數(shù)。第69頁/共142頁70比較LJMP、AJMP、SJMP、JMP轉(zhuǎn)移的起點(diǎn)和范圍:
LJMPLJMPPC64K
AJMPAJMPPC+2
SJMPSJMPPC+2127-128
JMPJMP@A+DPTRPCA+DPTR2K64K第70頁/共142頁71
實(shí)現(xiàn)按照一定條件決定轉(zhuǎn)移的方向,分三類:
A寄存器判零條件轉(zhuǎn)移
比較條件轉(zhuǎn)移
減1不為零轉(zhuǎn)移
JZrel:若(A)=0,則轉(zhuǎn)移,否則順序執(zhí)行。JNZrel:若(A)≠0,則轉(zhuǎn)移,否則順序執(zhí)行。轉(zhuǎn)移目的地址=(PC)+2+rel
不影響任何標(biāo)志位。
A寄存器判零條件轉(zhuǎn)移指令
2、條件轉(zhuǎn)移指令指令的實(shí)際編寫形式:“JZ/JNZ目標(biāo)地址標(biāo)號(hào)”。第71頁/共142頁72【例4-23】編寫程序,將從片外RAM地址2000H單元開始的數(shù)據(jù)連續(xù)傳送到片內(nèi)地址從30H單元開始的RAM中,直到出現(xiàn)0為止。
參考程序如下: ORL AUXR,#00000010B MOV DPTR,#2000H MOV R0,#30H LOOP:MOVX A,@DPTR MOV @R0,A INC R0
INC DPTR JNZ LOOP D7D6D5D4D3D2D1D0T0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRSEXTRAM=1時(shí),訪問片外擴(kuò)展RAM第72頁/共142頁73比較轉(zhuǎn)移指令
功能:比較兩個(gè)字節(jié)中的值,若不等,則轉(zhuǎn)移。 CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel CJNEA,direct,rel用第一操作數(shù)內(nèi)容減去第二操作數(shù)內(nèi)容,但差值不回存。轉(zhuǎn)移目的地址=(PC)+3+rel若前者小于后者,則(CY)=1,否則(CY)=0。第73頁/共142頁74【例4-24】設(shè)P1口的P1.1和P1.2兩引腳作為單片機(jī)與外部設(shè)備通信聯(lián)絡(luò)信號(hào)輸入端,當(dāng)P1.1為高且P1.2為低時(shí),單片機(jī)執(zhí)行與外設(shè)的通信任務(wù),否則等待。
參考程序如下:WAIT:MOV A,P1 ANL A,#06H CJNE A,#02H,WAIT
…… 第74頁/共142頁75該類指令可產(chǎn)生三分支程序:
即,相等分支;大于分支;小于分支。
A=B嗎?
出口YNA>B嗎?入口YN123第75頁/共142頁76減1不為零轉(zhuǎn)移指令
功能:本指令為雙功能指令,即減1操作和判斷轉(zhuǎn)移操作。 第一操作數(shù)內(nèi)容減1后,若差值不為零,則轉(zhuǎn)移;否 則順序執(zhí)行。
DJNZdirect,rel;direct←(direct)-1,若 (direct)≠0,則PC←(PC)+3+rel,否則順序執(zhí)行
DJNZRn,rel;Rn←(Rn)-1,若(Rn)≠0,則 PC←(PC)+2+rel,否則順序執(zhí)行指令的實(shí)際編寫形式:“DJNZRn/direct,目標(biāo)地址標(biāo)號(hào)”。第76頁/共142頁77【例4-25】統(tǒng)計(jì)片內(nèi)擴(kuò)展RAM中從地址為0700H單元開始的20個(gè)字節(jié)數(shù)據(jù)中0的個(gè)數(shù),并存于R7中。
參考程序如下:
ANL AUXR,#0FDH MOV DPTR,#0700H MOV R2,#20 MOV R7,#0 LOOP:MOVX A,@DPTR CJNE A,#0,NEXT INC R7 NEXT:INC DPTR DJNZ R2,LOOP第77頁/共142頁78
子程序調(diào)用指令和普通轉(zhuǎn)移指令相似,但二者有本質(zhì)區(qū)別:執(zhí)行普通轉(zhuǎn)移指令跳轉(zhuǎn)后不再返回,而執(zhí)行子程序調(diào)用指令跳轉(zhuǎn)執(zhí)行子程序后,再返回主程序繼續(xù)執(zhí)行。3、子程序調(diào)用及返回指令執(zhí)行該類指令不影響任何標(biāo)志位。為了實(shí)現(xiàn)返回:
執(zhí)行子程序調(diào)用指令時(shí),硬件電路自動(dòng)將PC中的斷點(diǎn)地址壓入堆棧保存,然后再轉(zhuǎn)向子程序入口地址,執(zhí)行子程序。在子程序的最后安排一條返回指令(RET),將斷點(diǎn)地址從堆棧中彈出到PC,即返回主程序繼續(xù)執(zhí)行。第78頁/共142頁79
LCALLaddr16;3字節(jié)指令
長(zhǎng)調(diào)用指令
;轉(zhuǎn)移范圍64KB,執(zhí)行中自動(dòng)完成如下過程:
(PC)←(PC)+3 SP←(SP)+1(SP)←(PC7~0),保護(hù)斷點(diǎn)地址低字節(jié);
SP←(SP)+1 (SP)←(PC15~8),保存斷點(diǎn)地址高字節(jié); PC←addr16,目的地址送PC,轉(zhuǎn)子程序。
第79頁/共142頁80
轉(zhuǎn)移范圍與(PC)+2在同一個(gè)2KB內(nèi)。執(zhí)行中機(jī)器自動(dòng)完成下列過程:(PC)←(PC)+2SP←(SP)+1(SP)←(PC7~0)SP←(SP)+1(SP)←(PC15~8)PC10~0
←addr10~0
絕對(duì)調(diào)用指令
ACALLaddr11;2字節(jié)指令在大程序中推薦使用LCALL指令。第80頁/共142頁81RET執(zhí)行過程:PC15~8←(SP)SP←(SP)-1PC7~0←(SP)SP←(SP)-1
子程序返回指令
【例4-26】利用DJNZ指令設(shè)計(jì)STC12C5A60S2系列單片機(jī)的循環(huán)延時(shí)子程序,已知時(shí)鐘頻率fosc=12MHz。分析:因?yàn)閒osc=12MHz,故該單片機(jī)的機(jī)器周期T為1/12μs。
第81頁/共142頁821)采用單循環(huán)方式延時(shí)10μs
調(diào)用該子程序的指令A(yù)CALLDELAY_10μs或LCALLDELAY_10μs需要6T時(shí)間。 △t=[6+(2+4×27+4)]/12=10μs 參考子程序如下:
DELAY_10μs: MOV R7,#27 ;2T DJNZ R7,$ ;4T RET ;4T
第82頁/共142頁832)采用雙重循環(huán)方式延時(shí)1ms分析:12×(250×4)/12=1000μs=1ms開始R7←#12R6←#250R6-1≠0?R7-1≠0?返回YYNN程序流程圖:第83頁/共142頁84
參考子程序如下:
DELAY_1ms: MOV R7,#12 ;2T
DL: MOV R6,#250 ;2T
DJNZ R6,$ ;4T
DJNZ R7,DL ;4T RET ;4T △t=[6+2+(2+4×250+4)×12+4]/12=1007μs≈1ms第84頁/共142頁853)采用三重循環(huán)方式延時(shí)1s分析:100
×120×(250×4)/12=1000000μs=1s程序流程圖:開始R7←#100R6←#120R5←#250R5-1≠0?R6-1≠0?R7-1≠0?返回YYYNNN第85頁/共142頁86
參考子程序如下:
DELAY_1s: MOV R7,#100 ;2T
DL2:MOV R6,#120 ;2T DL1:MOV R5,#250 ;2T DJNZ R5,$ ;4T DJNZ R6,DL1 ;4T
DJNZ R7,DL2 ;4T RET ;4T△t={6+2+[2+(2+4×250+4)×120+4]×100+4}/12=1006051μs≈1s第86頁/共142頁87【例4-27】設(shè)計(jì)一款節(jié)日燈,通過單片機(jī)的P1.0-P1.7控制8路由發(fā)光二極管組成的燈,輸出高電平點(diǎn)亮。先亮1燈(P1.0控制),每隔2秒閃爍1次,共閃爍10次,然后2燈閃10次,如此循環(huán)。
A←#01HR2←#10P1←AR2-1≠0?YN延時(shí)1秒P1←#00H延時(shí)1秒A循環(huán)左移一位初始化開始程序流程圖:
分析:P1.0引腳輸出高電平時(shí)1燈亮,輸出低電平時(shí)1燈滅,一亮一滅即為閃爍一次。亮的時(shí)間和滅的時(shí)間各持續(xù)1秒,共閃爍10次。其它燈同樣控制。第87頁/共142頁88
參考子程序如下:
ORG 0
MOVSP,#4FH MOV A,#01H LOOP1:MOV R2,#10
LOOP2:MOV P1,A LCALL DELAY_1s MOV P1,#00H LCALL DELAY_1s DJNZ R2,LOOP2 RL A LJMP LOOP1 DELAY_1s:…… ;1秒延時(shí)子程序(略)
RET END第88頁/共142頁89RETI執(zhí)行過程: PC15~8←(SP) SP←(SP)-1 PC7~0←(SP) SP←(SP)-1
中斷返回指令
;中斷服務(wù)子程序的最后一條指令。功能:返回主程序中斷的斷點(diǎn)位置,繼續(xù)執(zhí)行斷點(diǎn)位置后面的指令。
RETI指令的執(zhí)行過程與RET基本相同,只是RETI在執(zhí)行時(shí),不僅要恢復(fù)斷點(diǎn)地址,還要清除中斷響應(yīng)時(shí)所置位的優(yōu)先級(jí)觸發(fā)器,使得已申請(qǐng)的同級(jí)或低級(jí)中斷申請(qǐng)可以響應(yīng)。而RET指令只能恢復(fù)返回地址。第89頁/共142頁90;這是一條單字節(jié)單時(shí)鐘周期指令。;執(zhí)行時(shí),不作任何操作,僅將PC的內(nèi)容加1,使CPU指向下一條指令繼續(xù)執(zhí)行程序。;使用這條指令的目的僅僅是消耗這條指令執(zhí)行所需要的一個(gè)機(jī)器周期的時(shí)間。一般用于設(shè)計(jì)延時(shí)程序、拼湊精確延時(shí)時(shí)間及程序等待等場(chǎng)合。4.空操作指令NOP;PC←(PC)+1第90頁/共142頁914.3.5
位操作指令包括:位傳送指令、位控制轉(zhuǎn)移指令、位運(yùn)算指令。位操作由單片機(jī)內(nèi)布爾處理器來完成。除了使用進(jìn)位位CY的位指令外,均不影響其他標(biāo)志位。復(fù)習(xí):位地址的四種表示:1)使用直接位地址表示;如20H、30H、33H等;2)使用位寄存器名來表示;如C、OV、F0等;3)用字節(jié)寄存器名后加位數(shù)來表示;如PSW.4、P0.5、ACC.3等;4)字節(jié)地址加位數(shù)來表示;如20H.0、24H.4、2AH.7等。
第91頁/共142頁921.位傳送指令MOVC,bit ;CY←(bit);MOVbit,C ;bit←(CY)
注意:該類指令在使用時(shí)必須有進(jìn)位位CY參與,不能直接實(shí)現(xiàn)兩個(gè)一般位之間的傳送?!纠?-28】將片內(nèi)RAM中20H單元的第2位(位地址為02H)的狀態(tài),通過P1口的P1.3引腳輸出。
程序如下: MOV C,02H;CY←(02H) MOV P1.3,C;P1.3←(CY)第92頁/共142頁932.位邏輯操作指令位清0 CLR C;CY←0 CLR bit;bit←0位置1 SETB C;CY←1 SETB bit;bit←1位取反 CPL C;CY←(/CY) CPL bit;bit←(/bit)位與 ANL C,bit;CY←(CY)∧(bit) ANL C,/bit;CY←(CY)∧(/bit),第93頁/共142頁94位或 ORL C,bit;CY←(CY)∨(bit) ORL C,/bit;CY←(CY)∨(/bit),參考程序如下:
EXCL_OR:MOV C,X ANL C,/Y MOV Z,C MOV C,Y ANL C,/X ORL C,Z MOV Z,C RET【例4-29】寫出Z=X⊕Y的邏輯運(yùn)算程序,其中的X、Y、Z表示位變量。
分析:異或邏輯運(yùn)算可表示為:。
第94頁/共142頁95【例4-30】寫出實(shí)現(xiàn)如圖所示邏輯關(guān)系的運(yùn)算程序。
分析:上圖所示電路所表示的邏輯關(guān)系為參考程序如下: MOV C,P1.1 ORL C,P1.2
CPL C
ANL C,P1.0
MOV P1.3,C第95頁/共142頁963.位轉(zhuǎn)移指令以進(jìn)位位CY為條件的位轉(zhuǎn)移指令
JC rel;(CY)=1,則轉(zhuǎn)移,否則順序執(zhí)行。
JNC rel
;(CY)=0,則轉(zhuǎn)移,否則順序執(zhí)行。轉(zhuǎn)移目標(biāo)地址:PC←(PC)+2+rel上述兩條指令不影響標(biāo)志位,不改變CY的狀態(tài)。
以直接尋址位bit為條件的位轉(zhuǎn)移指令
JB
bit,rel;(bit)=1,則轉(zhuǎn)移,否則順序執(zhí)行。
JNB
bit,rel;(bit)=0,則轉(zhuǎn)移,否則順序執(zhí)行。
JBC
bit,rel;(bit)=1,則轉(zhuǎn)移,轉(zhuǎn)移前將該位清0;否則順序執(zhí)行。轉(zhuǎn)移目標(biāo)地址:PC←(PC)+3+rel第96頁/共142頁97【例4-31】比較片內(nèi)RAM的30H和40H單元中二個(gè)無符號(hào)數(shù)的大小,將較大的數(shù)存入20H單元,較小的數(shù)存入21H單元,若兩數(shù)相等,則將PSW寄存器中的F0位置1。
參考程序如下:
MOV A,30H CJNE A,40H,LOOP1
SETB F0 SJMP CONTINUELOOP1:JC LOOP2 MOV 20H,A
MOV 21H,40H
SJMP CONTINUELOOP2:MOV 20H,40H
MOV 21H,A CONTINUE:……第97頁/共142頁98【例4-32】試判斷片內(nèi)RAM30H單元中數(shù)的正負(fù),若為正數(shù),將P1.1置1,驅(qū)動(dòng)綠燈亮,P1.0清0,紅燈滅;若為負(fù)數(shù),則將P1.1清0,綠燈滅,P1.0置1,紅燈亮。
參考程序如下:
MOV A,30H JB ACC.7,LOOP1 SETB P1.1 CLR P1.0
SJMP LOOP2LOOP1: CLR P1.1 SETB P1.0 LOOP2:………第98頁/共142頁994.4匯編程序常用偽指令一、復(fù)習(xí)匯編程序功能:源程序(匯編指令程序)
翻譯(匯編)匯編指令與機(jī)器碼指令有一一對(duì)應(yīng)的關(guān)系。匯編編譯器(計(jì)算機(jī)系統(tǒng)軟件)完成匯編工作,將源程序翻譯成目標(biāo)程序。
目標(biāo)程序(機(jī)器碼指令程序)
偽指令是告訴編譯器如何匯編源程序的指令。偽指令既不控制機(jī)器的操作,也不能被匯編成機(jī)器代碼,只向編譯器提供相應(yīng)的編譯信息。
二、偽指令第99頁/共142頁100三、常用偽指令1.定義起始地址偽指令ORGORGaddr16
通常放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,用于規(guī)定目標(biāo)程序段或數(shù)據(jù)塊的起始地址。例如:
ORG3000HSTART:MOVA,30H
……該偽指令規(guī)定MOVA,30H指令從地址3000H單元開始存放,即標(biāo)號(hào)START所代表的地址為3000H。在一個(gè)匯編語言源程序中,可以使用多個(gè)ORG偽指令,以規(guī)定不同程序段的起始位置。但所規(guī)定的地址應(yīng)從小到大,不允許重疊。第100頁/共142頁1012、定義匯編結(jié)束偽指令END告訴匯編程序,對(duì)源程序的匯編到此結(jié)束。一個(gè)程序中只出現(xiàn)一次,在末尾。3、定義字節(jié)偽指令DB告訴匯編程序從指定的地址單元開始,定義若干字節(jié)存儲(chǔ)單元并賦初值。
格式:
[標(biāo)號(hào):]
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人舊車買賣合同范本
- 出口cip貿(mào)易合同范本
- 亮化耗材采購合同范本
- 半成品供貨合同范本
- 農(nóng)村環(huán)衛(wèi)勞務(wù)合同范本
- 化妝品oem合同范本
- 倉庫分揀合同范本
- 修路收費(fèi)合同范本
- 主管績(jī)效合同范本
- 供用水安裝合同范本
- 2024年全國(guó)職業(yè)院校技能大賽高職組(建筑裝飾數(shù)字化施工賽項(xiàng))備賽試題庫(含答案)
- 2024年單招職業(yè)技能測(cè)試題庫及參考答案(基礎(chǔ)題)
- 合肥市2024年中考理化生實(shí)驗(yàn)評(píng)分細(xì)則
- 2024年湖南學(xué)業(yè)水平考試地理真題及答案
- 機(jī)械供應(yīng)商發(fā)言稿
- 中考數(shù)學(xué)一輪復(fù)習(xí)提升練習(xí)第1章 數(shù)與式真題測(cè)試(基礎(chǔ)卷)(原卷版)
- 統(tǒng)編版(2024新教材)七年級(jí)上冊(cè)語文第一單元測(cè)試卷(含答案)
- 2025年中考英語復(fù)習(xí)熱點(diǎn)話題作文范文
- 二手房傭金協(xié)議
- 旅游服務(wù)質(zhì)量評(píng)價(jià)體系優(yōu)化策略
- 圍手術(shù)期護(hù)理管理制度
評(píng)論
0/150
提交評(píng)論