版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023/2/11第3章80C51單片機(jī)匯編語言概述單片機(jī)可執(zhí)行程序生成示例
3.1匯編指令格式與尋址方式
3.2匯編器的偽指令3.380C51的指令系統(tǒng)
3.4匯編語言程序示例
3.52023/2/123.1單片機(jī)可執(zhí)行程序生成示例
3.1.1編輯源文件
【例3-1】編寫程序,實(shí)現(xiàn)將30H至3FH共16個(gè)RAM單元初始化為“55H”的功能。
ORG0000HMAIN:MOVR7,#16;R7存放單元數(shù)量16MOVR0,#30H;R0作為地址寄存器,初值為30HMOVA,#55H;數(shù)據(jù)55H放入累加器中LOOP:MOV@R0,A;累加器內(nèi)容送入R0指向的單元中
INCR0;調(diào)整地址指向下一單元
DJNZR7,LOOP;循環(huán)直至16個(gè)單元全都完成
SJMP$;踏步暫停
END2023/2/133.1.2匯編與連接匯編連接后得到目標(biāo)文件。3.1.3可執(zhí)行程序的寫入:記錄長度|起始地址|記錄類型|指令代碼|校驗(yàn)和2023/2/143.2匯編指令格式及尋址方式
3.2.1匯編語言的指令格式[標(biāo)號(hào):]指令助記符[操作數(shù)1,][操作數(shù)2,][操作數(shù)3,][;注釋]
標(biāo)號(hào)是指令的符號(hào)地址,以非數(shù)字字符開頭;
助記符是指令功能的英文縮寫;
操作數(shù)是指令要操作的數(shù)據(jù)或數(shù)據(jù)的地址;
注釋字段可以增加程序的可讀性。運(yùn)算符(表3.1):NOT、HIGH、LOW、MOD、SHL、SHR、AND、OR、XOR等。
例:17/5結(jié)果為3、17MOD5結(jié)果為2。
2023/2/15Rn(n=0~7)-當(dāng)前工作寄存器組中的寄存器R0~R7之一Ri(i=0,1)-當(dāng)前工作寄存器組中的寄存器R0或R1@----------間址寄存器前綴#data------8位立即數(shù)/#data16-----16位立即數(shù)direct------片內(nèi)低128個(gè)RAM單元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范圍:-128~+127bit---------片內(nèi)RAM位地址、SFR的位地址(×)------表示×地址單元或寄存器中的內(nèi)容/----------位操作數(shù)的取反操作前綴3.2.2匯編指令功能描述符號(hào)2023/2/16一、寄存器尋址尋址方式:尋找(源)操作數(shù)或指令轉(zhuǎn)移地址的方式僅介紹5種操作數(shù)尋址方式操作數(shù)在寄存器中尋址空間:R0~R7、A、B(AB形式)和DPTR特點(diǎn):傳送和執(zhí)行速度快【例】若(R0)=30H,執(zhí)行MOVA,R0后,(A)=30H
3.2.3操作數(shù)尋址方式2023/2/17二、直接尋址操作碼后接字節(jié)存放的是操作數(shù)地址尋址空間:片內(nèi)RAM低128字節(jié)SFR(符號(hào)形式)另一類直接尋址是轉(zhuǎn)移目標(biāo)地址的尋址。如:LJMPADDR16【例】若(50H)=3AH,
執(zhí)行MOVA,50H后,(A)=3AH
2023/2/18三、寄存器間接尋址寄存器中的內(nèi)容是操作數(shù)的地址尋址空間:片內(nèi)RAM(@Ri、SP)片外RAM(@Ri、@DPTR)【例】若(R0)=30H,(30H)=5AH
執(zhí)行MOVA,@R0后,(A)=5AH
指令助記符:片內(nèi):MOV片外:MOVX2023/2/19四、立即尋址操作數(shù)在指令編碼中尋址空間:ROM對(duì)于MOVDPTR,#2100H指令,立即數(shù)高8位“21H”裝入DPH
【例】執(zhí)行MOVA,#50H
結(jié)果:(A)=50H
2023/2/110五、變址尋址操作數(shù)地址:基地址+偏移量尋址空間:ROM變址尋址還用于跳轉(zhuǎn)指令,如JMP@A+DPTR
【例】(A)=0FH
(DPTR)=2400H執(zhí)行MOVCA,@A+DPTR”后結(jié)果:(A)=88H
2023/2/1113.3匯編器的偽指令
偽指令是匯編器能夠識(shí)別并對(duì)匯編過程進(jìn)行某種指示的命令。
一、狀態(tài)控制偽指令ORG、END二、符號(hào)定義偽指令EQU、BIT例:LENEQU10三、存儲(chǔ)空間初始化偽指令DB,DW例:DB-1,2
四、其他偽指令見表3.3所示。2023/2/1123.4.1數(shù)據(jù)傳送類指令(29條)一般不影響標(biāo)志寄存器PSW的狀態(tài)。傳送類指令有兩大類3.480C51的指令系統(tǒng)
一般傳送(MOV)特殊傳送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP
2023/2/113一、一般傳送指令16位傳送(僅1條)8位傳送MOVDPTR,#2100H;DPTR←#2100H
以A為目的,例如:MOVA,#55H;A←#55HMOVA,55H;A←(55H)MOVA,R0;A←(R0)MOVA,@R0;A←((R0))
以Rn為目的,例如:MOVR7,A;R7←(A)MOVR7,#55H;R7←#55HMOVR7,55H;R7←(55H)2023/2/114
以direct為目的,例如:MOV30H,A;(30H)←(A)MOV30H,#55H;(30H)←#55HMOV30H,55H;(30H)←(55H)MOV30H,R0;(30H)←(R0)MOV30H,@R0;(30H)←((R0))
以@Ri為目的,例如:MOV@R0,A;(R0)←AMOV@R0,#55H;(R0)←#55HMOV@R0,55H;(R0)←(55H)2023/2/115二、特殊傳送指令
入棧指令PUSH堆棧操作指令PUSH和POP堆棧是一片存儲(chǔ)區(qū),遵循“后進(jìn)先出”原則,棧頂由SP指示。80C51的堆棧設(shè)在片內(nèi)RAM低端的128個(gè)單元,向上生長。PUSHdirect;SP←(SP)+1,(SP)←(direct)出棧指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆棧用于子程序調(diào)用時(shí)保護(hù)返回地址,或者用于保護(hù)子程序調(diào)用之前的某些重要數(shù)據(jù)(即保護(hù)現(xiàn)場),還可以用于數(shù)據(jù)交換。
數(shù)據(jù)交換指令XCH、XCHD和SWAP數(shù)據(jù)交換屬于同時(shí)進(jìn)行的雙向傳送XCHA,55H;(A)XCHA,R7;(A)XCHA,@R0;(A)((R0))(55H)
字節(jié)交換,例如:(R7)
半字節(jié)交換,例如:XCHDA,@R0;SWAPA;間址操作數(shù)的低半字節(jié)與A的低半字節(jié)互換。累加器的高低4位互換2023/2/117
讀片外RAM片外RAM(或接口)傳送指令MOVX片外RAM中經(jīng)常存放數(shù)據(jù)采集與處理的中間數(shù)據(jù)
MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri
;A←((Ri))
寫片外RAMMOVX@DPTR,A;((DPTR))←AMOVX@Ri,A;((Ri))←A注意:用@Ri尋址時(shí),高8位地址由P2口提供
以DPTR內(nèi)容為基址讀ROM中常數(shù)表項(xiàng)指令MOVCROM中可以存放程序代碼,還經(jīng)常存放常數(shù)表
MOVCA,@A+DPTR;A←((A)+(DPTR))
以PC內(nèi)容為基址MOVCA,@A+PC;A←((A)+(PC))常數(shù)表存放約束小,稱為遠(yuǎn)程查表指令。占用DPTR
常數(shù)表存放約束大,稱為近程查表指令。不占用DPTR
2023/2/1193.4.2算數(shù)運(yùn)算類指令(24條)算數(shù)運(yùn)算結(jié)果要影響PSW中標(biāo)志位
CY為1,無符號(hào)數(shù)(字節(jié))加減發(fā)生進(jìn)位或借位OV為1,有符號(hào)數(shù)(字節(jié))加減發(fā)生溢出錯(cuò)誤
AC為1,十進(jìn)制數(shù)(BCD碼)加法的結(jié)果應(yīng)調(diào)整
P為1,存于累加器A中操作結(jié)果的“1”的個(gè)數(shù)為奇數(shù)
標(biāo)志位意義標(biāo)志位與相關(guān)指令影響指令標(biāo)志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2023/2/120算數(shù)運(yùn)算影響標(biāo)志位示例有2個(gè)參與相加的機(jī)器數(shù),一個(gè)是84H,另一個(gè)是49H。試分析運(yùn)算過程及其對(duì)狀態(tài)標(biāo)志的影響。結(jié)果:CY為0;AC為0;OV為0;P為1
1、對(duì)于無符號(hào)數(shù):第一個(gè)數(shù)為132(84H),第二個(gè)數(shù)為73(49H),相加后,由于CY為0,所以結(jié)果為CDH(即205)。運(yùn)算結(jié)果分析:2、對(duì)于有符號(hào)數(shù):第一個(gè)數(shù)為-124(84H),第二個(gè)數(shù)為73(49H),相加后,由于OV為0,沒有溢出。所以結(jié)果為-33H(CDH為-33H的補(bǔ)碼)。3、對(duì)于BCD數(shù):第一個(gè)數(shù)為84(84H),第二個(gè)數(shù)為49(49H),相加后,中間結(jié)果為CDH,加66H進(jìn)行調(diào)整,結(jié)果:CY=1,數(shù)值33H(即十進(jìn)制的133)。結(jié)論:同樣的兩個(gè)機(jī)器數(shù),編程人員對(duì)其不同的數(shù)據(jù)屬性約定,會(huì)產(chǎn)生不同的運(yùn)算結(jié)果解釋。所以,編程人員在程序設(shè)計(jì)的開始,就應(yīng)該首先確定參與運(yùn)算的數(shù)據(jù)是采用有符號(hào)數(shù)還是采用無符號(hào)數(shù)或是采用BCD數(shù)。
2023/2/123一、加法不帶進(jìn)位加法ADDA,#55H;A←(A)+#55HADDA,55H;A←(A)+(55H)ADDA,R7;A←(A)+(R7)ADDA,@R0;A←(A)+((R0))帶進(jìn)位加法(這組指令方便了多字節(jié)加法的實(shí)現(xiàn))
ADDCA,#55H;A←(A)+#55H+(CY)ADDCA,55H;A←(A)+(55H)+(CY)ADDCA,R7;A←(A)+(R7)+(CY)ADDCA,@R0;A←(A)+((R0))+(CY)2023/2/124加1INCA;A←(A)+1INC55H;(55H)←(55H)+1INCR7;R7←(R7)+1INC@R0;(R0)←((R0))+1INCDPTR;DPTR←(DPTR)+1十進(jìn)制調(diào)整DAA;調(diào)整A的內(nèi)容為正確的BCD碼兩個(gè)壓縮的BCD碼按二進(jìn)制相加后,必須經(jīng)過調(diào)整方能得到正確的和。
2023/2/125二、減法帶借位減法用此組指令完成不帶借位的減法,只需先清CY為0即可
CY為1,表示D7位需借位
AC為1,表示D3位需借位OV為1,表示“D6有借位D7無借位”或“D7有借位D6無借位”SUBBA,#55H;A←(A)-#55H-(CY)SUBBA,55H;A←(A)-(55H)-(CY)SUBBA,R7;A←(A)-(R7)-(CY)SUBBA,@R0;A←(A)-((R0))-(CY)2023/2/126減1這組指令僅DECA
影響P標(biāo)志。其余指令都不影響標(biāo)志位的狀態(tài)。DECA;A←(A)-1DEC55H;(55H)←(55H)-1DECR7;R7←(R7)-1DEC@R0;(R0)←((R0))-12023/2/127三、乘法和除法乘法指令:
MULAB;A與B相乘無符號(hào)結(jié)果:B中為積的高8位,A中為積的低8位。
CY總是被清0;OV=1表示積大于FFH
除法指令:
DIVAB;A除以B
無符號(hào)結(jié)果:A中為商的整數(shù)部分,B中為余數(shù)
CY總是被清0;OV=1表示除數(shù)為02023/2/1283.4.3邏輯運(yùn)算與循環(huán)類指令(24條)一、邏輯與邏輯:與、或、異或、清0和取反循環(huán):左、右移,帶進(jìn)位位左、右移與操作常用于對(duì)某些不關(guān)心位進(jìn)行“清0”,同時(shí)“保留”另一些關(guān)心位
ANL55H,#55H;(55H)←(55H)∧#55HANL55H,A;(55H)←(55H)∧(A)ANLA,#55H;A←(A)∧#55HANLA,55H;A←(A)∧(55H)ANLA,R7;A←(A)∧(R7)ANLA,@R0;A←(A)∧((R0))2023/2/129二、邏輯或或操作常用于對(duì)某些關(guān)心位進(jìn)行“置1”,不關(guān)心位保持不變
ORL55H,#55H;(55H)←(55H)∨#55HORL55H,A;(55H)←(55H)∨(A)ORLA,#55H;A←(A)∨#55HORLA,55H;A←(A)∨(55H)ORLA,R7;A←(A)∨(R7)ORLA,@R0;A←(A)∨((R0))2023/2/130三、邏輯異或異或操作常用于對(duì)某些關(guān)心位進(jìn)行“取反”,不關(guān)心位保持不變
XRL55H,#55H;(55H)←(55H)⊕#55HXRL55H,A;(55H)←(55H)⊕(A)XRLA,#55H;A←(A)⊕#55HXRLA,55H;A←(A)⊕(55H)XRLA,R7;A←(A)⊕(R7)XRLA,@R0;A←(A)⊕((R0))2023/2/131五、累加器循環(huán)移位四、累加器清0和取反CLRA;A←0CPLA;A的內(nèi)容取反RRA;右循環(huán)RRCA;帶進(jìn)位右循環(huán)RLA;左循環(huán)RLCA;帶進(jìn)位左循環(huán)2023/2/1323.4.4控制轉(zhuǎn)移類指令(17條)一、無條件轉(zhuǎn)移短跳轉(zhuǎn)AJMPaddr11;2k范圍跳轉(zhuǎn)
長跳轉(zhuǎn)LJMPaddr16;64k范圍跳轉(zhuǎn)
相對(duì)轉(zhuǎn)移SJMPrel
;+127~-128范圍跳轉(zhuǎn)散轉(zhuǎn)移JMP@A+DPTR;完成多條判跳指令的功能
2023/2/133【例】功能:當(dāng)(A)=00H時(shí),程序?qū)⑥D(zhuǎn)到ROUT0處執(zhí)行;當(dāng)(A)=02H時(shí),程序?qū)⑥D(zhuǎn)到ROUT1處執(zhí)行;……。
MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT32023/2/134二、條件轉(zhuǎn)移累加器判0轉(zhuǎn)移比較不等轉(zhuǎn)移JZrel
;若(A)=0,則PC←(PC)+2+relJNZrel
;若(A)≠0,則PC←(PC)+2+relCJNEA,55H,rel
;CJNEA,#55H,rel
;CJNER7,#55H,rel
;CJNE@R0,#55H,rel;減1不為0轉(zhuǎn)移DJNZR7,rel
;DJNZ55H,rel
;2023/2/135調(diào)用三、調(diào)用與返回ACALLaddr11;2k范圍調(diào)用LCALLaddr16;64k范圍調(diào)用返回RET;子程序返回RETI;中斷子程序返回RETI具有清除內(nèi)部相應(yīng)的中斷狀態(tài)觸發(fā)器(以保證正確的中斷邏輯)的功能。
四、空操作NOP;PC←(PC)+1,占1個(gè)周期、一個(gè)字節(jié)
2023/2/1363.4.5位操作類指令(17條)位操作是以位為單位進(jìn)行的各種操作。位操作指令中的位地址有4種表示形式:直接地址(如,0D5H);點(diǎn)操作符(如,0D0H.5、PSW.5等);位名稱(如,F(xiàn)0);偽指令定義(如,MYFLAGBITF0)。以上幾種形式表示的都是PSW中的位5。位操作指令中,位累加器要用“C”表示(注:而CY與具體的直接位地址D7H對(duì)應(yīng))。試比較:A與ACC的關(guān)系?2023/2/137一、位傳送MOV20H,C;(20H)←(CY)MOVC,20H;CY←(20H)二、位狀態(tài)設(shè)置位清0位置位CLRC;CY←0CLR00H;(00H)←0SETBC;CY←1SETB00H;(00H)←12023/2/138三、位邏輯運(yùn)算位邏輯與位邏輯或位取反ANLC,00H;CY←(CY)∧(00H)ANLC,/00H;CY←(CY)∧(00H)取反ORLC,00H;CY←(CY)∨(00H)ORLC,/00H;CY←(CY)∨(00H)取反CPLC;CY←(CY)取反CPLC,00H;(00H)←(00H)取反2023/2/139判CY轉(zhuǎn)移判bit轉(zhuǎn)移四、位判跳(條件轉(zhuǎn)移);若(CY)=1,PC←(PC)+2+rel,否則順次執(zhí)行。;若(CY)=0,PC←(PC)+2+rel,否則順次執(zhí)行。;(00H)=1,PC←(PC)+3+rel,否則順次執(zhí)行。;(00H)=1,PC←(PC)+3+rel,00H←0,否則順次執(zhí)行;(00H)=0,PC←(PC)+3+rel,否則順次執(zhí)行
3.5匯編語言程序示例
3.5.1順序程序(無分支、無循環(huán))【例3-2】片內(nèi)RAM的21H單元存放一個(gè)十進(jìn)制數(shù)據(jù)十位的ASCII碼,22H單元存放該數(shù)據(jù)個(gè)位的ASCII碼。編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元。ORG0040HSTART:MOVA,21H;取十位ASCII碼ANLA,#0FH;保留低半字節(jié)SWAPA;移至高半字節(jié)MOV20H,A;存于20H單元MOVA,22H;取個(gè)位ASCII碼ANLA,#0FH;保留低半字節(jié)ORL20H,A;合并到結(jié)果單元SJMP$END3.5.2分支程序(單分支、雙分支、多分支)【例3-3】設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x大于0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x小于0時(shí),y=x+5。編制程序,根據(jù)x的大小求y并送回原單元。
ORG0040HSTART:MOVA,30H;取x至累加器
JZNEXT;x=0,轉(zhuǎn)NEXTANLA,#80H;否,保留符號(hào)位
JZDONE;x>0,轉(zhuǎn)結(jié)束
MOVA,#05H;x<0處理
ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND【例3-4】根據(jù)R7的內(nèi)容x(轉(zhuǎn)移序號(hào))轉(zhuǎn)向相應(yīng)的處理程序。設(shè)R7內(nèi)容為0~4,對(duì)應(yīng)的處理程序入口地址分別為PP0~PP4。
START:MOVR7,#3;以轉(zhuǎn)移序號(hào)3為例
ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址
MOVA,R7
ADDA,R7;乘2,調(diào)整偏移量
MOVR3,AMOVCA,@A+DPTR;取地址高字節(jié),暫存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字節(jié)
MOVDPL,A;處理程序入口地址低8位送DPLMOVDPH,R3;處理程序入口地址高8位送DPHCLRA
JMP@A+DPTR
TAB:DWPP0DWPP1DWPP2
DWPP3DWPP4PP0:M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 心血管科護(hù)士關(guān)愛心血管疾病患者工作總結(jié)
- 資源節(jié)約與環(huán)保措施計(jì)劃
- IT部門加強(qiáng)網(wǎng)絡(luò)安全防護(hù)以保障信息安全
- 餐飲業(yè)保安工作總結(jié)
- 廣東省深圳市寶安區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期英語期末試卷
- 室外廣告設(shè)計(jì)師的視覺沖擊力與傳播效果
- 2023-2024學(xué)年上海市閔行區(qū)高二(下)期中地理試卷
- 2024年陜西省寶雞市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2023年河北省承德市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年山東省萊蕪市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 車身穩(wěn)定系統(tǒng)課件
- 2023-2024學(xué)年廣東省東莞市七年級(jí)上期末數(shù)學(xué)試卷附答案
- 檢察機(jī)關(guān)的體制與組織機(jī)構(gòu)課件
- 山東省濰坊市濰城區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末語文試題
- 2024年1月四川高中學(xué)業(yè)水平合格考物理試卷試題真題
- 雅詩蘭黛集團(tuán)企業(yè)培訓(xùn)方案
- 30題產(chǎn)業(yè)研究員崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 農(nóng)村電商公共服務(wù)體系的建設(shè)與完善研究-以XX村為例
- 復(fù)合機(jī)器人行業(yè)分析
- 建立進(jìn)出校園安全控制與管理的方案
- 新課標(biāo)《普通高中化學(xué)課程標(biāo)準(zhǔn)(2022年版)》
評(píng)論
0/150
提交評(píng)論