版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2023/2/11第3章80C51單片機匯編語言概述單片機可執(zhí)行程序生成示例
3.1匯編指令格式與尋址方式
3.2匯編器的偽指令3.380C51的指令系統(tǒng)
3.4匯編語言程序示例
3.52023/2/123.1單片機可執(zhí)行程序生成示例
3.1.1編輯源文件
【例3-1】編寫程序,實現(xiàn)將30H至3FH共16個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個單元全都完成
SJMP$;踏步暫停
END2023/2/133.1.2匯編與連接匯編連接后得到目標文件。3.1.3可執(zhí)行程序的寫入:記錄長度|起始地址|記錄類型|指令代碼|校驗和2023/2/143.2匯編指令格式及尋址方式
3.2.1匯編語言的指令格式[標號:]指令助記符[操作數(shù)1,][操作數(shù)2,][操作數(shù)3,][;注釋]
標號是指令的符號地址,以非數(shù)字字符開頭;
助記符是指令功能的英文縮寫;
操作數(shù)是指令要操作的數(shù)據(jù)或數(shù)據(jù)的地址;
注釋字段可以增加程序的可讀性。運算符(表3.1):NOT、HIGH、LOW、MOD、SHL、SHR、AND、OR、XOR等。
例:17/5結(jié)果為3、17MOD5結(jié)果為2。
2023/2/15Rn(n=0~7)-當前工作寄存器組中的寄存器R0~R7之一Ri(i=0,1)-當前工作寄存器組中的寄存器R0或R1@----------間址寄存器前綴#data------8位立即數(shù)/#data16-----16位立即數(shù)direct------片內(nèi)低128個RAM單元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范圍:-128~+127bit---------片內(nèi)RAM位地址、SFR的位地址(×)------表示×地址單元或寄存器中的內(nèi)容/----------位操作數(shù)的取反操作前綴3.2.2匯編指令功能描述符號2023/2/16一、寄存器尋址尋址方式:尋找(源)操作數(shù)或指令轉(zhuǎn)移地址的方式僅介紹5種操作數(shù)尋址方式操作數(shù)在寄存器中尋址空間:R0~R7、A、B(AB形式)和DPTR特點:傳送和執(zhí)行速度快【例】若(R0)=30H,執(zhí)行MOVA,R0后,(A)=30H
3.2.3操作數(shù)尋址方式2023/2/17二、直接尋址操作碼后接字節(jié)存放的是操作數(shù)地址尋址空間:片內(nèi)RAM低128字節(jié)SFR(符號形式)另一類直接尋址是轉(zhuǎn)移目標地址的尋址。如: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對于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匯編器的偽指令
偽指令是匯編器能夠識別并對匯編過程進行某種指示的命令。
一、狀態(tài)控制偽指令ORG、END二、符號定義偽指令EQU、BIT例:LENEQU10三、存儲空間初始化偽指令DB,DW例:DB-1,2
四、其他偽指令見表3.3所示。2023/2/1123.4.1數(shù)據(jù)傳送類指令(29條)一般不影響標志寄存器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堆棧是一片存儲區(qū),遵循“后進先出”原則,棧頂由SP指示。80C51的堆棧設(shè)在片內(nèi)RAM低端的128個單元,向上生長。PUSHdirect;SP←(SP)+1,(SP)←(direct)出棧指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆棧用于子程序調(diào)用時保護返回地址,或者用于保護子程序調(diào)用之前的某些重要數(shù)據(jù)(即保護現(xiàn)場),還可以用于數(shù)據(jù)交換。
數(shù)據(jù)交換指令XCH、XCHD和SWAP數(shù)據(jù)交換屬于同時進行的雙向傳送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尋址時,高8位地址由P2口提供
以DPTR內(nèi)容為基址讀ROM中常數(shù)表項指令MOVCROM中可以存放程序代碼,還經(jīng)常存放常數(shù)表
MOVCA,@A+DPTR;A←((A)+(DPTR))
以PC內(nèi)容為基址MOVCA,@A+PC;A←((A)+(PC))常數(shù)表存放約束小,稱為遠程查表指令。占用DPTR
常數(shù)表存放約束大,稱為近程查表指令。不占用DPTR
2023/2/1193.4.2算數(shù)運算類指令(24條)算數(shù)運算結(jié)果要影響PSW中標志位
CY為1,無符號數(shù)(字節(jié))加減發(fā)生進位或借位OV為1,有符號數(shù)(字節(jié))加減發(fā)生溢出錯誤
AC為1,十進制數(shù)(BCD碼)加法的結(jié)果應(yīng)調(diào)整
P為1,存于累加器A中操作結(jié)果的“1”的個數(shù)為奇數(shù)
標志位意義標志位與相關(guān)指令影響指令標志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2023/2/120算數(shù)運算影響標志位示例有2個參與相加的機器數(shù),一個是84H,另一個是49H。試分析運算過程及其對狀態(tài)標志的影響。結(jié)果:CY為0;AC為0;OV為0;P為1
1、對于無符號數(shù):第一個數(shù)為132(84H),第二個數(shù)為73(49H),相加后,由于CY為0,所以結(jié)果為CDH(即205)。運算結(jié)果分析:2、對于有符號數(shù):第一個數(shù)為-124(84H),第二個數(shù)為73(49H),相加后,由于OV為0,沒有溢出。所以結(jié)果為-33H(CDH為-33H的補碼)。3、對于BCD數(shù):第一個數(shù)為84(84H),第二個數(shù)為49(49H),相加后,中間結(jié)果為CDH,加66H進行調(diào)整,結(jié)果:CY=1,數(shù)值33H(即十進制的133)。結(jié)論:同樣的兩個機器數(shù),編程人員對其不同的數(shù)據(jù)屬性約定,會產(chǎn)生不同的運算結(jié)果解釋。所以,編程人員在程序設(shè)計的開始,就應(yīng)該首先確定參與運算的數(shù)據(jù)是采用有符號數(shù)還是采用無符號數(shù)或是采用BCD數(shù)。
2023/2/123一、加法不帶進位加法ADDA,#55H;A←(A)+#55HADDA,55H;A←(A)+(55H)ADDA,R7;A←(A)+(R7)ADDA,@R0;A←(A)+((R0))帶進位加法(這組指令方便了多字節(jié)加法的實現(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十進制調(diào)整DAA;調(diào)整A的內(nèi)容為正確的BCD碼兩個壓縮的BCD碼按二進制相加后,必須經(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標志。其余指令都不影響標志位的狀態(tài)。DECA;A←(A)-1DEC55H;(55H)←(55H)-1DECR7;R7←(R7)-1DEC@R0;(R0)←((R0))-12023/2/127三、乘法和除法乘法指令:
MULAB;A與B相乘無符號結(jié)果:B中為積的高8位,A中為積的低8位。
CY總是被清0;OV=1表示積大于FFH
除法指令:
DIVAB;A除以B
無符號結(jié)果:A中為商的整數(shù)部分,B中為余數(shù)
CY總是被清0;OV=1表示除數(shù)為02023/2/1283.4.3邏輯運算與循環(huán)類指令(24條)一、邏輯與邏輯:與、或、異或、清0和取反循環(huán):左、右移,帶進位位左、右移與操作常用于對某些不關(guān)心位進行“清0”,同時“保留”另一些關(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二、邏輯或或操作常用于對某些關(guā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三、邏輯異或異或操作常用于對某些關(guā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;帶進位右循環(huán)RLA;左循環(huán)RLCA;帶進位左循環(huán)2023/2/1323.4.4控制轉(zhuǎn)移類指令(17條)一、無條件轉(zhuǎn)移短跳轉(zhuǎn)AJMPaddr11;2k范圍跳轉(zhuǎn)
長跳轉(zhuǎn)LJMPaddr16;64k范圍跳轉(zhuǎn)
相對轉(zhuǎn)移SJMPrel
;+127~-128范圍跳轉(zhuǎn)散轉(zhuǎn)移JMP@A+DPTR;完成多條判跳指令的功能
2023/2/133【例】功能:當(A)=00H時,程序?qū)⑥D(zhuǎn)到ROUT0處執(zhí)行;當(A)=02H時,程序?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個周期、一個字節(jié)
2023/2/1363.4.5位操作類指令(17條)位操作是以位為單位進行的各種操作。位操作指令中的位地址有4種表示形式:直接地址(如,0D5H);點操作符(如,0D0H.5、PSW.5等);位名稱(如,F(xiàn)0);偽指令定義(如,MYFLAGBITF0)。以上幾種形式表示的都是PSW中的位5。位操作指令中,位累加器要用“C”表示(注:而CY與具體的直接位地址D7H對應(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三、位邏輯運算位邏輯與位邏輯或位取反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單元存放一個十進制數(shù)據(jù)十位的ASCII碼,22H單元存放該數(shù)據(jù)個位的ASCII碼。編寫程序?qū)⒃摂?shù)據(jù)轉(zhuǎn)換成壓縮BCD碼存放在20H單元。ORG0040HSTART:MOVA,21H;取十位ASCII碼ANLA,#0FH;保留低半字節(jié)SWAPA;移至高半字節(jié)MOV20H,A;存于20H單元MOVA,22H;取個位ASCII碼ANLA,#0FH;保留低半字節(jié)ORL20H,A;合并到結(jié)果單元SJMP$END3.5.2分支程序(單分支、雙分支、多分支)【例3-3】設(shè)變量x以補碼的形式存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當x大于0時,y=x;當x=0時,y=20H;當x小于0時,y=x+5。編制程序,根據(jù)x的大小求y并送回原單元。
ORG0040HSTART:MOVA,30H;取x至累加器
JZNEXT;x=0,轉(zhuǎn)NEXTANLA,#80H;否,保留符號位
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)移序號)轉(zhuǎn)向相應(yīng)的處理程序。設(shè)R7內(nèi)容為0~4,對應(yīng)的處理程序入口地址分別為PP0~PP4。
START:MOVR7,#3;以轉(zhuǎn)移序號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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安定區(qū)2024年甘肅定西安定區(qū)水務(wù)局下屬事業(yè)單位選調(diào)工作人員筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 國家事業(yè)單位招聘2024課程教材研究所招聘擬錄用人員筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 國家事業(yè)單位招聘2024中國科學技術(shù)交流中心招聘應(yīng)屆畢業(yè)生筆試及考試安排筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 團風縣2024湖北黃崗市團風縣事業(yè)單位選調(diào)工作人員10人筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 吉安市2024江西吉安市直行政事業(yè)單位編外工作人員招聘13人(四十三)筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 南京市2024江蘇南京工業(yè)大學教學科研崗招聘181人筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 2025年中國科學院深海科學與工程研究所招聘深海資源開發(fā)研究室招聘自動化工程師備考題庫及一套答案詳解
- 航天科工微電子系統(tǒng)研究院有限公司2026年校園招聘5人備考題庫完整參考答案詳解
- 2025年波密縣公安局公開招聘臨聘人員備考題庫及完整答案詳解一套
- 中國氣象局在京單位2026年度招聘崗位備考題庫及參考答案詳解1套
- NB-T20319-2014壓水堆核電廠技術(shù)規(guī)格書編制準則
- 起重機維護保養(yǎng)記錄表
- DB4409-T 48-2023 三叉苦種植技術(shù)規(guī)范
- 10千伏及以下線損管理題庫附答案
- 關(guān)于食品專業(yè)實習報告(5篇)
- 蛋糕店充值卡合同范本
- 消防系統(tǒng)癱瘓應(yīng)急處置方案
- 《美國和巴西》復(fù)習課
- 模切機個人工作總結(jié)
- 尿道損傷教學查房
- 北師大版九年級中考數(shù)學模擬試卷(含答案)
評論
0/150
提交評論