單片機與接口技術-5 51單片機的CISC指令集與匯編編程舉例_第1頁
單片機與接口技術-5 51單片機的CISC指令集與匯編編程舉例_第2頁
單片機與接口技術-5 51單片機的CISC指令集與匯編編程舉例_第3頁
單片機與接口技術-5 51單片機的CISC指令集與匯編編程舉例_第4頁
單片機與接口技術-5 51單片機的CISC指令集與匯編編程舉例_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

單片機與接口技術第5日指令系統(tǒng)與匯編語言(2)無條件轉(zhuǎn)移指令(4條)

4.控制轉(zhuǎn)移指令(17條)

1.絕對轉(zhuǎn)移指令AJMPaddr11;PC+2PC,addr11PC.10~PC.0···PCPC+1PCPCPC+2PCA10A9A800001A7A6A5A4A3A2A1A0操作碼(第一字節(jié))操作數(shù)(第二字節(jié))PC高5位(保持不變)PC低11位程序計數(shù)器PC注意:目標地址必須與它下面的指令存放地址在同一個2K字節(jié)區(qū)域內(nèi)。2.基寄存器加變址寄存器間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP@A+DPTR;((A))+(DPTR)PC功能:改變程序計數(shù)器PC中的內(nèi)容,控制程序執(zhí)行的流向,實現(xiàn)程序分支轉(zhuǎn)向。除了CJNE影響PSW的進位標志位Cy外,其余均不影響PSW的各標志位。

3.短(相對)轉(zhuǎn)移指令SJMPrel;PC+2PC,rel+PC

PC···PCPC+1PCPCPC+2PCPCPC+2+relPC4.長轉(zhuǎn)移指令LJMPaddr16;addr16PC0-PC15注意:轉(zhuǎn)向的目標地址只能在下條指令前128字節(jié)到后127字節(jié)注意:該指令可以轉(zhuǎn)移到64KB程序存儲器中的任意位置。注意:(1)使用轉(zhuǎn)移指令時,指令中的地址或偏移量均可采用標號,只有在執(zhí)行前才被匯編成實際的二進制地址。(2)指令的轉(zhuǎn)移范圍:在執(zhí)行當前轉(zhuǎn)移指令后的PC值的基礎上:

長轉(zhuǎn)移指令LJMP:64KB

絕對轉(zhuǎn)移指令AJMP:2KB

相對(短)轉(zhuǎn)移指令SJMP:-128~+127(用補碼表示)間接(散)轉(zhuǎn)移指令JMP:64KB(3)相對(短)轉(zhuǎn)移指令SJMPrel中地址偏移量的計算:

rel=轉(zhuǎn)移目標地址-轉(zhuǎn)移指令地址(當前PC值)-2(4)原地踏步(暫停當前的程序,并不是真的停機)的實現(xiàn)

SJMP$

或HERE:SJMPHERE(5)間接(散)轉(zhuǎn)移指令:JMP@A+DPTR常用于實現(xiàn)程序的分支轉(zhuǎn)移(散轉(zhuǎn))。DPTR為轉(zhuǎn)移目的的起始地址,A為轉(zhuǎn)移目的的偏移量。1.累加器為零/非零轉(zhuǎn)移指令(2條)2.減1非零轉(zhuǎn)移指令(2條)DJNZ

Rn,rel;(Rn)-1≠0則轉(zhuǎn)移

(PC)←(PC)+2+rel

(Rn)=0則順序執(zhí)行(PC)←(PC)+2DJNZ

direct,rel;(direct)-1≠0則轉(zhuǎn)移(PC)←(PC)+3+rel

(direct)=0則順序執(zhí)行(PC)←(PC)+3

在規(guī)定的條件滿足時進行程序轉(zhuǎn)移,否則程序往下順序執(zhí)行。JZ

rel;若(A)=0,則轉(zhuǎn)移

(PC)←(PC)+2+rel

若(A)≠0,則順序執(zhí)行(PC)←(PC)+2

JNZ

rel;若(A)≠0,則轉(zhuǎn)移(PC)←(PC)+2+rel

若(A)=0,則順序執(zhí)行(PC)←(PC)+2

條件轉(zhuǎn)移指令(8條)

3.比較轉(zhuǎn)移指令(4條)CJNE

A,direct,relCJNE

A,#data,relCJNERn,#data,relCJNE@Ri,#data,rel助記符格式相應操作機器周期CJNEA,#data,rel

若A≠#data,則PCPC+rel,否則順序執(zhí)行;若A<#data,則CY=1,否則CY=02CJNERn,#data,rel若Rn≠#data,則PCPC+rel,否則順序執(zhí)行;若Rn<#data,則CY=1,否則CY=02CJNE@Ri,#data,rel若(Ri)≠#data,則PCPC+rel,否則順序執(zhí)行;若(Ri)<#data,則CY=1,否則CY=02CJNEA,direct,rel若A≠(direct),則PCPC+rel,否則順序執(zhí)行;若A<(direct),則CY=1,否則CY=02功能:

把兩個操作數(shù)進行比較,以比較的結(jié)果作為條件來控制程序的轉(zhuǎn)移。

若(目的操作數(shù))=(源操作數(shù)),則程序繼續(xù)執(zhí)行,(PC)←(PC)+3若(目的操作數(shù))<(源操作數(shù)),則程序轉(zhuǎn)移,

(PC)←(PC)+rel+3,Cy←1若(目的操作數(shù))>(源操作數(shù)),則程序轉(zhuǎn)移,

(PC)←(PC)+rel+3,Cy←0注意:

比較轉(zhuǎn)移指令的比較是通過兩操作數(shù)的減法實現(xiàn)的,影響Cy標志位,不保存最后的差值,兩個操作數(shù)的內(nèi)容不變。條件轉(zhuǎn)移指令均為相對轉(zhuǎn)移指令,因此指令的轉(zhuǎn)移范圍十分有限。若要實現(xiàn)64KB范圍內(nèi)的轉(zhuǎn)移,則可以借助于一條長轉(zhuǎn)移指令的過渡來實現(xiàn)。5.子程序調(diào)用與返回指令(4條)

具有完整功能的程序段定義為子程序,供主程序調(diào)用。功能:供主程序在需要時調(diào)用。子程序可以在程序中反復多次使用,以簡化源程序的書寫。特點:子程序可以嵌套,有利于模塊化程序設計。

主程序與子程序之間的調(diào)用關系如下左圖所示,兩級子程序嵌套的示意圖如下右圖所示。

為了實現(xiàn)主程序?qū)ψ映绦虻囊淮瓮暾{(diào)用,必須有子程序調(diào)用指令和子程序返回指令。子程序調(diào)用指令在主程序中使用,而子程序返回指令則是子程序的最后一條指令。調(diào)用與返回指令是成對使用的。子程序調(diào)用指令:必須具有自動把程序計數(shù)器PC中的斷點地址保護到堆棧中,且將子程序入口地址自動送入程序計數(shù)器PC中的功能。子程序返回指令:必須具有自動把堆棧中的斷點地址恢復到程序計數(shù)器PC中的功能。注意:子程序調(diào)用時應注意入口參數(shù)設置,子程序返回時應注意出口參數(shù)的傳遞。1.絕對短調(diào)用指令

ACALLaddr11;(PC)←(PC)+2,

(SP)←(SP)+1,(SP)←(PC)7~0,(SP)←(SP)+1,

(SP)←(PC)15~8,(PC)10~0←addr11

其中:addr11為11位地址,實際編程時可以用符號地址。并且只能在2KB范圍以內(nèi)調(diào)用子程序。2.絕對長調(diào)用指令

LCALLaddr16;(PC)←(PC)+3,

(SP)←(SP)+1,(SP)←(PC)7~0,(SP)←(SP)+1,

(SP)←(PC)15~8,(PC)15~0←addr16

其中:addr16為16位地址,實際編程時可以用符號地址??梢栽?4KB范圍以內(nèi)調(diào)用子程序。3.子程序返回指令

RET;(PC)15~8←((SP)),(SP)←(SP)1,

(PC)7~0←((SP)),(SP)←(SP)14.中斷返回指令

RETI;(PC)15~8←((SP)),(SP)←(SP)1,

(PC)7~0←((SP)),(SP)←(SP)1注:中斷服務程序是一種特殊的子程序,它是在計算機響應中斷時,由硬件完成調(diào)用而進入相應的中斷服務程序。RETI指令與RET指令相仿,區(qū)別在于RET是從子程序返回,RETI是從中斷服務程序返回。無論是RET還是RETI都是子程序執(zhí)行的最后一條指令??詹僮髦噶頝OP(1條)

NOP;(PC)←(PC)+1功能:不執(zhí)行任何操作,消耗了一個機器周期,常用于軟件延時或在程序可靠性設計中用來穩(wěn)定程序。特點:NOP占據(jù)一個單元的存儲空間,除了使PC的內(nèi)容加1外,CPU不產(chǎn)生任何操作結(jié)果,只是消耗了一個機器周期。6.位操作指令(17條)

位操作(布爾變量操作):操作數(shù)不是字節(jié),而是字節(jié)中的某個位。每位的取值只能取0或1。指令的尋址范圍:片內(nèi)RAM位尋址區(qū)20H~2FH,SFR中的11個可位尋址特殊寄存器中的83個可尋址位。特點:以進位標志Cy作為位累加器,可以實現(xiàn)布爾變量的傳送、運算和控制轉(zhuǎn)移等功能。指令中的位地址的表達方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序號(如PSW.3)、字節(jié)地址.位序號(如0D0H.0)、位名稱方式(如F0)和用戶定義名稱等幾種方式。RAM位尋址區(qū)位地址映象7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D05單元地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07MSB

位地址

LSB7C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800特殊功能寄存器位地址映象D7F7E7CYD7—B7AFA7SM09F97TF18F87D6F6E6ACD6—B6—A6SM19E96TR18E86D5F5E5F0D5—B5—A5SM29D95TF08D85D4F4E4RS1D4PSBCB4ESACA4REN9C94TR08C84D3F3E3RS0D3PT1BBB3ET1ABA3TB89B93IE18B83D2F2E2OVD2PX1BAB2EX1AAA2RB89A92IT18A82D1F1E1F1D1PT0B9B1ET0A9A1TI9991IE08981D0F0E0PD0PX0B8B0EX0A8A0RI9890TF08880特殊功能寄存器BACCPSWIPP3IEP2SCONP1TCONP0位變量傳送指令(2條)

MOV

C,bitMOV

bit,C單元地址7E766E665E564E463E362E261E16067D756D655D554D453D352D251D150D052FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07

MSB位地址LSB7C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800MOVC,0EH0E(21H).6

CY助記符格式機器碼(B)相應操作指令說明機器周期MOVC,bit10100010CYbit位傳送指令,結(jié)果影響CY標志2MOVbit,C10010010bitCY位傳送指令,結(jié)果不影響PSW2位變量修改指令(6條)

CLRCCLRbitSETBCSETBbitCPLCCPLbit助記符格式機器碼(B)相應操作指令說明機器周期CLRC11000011CY0位清0指令,結(jié)果影響CY標志1CLRbit11000010bitbit0位清0指令,結(jié)果不影響PSW1SETBC11010011CY1位置1指令,結(jié)果影響CY標志1SETBbitbit1位置1指令,結(jié)果不影響PSW111010010bitCPLC10110011位取反指令2CPLbit10110010位取反指令,結(jié)果不影響CY2CYCYbitbit位變量邏輯操作指令(4條)

ANLC,bitANLC,/bitORLC,bitORL

C,/bit助記符格式機器碼(B)相應操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bit位與指令2ORL,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bit位或指令2CYCY∧bitCYCY∨bit例1:MOVC,00HANLC,P1.1;(20H).0CY;(C)^(P1.1)CY例2:MOVC,6EHORLC,/P1.1;(2DH).6CY;(C)∨(P1.1)CY位條件(控制)轉(zhuǎn)移指令(5條)

特點:以位的狀態(tài)作為實現(xiàn)程序轉(zhuǎn)移的判斷條件。1.以進位標志位Cy內(nèi)容為條件的轉(zhuǎn)移指令

JCrel;若(Cy)=1,則轉(zhuǎn)移(PC)←(PC)+2+rel,否則順序執(zhí)行JNCrel;若(Cy)=0,則轉(zhuǎn)移(PC)←(PC)+2+rel,否則順序執(zhí)行2.以位地址bit內(nèi)容為條件的轉(zhuǎn)移指令

JBbit,rel;若(bit)=1,則轉(zhuǎn)移(PC)←(PC)+3+rel,否則順序執(zhí)行

JNBbit,rel;若(bit)=0,則轉(zhuǎn)移(PC)←(PC)+3+rel,否則順序執(zhí)行

JBCbit,rel;若(bit)=1,則轉(zhuǎn)移(PC)←(PC)+3+rel,且(bit)←0,否則順序執(zhí)行7.偽指令匯編語言源程序由以下兩種指令構(gòu)成匯編語句(指令語句)偽指令(指示性語句)匯編語句的格式:

標號:

操作碼

操作數(shù) ;注釋3.

偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統(tǒng),不產(chǎn)生機器代碼。

常用的偽指令ORG定位目的程序的起始地址。格式: ORG表達式表達式必須為16位地址值。如:ORG0000H

DS

自此開始保留幾個字節(jié)不用。

如:

ORG 1000H TEMP:DS10

END匯編語言程序結(jié)束偽指令。一定放在程序末尾!EQU賦值偽指令。

格式:字符名稱EQU數(shù)值或匯編符號

例: AA EQU 30H

K1 EQU 40H MOVA,AA ;(30H)→A MOVA,K1 ;(40H)→ADB

從指定單元開始定義(存儲)若干個字節(jié)的數(shù)據(jù)或ASCII碼字符,常用于定義數(shù)據(jù)常數(shù)表。 格式:DB

字節(jié)常數(shù)或ASCII字符例: ORG 1000H DB 34H,0DEH,’A’,’B’

DB 0AH,0BH,20DW

從指定單元開始定義(存儲)若干個字的數(shù)據(jù)或ASCII碼字符。格式:DW 字常數(shù)或ASCII字符

例: ORG2000H DW 1234H,’B’ DW 0AH,20

BIT

位地址符號指令。把位地址賦于規(guī)定的字符名稱。 格式:字符名稱 BIT 位地址例: ABC BIT P1.1 QQ BIT P3.28.匯編語言程序設計舉例

在進行應用程序設計時,首先要確定算法,算法的優(yōu)劣很大程度上決定了程序的效率,另外還要盡可能畫出程序框圖,以便于分析程序流程。具體設計中還有主程序和子程序之分,主程序又稱為前臺程序,它通常是一個無窮循環(huán),子程序又稱為后臺程序,它可以是各種功能子程序,也可以是中斷服務子程序。在主程序中完成單片機系統(tǒng)的初始化,如內(nèi)存單元清零、開放中斷等。子程序一般完成某個具體任務,如數(shù)據(jù)采集、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論