




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
秒脈沖發(fā)生器電路秒脈沖發(fā)生器電路學習目標通過本項目的學習,能夠闡述尋址方式的種類和功能;能夠理解匯編指令,包括數(shù)據(jù)傳送指令、算術運算指令、邏輯操作指令、移位類指令、跳轉指令、轉移和循環(huán)控制指令、相關堆棧指令及其他各種指令;熟悉偽指令概念及用途。能夠根據(jù)上述匯編指令編寫簡單的匯編程序。學習目標通過本項目的學習,能夠闡述尋址方式的種類和功能;能夠學習要求能夠闡述尋址方式的種類和功能能夠理解匯編指令熟悉偽指令概念及用途能夠根據(jù)上述匯編指令編寫簡單的匯編程序學習要求能夠闡述尋址方式的種類和功能項目導入
由飛思卡爾MC9S08GB60單片機組成最小應用系統(tǒng),產生一個秒脈沖信號,控制發(fā)光二極管(LED)每一秒亮一次。即設定控制LED發(fā)光二極管每1s亮一次,秒脈沖的周期T=1s,若每隔0.5s將PTA0端口取反,即可以在PTA0端口輸出1Hz的方波。如圖1-1所示。項目導入
由飛思卡爾MC9S08GB60單片機組成最小應用系項目分析
1.用最少的元器件構成一個單片機的最小應用系統(tǒng)。2.LED發(fā)光二極管的“定時亮滅”控制,可以利用延時方法來實現(xiàn),現(xiàn)常用的有兩種方法:一是用定時器中斷來實現(xiàn)(定時器的硬件和寄存器知識將在項目8介紹),二是用指令循環(huán)來實現(xiàn)。在系統(tǒng)控制內容允許的情況下,可以采用第二種方法。在動手實現(xiàn)利用單片機的最小應用系統(tǒng)控制LED發(fā)光二極管的定時亮滅(即秒脈沖發(fā)生器)時,先讓我們學習飛思卡爾單片機的尋址方式和匯編指令系統(tǒng)的相關知識。項目分析
1.用最少的元器件構成一個單片機的最小應用系統(tǒng)。項目分析在動手實現(xiàn)利用單片機的最小應用系統(tǒng)控制LED發(fā)光二極管的定時亮滅(即秒脈沖發(fā)生器)時,先讓我們學習飛思卡爾單片機的尋址方式和匯編指令系統(tǒng)的相關知識。項目分析在動手實現(xiàn)利用單片機的最小應用系統(tǒng)控制LED發(fā)光二極相關知識
3.1尋址方式3.2匯編指令系統(tǒng)及應用舉例
3.3偽指令3.4基本程序設計范例相關知識
3.1尋址方式3.1尋址方式
指令的一個重要組成部分是操作數(shù),由它指定參與運算的數(shù)據(jù)或數(shù)據(jù)所在的存儲器單元或寄存器或I/O接口的地址。指令中所規(guī)定的尋找操作數(shù)的方式就是尋址方式。每一種計算都具有多種尋址方式,尋址方式越多,單片機的功能就越強,靈活性就越大。尋址方式的多少及尋址功能是反映指令系統(tǒng)優(yōu)劣的主要因素之一。要掌握指令系統(tǒng)也可從尋址方式入手。3.1尋址方式
指令的一個重要組成部分是操作數(shù),由它指定3.1尋址方式HCS08系列單片機采用的尋址方式有7種:隱含尋址方式(INH)、相對尋址方式(REL)、立即尋址方式(#IMM)、直接尋址方式(DIR)、擴展尋址方式(EXT)、變址尋址方式(間接尋址方式)。每種尋址方式分述如下:3.1尋址方式HCS08系列單片機采用的尋址方式有7種:3.1尋址方式3.1.1隱含尋址方式(INH)隱含尋址方式(Inherentaddressingmode,INH)是當CPU知道要完成指令的所有信息而源碼中卻沒有提供地址時使用的一種尋址方式。在隱含尋址方式中,執(zhí)行指令的所有信息均在操作碼中,CPU不需要從寄存器、存儲器中取操作數(shù),操作數(shù)隱含在累加器、變址寄存器或狀態(tài)標志寄存器中。具有隱含尋址方式的指令全為單字節(jié)指令,匯編后生成的操作碼在程序存儲器中只占用一個字節(jié)的空間。3.1尋址方式3.1.1隱含尋址方式(INH)3.1尋址方式例如:INCA ;累加器A中的內容加1INCX ;變址寄存器X中的內容加1DECA ;累加器A中的內容減1SEI ;中斷屏蔽位I置1CLI ;中斷屏蔽位I清03.1尋址方式例如:3.1尋址方式3.1.2相對尋址方式(REL)相對尋址方式(Relativeaddressingmode,REL)是將程序計數(shù)器PC中的當前內容與指令第二個字節(jié)所給出的數(shù)相加,其和為跳轉指令的偏移地址。在這種尋址方式中,CPU首先測試給定的條件,如果滿足條件,則發(fā)生相對轉移,即把當前程序計數(shù)器PC的值加上指令碼所占字節(jié)數(shù),再加上指令操作碼后的8位有符號數(shù),使程序轉移到PC指定的新地址處,否則CPU執(zhí)行該條指令的下一條指令。具有相對尋址方式的指令為2字節(jié)指令,一個字節(jié)為操作碼,另一個字節(jié)為相對偏移量。3.1尋址方式3.1.2相對尋址方式(REL)3.1尋址方式例如:BRA rel ;無條件轉移到標號為rel的指令處執(zhí)行程序BSR Init ;調用子程序Init3.1尋址方式例如:3.1.3立即尋址方式(IMM)隱含尋址方式(Immediateaddressingmode,IMM)是單片機的指令系統(tǒng)查找數(shù)據(jù)的一種信息定位方式,在一定程度上可以把它和高級語言的常數(shù)對應起來。字面上的解釋,是指數(shù)據(jù)本身直接出現(xiàn)在指令中,也就是說數(shù)據(jù)本身是整個指令編碼的一部分。具有立即尋址方式的指令主要用于訪問常數(shù),多為2字節(jié)指令,第一個字節(jié)為操作碼,后面字節(jié)為立即數(shù),立即數(shù)前面的符號前綴“#”說明操作碼后面的是操作數(shù)值而不是操作數(shù)地址。3.1.3立即尋址方式(IMM)3.1尋址方式例如:MOV#$100,PTAD ;給一個寄存器PTAD賦初值,這里的100是直接出現(xiàn)在指令中的操作數(shù),它就是立即數(shù),它的尋址方式就是立即尋址方式.如果查看它轉換的對應的機器語言代碼,會發(fā)現(xiàn)100是指令編碼的一部分ADC #$30 ;將累加器A中的內容與十六進制立即數(shù)30進行帶進位加運算,結果存放至累加器A中立即操作數(shù)的長度是根據(jù)指令隱含的CPU寄存器大小來定義。編譯器會自動縮位或擴展操作數(shù)去匹配指令需要的長度。例如:LDA #$08 ;將立即操作數(shù)08傳送給累加器A,立即操作數(shù)的長度為8位操作數(shù)STA PTAD ;將累加器A內容傳送給寄存器PTAD,立即操作數(shù)的長度為8位操作數(shù)LDHX #$012A ;將立即操作數(shù)012A 傳送給變址寄存器H:X,立即操作數(shù)的長度為16位操作數(shù)STHX VOLM ;將變址寄存器H:X傳送給變量VOLM:VOLM+1,操作數(shù)的長度為16位操作數(shù)3.1尋址方式例如:3.1尋址方式3.1.4直接尋址方式(DIR)在直接尋址方式(Directaddressingmode,DIR)中,操作數(shù)的有效地址包含于操作碼后的一個字節(jié)中。由于操作數(shù)的有效地址公為一個字節(jié),因此直接尋址方式只能對存儲器0頁的256B空間($0000~$00FF)進行操作。0頁存儲區(qū)含有I/O控制和狀態(tài)寄存器,還有部分用戶數(shù)據(jù)RAM區(qū)。一般將經常要訪問的數(shù)據(jù)放在0頁的用戶數(shù)據(jù)RAM中,以節(jié)省程序空間,提高數(shù)據(jù)訪問速度。具有直接尋址方式的指令為2字節(jié)指令,指令的第一個字節(jié)是操作碼,第地個字節(jié)為操作數(shù)的有效地址。3.1尋址方式3.1.4直接尋址方式(DIR)3.1尋址方式例如:LDA #$00 ;將$0000單元中的內容送入累加器A中STA $04 ;將累加器A中的內容傳送給$0004單元地址中3.1尋址方式例如:3.1尋址方式3.1.5擴展尋址方式(EXT)在擴展尋址方式(Extendedaddressingmod,EXT)中,操作數(shù)的有效地址包含于操作碼后的兩個字節(jié)中。由于操作數(shù)的有效地址僅為2字節(jié),因此,采用擴展尋址方式的指令可以訪問64KB內的任何存儲器空間。具有該尋址方式的指令一般為3字節(jié)指令,指令的第一個字節(jié)是操作碼,第二、三個字節(jié)是操作數(shù)的有效地址。3.1尋址方式3.1.5擴展尋址方式(EXT)3.1尋址方式例如:LDA $0A0D ;將$0A0D單元中的內容送入累加器A中STA $0809 ;將累加器A中的內容送入$0809單元中3.1尋址方式例如:3.1尋址方式3.1.6變址尋址方式變址尋址方式有時被稱為間接尋址方式,是以CPU變址寄存器H:X作為參考地址加上偏移地址,其結果作為目的地址來存取操作數(shù)的尋址方式。有些情況下變址寄存器中的值會自動增加用來存取目的操作數(shù)。變址尋址方式的重要特征是:操作數(shù)地址取決于當前CPU變址寄存器的內容而不是常數(shù)地址。變址尋址方式可分為以下幾種類型:3.1尋址方式3.1.6變址尋址方式3.1尋址方式(1)無偏移量變址方式(IX)(2)無偏移量變址、變址加1尋址方式(IX+)(3)8位偏移量變址方式(IX1)(4)8位偏移量變址、變址加1尋址方式(IX1+)(5)16位偏移量變址方式(IX2)3.1尋址方式(1)無偏移量變址方式(IX)3.1尋址方式例如:LDA $0110,X ;將以H:X寄存器中的值加上$0110所得的值為地址的存儲單元的內容送至累加器A中AND $1030,X ;將以H:X寄存器中的值加上$1030所得的值為地址的存儲單元的內容與累加器A中的值進行邏輯運算,結果存至累加器
A中3.1尋址方式例如:3.1尋址方式3.1.7堆棧尋址方式在堆棧尋址方式或,操作數(shù)的有效地址由16位堆棧指針SP中的內容和跟在操作碼后的無符號偏移量決定,根據(jù)偏移量的多少,堆棧尋址又分為8位偏移量堆棧尋址和16位偏移量堆棧尋址兩種尋址方式。用堆棧方式尋址的指令功能與對應變址尋址指令相似,只是與堆棧指針SP有關的指令要求預先訪問一個字節(jié),因此它要比對應的變址指令多用一個時鐘周期。3.1尋址方式3.1.7堆棧尋址方式3.1尋址方式(1)8位偏移量堆棧尋址方式(SP1)例如:LDA $20,SP ;將以SP中的值加上$20所得的和為地址的存儲單元中的值送至累加器A中INC$20,SP ;將以SP中的值加上$20所得的和為地址的存儲單元中的值加13.1尋址方式(1)8位偏移量堆棧尋址方式(SP1)3.1尋址方式(2)16位偏移量堆棧尋址方式(SP2)在這種變址方式中,無符號的16位偏移量與堆棧指針(SP)相加,得到要訪問的操作數(shù)地址。該尋址方式用于訪問棧中深度超過255的數(shù)據(jù)。如果偏移量小于或等于255,編譯器將自動使用更有效率的SP1尋址方式。3.1尋址方式(2)16位偏移量堆棧尋址方式(SP2)3.1尋址方式例如:LDA $0110,SP ;將以SP中的值加上$0110所得的和為地址的存儲單元中的值送至累加器A中3.1尋址方式例如:3.2匯編指令系統(tǒng)及應用舉例
HCS08系列單片機指令系統(tǒng)有數(shù)據(jù)傳送指令、算術運算指令、邏輯操作指令、移位類指令、跳轉指令、轉移和循環(huán)控制指令、相關堆棧指令及其他各種指令。本節(jié)將按照類型分別介紹各條指令的功能、指令代碼及其使用。3.2匯編指令系統(tǒng)及應用舉例
HCS08系列單片機指令系統(tǒng)有3.2匯編指令系統(tǒng)及應用舉例3.2.1數(shù)據(jù)傳送指令這組指令主要用于CPU寄存器、立即數(shù)、內部存儲器單元之間的數(shù)據(jù)傳送。在讀入、存儲和數(shù)據(jù)傳送時指令會根據(jù)數(shù)據(jù)的值自動更新條件碼,這使得BEQ、BNE、BPL和BMI等指令不需要運行特殊的測試或比較指令就可以立即進行條件轉移。3.2匯編指令系統(tǒng)及應用舉例3.2.1數(shù)據(jù)傳送指令3.2匯編指令系統(tǒng)及應用舉例1.LDA指令將存儲器的數(shù)值送到累加器A中2.LDHX指令將存儲器的數(shù)值傳送到變址寄存器H:X3.LDX指令將存儲器的數(shù)值送到寄存器X(變址寄存器)4.STA指令將累加器A的內容傳送到存儲器中3.2匯編指令系統(tǒng)及應用舉例1.LDA指令3.2匯編指令系統(tǒng)及應用舉例5.STHX指令將變址寄存器H:X的內容送到目的地址6.STX指令將變址寄存器X內容送到目的地址7.MOV指令將存儲器內容送到目的地址8.TAX指令將累加器A的內容送到變址寄存器X中3.2匯編指令系統(tǒng)及應用舉例5.STHX指令3.2匯編指令系統(tǒng)及應用舉例9.TXA指令將變址寄存器X的內容送到累加器中
10.TAP指令將累加器A的內容送到寄存器CCR中
11.TPA指令 將寄存器CCR的內容送到累加器A中
12.NSA指令 半字節(jié)交換累加器A的數(shù)值3.2匯編指令系統(tǒng)及應用舉例9.TXA指令3.2匯編指令系統(tǒng)及應用舉例13.BSET指令將存儲器opr8a中的第n位置1
14.BCLR指令將存儲器opr8a中的第n位清03.2匯編指令系統(tǒng)及應用舉例13.BSET指令3.2匯編指令系統(tǒng)及應用舉例例如:LDA#$55;將十六進制立即數(shù)55送到累加器A中LDA$01;將$01單元中的內容送入累加器A中(尋址范圍:256B)LDHX#%010111111010;將二進制立即數(shù)送入變址寄存器H:X中LDHX$20;將$20單元的內容送入變址寄存器H,將$20+1單元的內容送入變址寄存器X中3.2匯編指令系統(tǒng)及應用舉例例如:3.2匯編指令系統(tǒng)及應用舉例LDXPTAPE;將PTAPE單元的內容送入變址寄存器X中LDX#$5A;將十六進制數(shù)5A送入變址寄存器X中STA PTAD;將累加器A的內容送至PTAD寄存器中STAX;將累加器A的內容送至X寄存器中3.2匯編指令系統(tǒng)及應用舉例LDXPTAPE;將3.2匯編指令系統(tǒng)及應用舉例STXPTEDD;將變址寄存器X內容送到PTEDD寄存器STX DATA;將變址寄存器X內容送到變量DATAMOV#$03,PTAD;將十六制立即數(shù)03傳送給寄存器PTAD中
MOV#$0F,PTADD;將十六制立即數(shù)0F傳送給寄存器PTADD中3.2匯編指令系統(tǒng)及應用舉例STXPTEDD;將變3.2匯編指令系統(tǒng)及應用舉例LDA#$55;將十六進制立即數(shù)55送到累加器A中
TAX;將累加器內容55送到變址寄存器X中LDA#$55;將十六進制立即數(shù)55送到累加器A中
TAP;將累加器內容送到寄存器CCR中3.2匯編指令系統(tǒng)及應用舉例LDA#$55;將十六3.2匯編指令系統(tǒng)及應用舉例BSET1,PTAD;將寄存器PTAD的第1位置1BSET7,PTCDD;將寄存器PTCDD的第7位置1BSETTE,SCI1C2;將寄存器SCI1C2的第TE位置1BCLR2,PTCD;將寄存器PTCD的第2位清03.2匯編指令系統(tǒng)及應用舉例BSET1,PTAD3.2匯編指令系統(tǒng)及應用舉例3.2.2算術運算指令算術運算指令包含了傳統(tǒng)的加、減、乘和除操作,還包含常用的指令,如加一、減一、清零、求補(2進制補碼)、比較、測試和為處理BCD碼的十進制調整指令。比較指令實際上就是減操作,影響CCR狀態(tài)位但結果不返回到CPU寄存器。測試指令影響著N和Z位,但是不影響被測試的數(shù)據(jù)。3.2匯編指令系統(tǒng)及應用舉例3.2.2算術運算指令3.2匯編指令系統(tǒng)及應用舉例1.ADC指令帶進位的加法運算2.ADD指令不帶進位的加法運算3.AIX指令變址寄存器H:X的內容加上立即數(shù)再送入變址寄存器中,AIX指令不影響CCR位4.SUB指令將累加器A中的數(shù)據(jù)減去存儲器中的數(shù)據(jù),然后將結果存儲到累加器A中。對于這個指令,進位狀態(tài)位是借位指示器,3.2匯編指令系統(tǒng)及應用舉例1.ADC指令3.2匯編指令系統(tǒng)及應用舉例5.SBC指令將累加器A中的數(shù)據(jù)減去由前一次操作所影響的借位,再減去存儲器中的數(shù)據(jù),然后將結果存儲回寄存器A中6.MUL指令將寄存器X中無符號8位2進制數(shù)與累加器A中的無符號的8位2進制數(shù)相乘,然后存儲16位結果到X:A中,高8位的結果存儲在X中,低8位存儲在A中。這種情況下不可能發(fā)生進位(或者是溢出),其結果將總是適合X:A的大小。因此進行這個操作后C將被清零。3.2匯編指令系統(tǒng)及應用舉例5.SBC指令3.2匯編指令系統(tǒng)及應用舉例7.DIV指令將H:A中16位無符號數(shù)值除以X中無符號的8位數(shù)值,所得的結果(8位)存儲到累加器A中,余數(shù)存儲到H寄存器中。在計算中,X中的除數(shù)數(shù)值無變化,因此它能夠在隨后的操作中繼續(xù)被使用。如果商為0則Z標志被置1。如果商大于255就會有溢出發(fā)生,發(fā)生溢出或除數(shù)為0時C位將被置1。3.2匯編指令系統(tǒng)及應用舉例7.DIV指令3.2匯編指令系統(tǒng)及應用舉例8.INC指令操作數(shù)自加9.DEC指令操作數(shù)自減110.CLR指令操作數(shù)清零11.NEG指令取補指令執(zhí)行了二進制數(shù)的補碼操作,求補指令等同于將一個8位有符號數(shù)乘以-1。功能上等同于將寄存器A、X或者存儲器中的數(shù)據(jù)全部取反,然后加一。3.2匯編指令系統(tǒng)及應用舉例8.INC指令3.2匯編指令系統(tǒng)及應用舉例12.CMP指令CMP指令是將累加器A的內容與存儲器的內容進行比較,所得的結果會影響CCR寄存器的位,但其結果不會存儲回累加器A中,因此累加器A和存儲器的數(shù)值在運算后是不發(fā)生變化的。注意,比較指令是比較累加器A、變址寄存器X(或H:X)的內容與存儲器中的內容。3.2匯編指令系統(tǒng)及應用舉例12.CMP指令3.2匯編指令系統(tǒng)及應用舉例13.CPHX指令在CPHX指令執(zhí)行時,存儲單元M指向存儲單元位置的首地址,變址寄存器H與存儲器位置M相對應,變址寄存器X與存儲器位置M+1相對應。CPHX執(zhí)行一個16位減法指令時,存儲結果不返回H:X中。3.2匯編指令系統(tǒng)及應用舉例13.CPHX指令3.2匯編指令系統(tǒng)及應用舉例14.CPX指令將X變址寄存器和存儲單元相比較,運算后CCR寄存器相應的位會發(fā)生變化,但操作數(shù)不改變15.TST指令該指令用于測試累加器A、變址寄存器X、存儲單元的值是否小于等于0,它執(zhí)行減0的操作,但不改變原操作數(shù)的值,只是根據(jù)結果改變CCR寄存器的N、Z標志位。3.2匯編指令系統(tǒng)及應用舉例14.CPX指令3.2匯編指令系統(tǒng)及應用舉例16.DAA指令該指令用于BCD碼的調整。在BCD碼數(shù)值中,用十六進制數(shù)表示十進制數(shù)值0~9。當兩個8位的BCD數(shù)值相加時,CPU實際上執(zhí)行的是普通的二進制加法,對于BCD碼,這個運算結果可能不再是一個有效的BCD碼了。DAA指令根據(jù)加法(ADD或ADC)指令運算所改變的標志位(如H和C標志位)對結果進行修正,使其結果成為有效的BCD數(shù)值,而且還修正了C標志位的內容,使其正確的表示使用BCD加法后的結果。在早期的單片機系統(tǒng)中,由于還沒出現(xiàn)該條指令,要完成這些操作是非常復雜的過程,而現(xiàn)在,DAA指令則能很簡單的完成這個操作。3.2匯編指令系統(tǒng)及應用舉例16.DAA指令3.2匯編指令系統(tǒng)及應用舉例;------CMP指令例子
LDA#$0FCMP#$3FMOV#$0E,VOLMCMPVOLM
LDHX#$0005CMP,X
結果是?????
3.2匯編指令系統(tǒng)及應用舉例;------CMP指令例子3.2匯編指令系統(tǒng)及應用舉例;------NEGA指令例子
LDA#$02NEGANEGVOLMNEGXLDHX#$0021NEG,X
結果是?????3.2匯編指令系統(tǒng)及應用舉例;------NEGA指令例子3.2匯編指令系統(tǒng)及應用舉例
;------CPHX指令例子
LDHX#$0080STA,XINCXSTA,XLDHX#$0201CPHXVOLM結果是?????
3.2匯編指令系統(tǒng)及應用舉例3.2匯編指令系統(tǒng)及應用舉例;------CPX指令例子
LDX#$05CPX#$04
;------TST指令例子
LDA#$01TSTALDX#$00TSTX結果是?????3.2匯編指令系統(tǒng)及應用舉例;------CPX指令例子3.2匯編指令系統(tǒng)及應用舉例3.2.3邏輯操作指令這組指令執(zhí)行8位操作數(shù)的并行布爾運算,包括與操作、或操作、異或操作、取反操作和位測試操作。取反指令是將指定的寄存器或者存儲器中的操作數(shù)按位取反,其他邏輯指令均包括了兩個操作數(shù),一個是累加器A,另一個是存在存儲器中。立即尋址、直接尋址、擴展尋址或變址尋址等尋址方式都可應用該組指令來訪問操作數(shù)。注意,累加器A的每個位都可執(zhí)行與、或和異或操作,操作的結果返回累加器A中,覆蓋原來的操作數(shù)。3.2匯編指令系統(tǒng)及應用舉例3.2.3邏輯操作指令3.2匯編指令系統(tǒng)及應用舉例1.AND指令該指令進行邏輯與操作,將累加器A中的內容與相應的操作數(shù)進行按位與操作,再將操作結果存入累加器A中,同時把CCR寄存器中的標志位V清為0,影響N、Z標志位,對其他標志位無影響3.2匯編指令系統(tǒng)及應用舉例1.AND指令3.2匯編指令系統(tǒng)及應用舉例2.ORA指令該指令進行邏輯或操作,將累加器A中的內容與相應的操作數(shù)進行按位或操作,再將操作結果存入累加器A中,結果對CCR寄存器的影響同AND指令一樣。
3.EOR指令該指令進行邏輯異或操作,將累加器A中的內容與相應的操作數(shù)進行按位異或操作,再將操作結果存入累加器A中,結果對CCR寄存器的影響同AND指令一樣。3.2匯編指令系統(tǒng)及應用舉例2.ORA指令3.2匯編指令系統(tǒng)及應用舉例4.COM指令該指令進行取反操作,該指令簡單地轉換操作數(shù)的每個位,但與求補指令是不同的,取反指令執(zhí)行的是一條算術運算指令,即等效于與一個-1相乘。3.2匯編指令系統(tǒng)及應用舉例4.COM指令3.2匯編指令系統(tǒng)及應用舉例5.BIT指令該指令進行位測試,將相應存儲地址中的操作數(shù)與累加器A的每個位進行“與操作”,但是結果不存儲在累加器A中。在執(zhí)行位測試指令后,根據(jù)“與操作”的結果來置位或清零CCR條件碼寄存器的N和Z位,以實現(xiàn)條件跳轉。如果使用“掩碼”方法進行編程,則掩碼中的每個對應位將被測試,執(zhí)行BIT位測試指令后,若測試位均不是1,則Z位被置位。3.2匯編指令系統(tǒng)及應用舉例5.BIT指令3.2匯編指令系統(tǒng)及應用舉例;------DAA指令例子
LDA#$0EADD#$06DAA
;------AND指令例子
LDA#$5BAND#$0F
LDHX#$0080AND,X
3.2匯編指令系統(tǒng)及應用舉例;------DAA指令例子3.2匯編指令系統(tǒng)及應用舉例;------ORA指令例子
LDA#$0CORA#$0A
;------EOR指令例子
LDA#$5AEOR#$03STAVOLM
;------COM指令例子
LDA#$05COMA
3.2匯編指令系統(tǒng)及應用舉例;------ORA指令例子3.2匯編指令系統(tǒng)及應用舉例;------BIT指令例子
LDA#$02MOV#$01,VOLMBITVOLM
3.2匯編指令系統(tǒng)及應用舉例;------BIT指令例子3.2匯編指令系統(tǒng)及應用舉例3.2.4移位指令移位指令的操作是在9位的空間上進行的,這個空間是由8位的累加器A、變址寄存器X或者存儲單元和CCR寄存器中的C位組成。移位指令的操作包括邏輯左移、邏輯右移、算術左移、算術右移、循環(huán)左移和循環(huán)右移等操作3.2匯編指令系統(tǒng)及應用舉例3.2.4移位指令3.2匯編指令系統(tǒng)及應用舉例
1.LSL指令該指令進行邏輯左移操作,就是簡單地把0移位到有效值的最低位b0,有效值的最高位b7移到進位C中3.2匯編指令系統(tǒng)及應用舉例1.LSL指令3.2匯編指令系統(tǒng)及應用舉例2.LSR指令該指令進行邏輯右移,就是簡單地把0移位到有效值的最高位b7,有效值的最低位移b0到進位C中3.2匯編指令系統(tǒng)及應用舉例2.LSR指令3.2匯編指令系統(tǒng)及應用舉例3.ASL指令該指令進行算術左移(和LSL相似),類似于乘2操作,在功能上與LSL指令沒有較大的區(qū)別3.2匯編指令系統(tǒng)及應用舉例3.ASL指令3.2匯編指令系統(tǒng)及應用舉例4.ASR指令該指令進行算術右移,類似于除2操作。算術右移(ASR)指令復制最初的最高有效位(b7)返回到b7,以保護操作數(shù)符號3.2匯編指令系統(tǒng)及應用舉例4.ASR指令3.2匯編指令系統(tǒng)及應用舉例5.ROL指令該指令進行循環(huán)左移,就是簡單地將有效值的最高位b7移位到進位C,進位C原來的值移位到有效值的最低位b0,其余各位向左移一位3.2匯編指令系統(tǒng)及應用舉例5.ROL指令3.2匯編指令系統(tǒng)及應用舉例6.ROR指令該指令進行循環(huán)右移,就是簡單地將有效值的最低位b0移位到進位C,進位C原來的值移位到有效值的最高位b7,其余各位向右移一位3.2匯編指令系統(tǒng)及應用舉例6.ROR指令3.2匯編指令系統(tǒng)及應用舉例;------LSL指令例子
LDA#$01LSLALSLA
;------LSR指令例子
LDA#$80LSRALSRA3.2匯編指令系統(tǒng)及應用舉例;------LSL指令例子3.2匯編指令系統(tǒng)及應用舉例3.2.5轉移類指令這組指令分類有條件轉移類指令和無條件轉移類指令。有條件轉移指令在條件滿足時轉移到程序計數(shù)器PC指定的相應地址處執(zhí)行,否則順序執(zhí)行程序。有條件轉移類指令又可分為累加器A比較相等轉移指令、減1不為轉移指令、CCR轉移指令、位測試轉移指令等。無條件轉移指令(也稱跳轉指令)則無條件限制,直接轉移到程序計數(shù)器PC指定的地址處執(zhí)行程序,例如,BRA、JMP指令。另外,循環(huán)控制指令也屬于有條件轉移類指令的范疇。3.2匯編指令系統(tǒng)及應用舉例3.2.5轉移類指令3.2匯編指令系統(tǒng)及應用舉例有條件轉移指令和循環(huán)控制指令都使用了相對尋址方式,有條件地轉移到一個與轉移相關的位置。CCR寄存器根據(jù)條件分支或循環(huán)控制指令,決定執(zhí)行新的地址還是繼續(xù)順序執(zhí)行下一條指令。注意,BRA指令是個特殊的指令,因為無條件轉移總是會發(fā)生;BRN指令也一樣,因為無條件轉移從不發(fā)生;BIL和BIH指令也是很特別的,是因為它們決定是否需要轉移,查看IRQ引腳的狀態(tài)而不是CCR寄存器中的條件位。3.2匯編指令系統(tǒng)及應用舉例有條件轉移指令和循環(huán)控制指令都使3.2匯編指令系統(tǒng)及應用舉例1.JMP指令JMP指令是將其后面所接的操作數(shù)為地址值送至16位程序計數(shù)器PC,使程序跳至該指令所指定的地址處執(zhí)行,該指令可以實現(xiàn)64KB($0000~$FFFF)空間任一有效地址的跳轉。它具有5種尋址方式,而且不影響CCR寄存器的標志位。3.2匯編指令系統(tǒng)及應用舉例1.JMP指令3.2匯編指令系統(tǒng)及應用舉例2.BRA指令該指令是無條件轉移指令的其中一種,只有相對尋址方式(REL),實現(xiàn)無條件相對轉移,由于是相對尋址,本身又為2字節(jié)指令,故其無條件相對轉移的范圍為相對于存放BRA機器指令碼地址的-126~+129字節(jié)空間。3.2匯編指令系統(tǒng)及應用舉例2.BRA指令3.2匯編指令系統(tǒng)及應用舉例3.BRN指令該指令無條件不轉移,即是不具有任何轉移功能,它只是消耗3個總線周期的空操作。3.2匯編指令系統(tǒng)及應用舉例3.BRN指令3.2匯編指令系統(tǒng)及應用舉例4.BEQ指令該指令主要用于表格查找子程序的快速跳轉,它檢測累加器A中的值是否與某一立即數(shù)或存儲單元的值相等,若相等則CC寄存器的Z標志位被置為1,如果(Z)=1則使程序轉移到指令所指定的地址處執(zhí)行,否則順序執(zhí)行下一指令,它不改變任何原操作數(shù)的值。3.2匯編指令系統(tǒng)及應用舉例4.BEQ指令3.2匯編指令系統(tǒng)及應用舉例5.BNE指令該指令的功能恰好與BEQ指令相反,若累加器A中的值與某一立即數(shù)或存儲單元的值不相等則轉移指令。3.2匯編指令系統(tǒng)及應用舉例5.BNE指令3.2匯編指令系統(tǒng)及應用舉例6.BCC指令該指令根據(jù)CC寄存器的進位標志位C的情況決定是否轉移,若進位為0則轉移,否則順序執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例6.BCC指令3.2匯編指令系統(tǒng)及應用舉例7.BCS指令該指令的功能恰好與BCC指令相反,若進位為1則轉移指令,否則順序執(zhí)行程序。
8.BPL指令該指令根據(jù)CC寄存器的負標志位N的情況決定是否轉移,若負標志位N=0則轉移,否則順序執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例7.BCS指令3.2匯編指令系統(tǒng)及應用舉例9.BMI指令該指令的功能恰好與BPL指令相反,若負標志位N=1則轉移,否則順序執(zhí)行程序。10.BIL指令該指令根據(jù)IRQ引腳電平的高低來決定是否進行轉移操作,如果IRQ引腳為低電平則程序計數(shù)器PC轉移至指定的地址處執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例9.BMI指令3.2匯編指令系統(tǒng)及應用舉例11.BIH指令該指令的功能恰好與BIL指令相反,如果IRQ引腳為高電平則程序計數(shù)器PC轉移至指定的地址處執(zhí)行程序。12.BMC指令該指令根據(jù)CC寄存器的中斷屏蔽標志位I的情況決定是否轉移,若中斷屏蔽標志位I=0則轉移,否則順序執(zhí)行程序3.2匯編指令系統(tǒng)及應用舉例11.BIH指令3.2匯編指令系統(tǒng)及應用舉例13.BMS指令該指令的功能恰好與BMC指令相反,若中斷屏蔽標志位I=1則轉移,否則順序執(zhí)行程序。14.BHCC指令該指令根據(jù)CC寄存器的半進位標志位H的情況決定是否轉移,若半進位標志位H=0則轉移,否則順序執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例13.BMS指令3.2匯編指令系統(tǒng)及應用舉例15.BHCS指令該指令的功能恰好與BHCC指令相反,根據(jù)CC寄存器的半進位標志位H的情況決定是否轉移,若半進位標志位H=1則轉移,否則順序執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例15.BHCS指令3.2匯編指令系統(tǒng)及應用舉例16.BLT指令該指令根據(jù)CC寄存器的溢出標志位V和負標志位N的情況決定是否轉移,若溢出標志位V和負標志位N狀態(tài)不一致時則轉移,否則順序執(zhí)行程序。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)小于后一個操作數(shù)則轉移。該指令通常與比較指令、減法運算指令配合使用。3.2匯編指令系統(tǒng)及應用舉例16.BLT指令3.2匯編指令系統(tǒng)及應用舉例17.BLE指令該指令根據(jù)CC寄存器的零標志位Z、溢出標志位V和負標志位N的情況決定是否轉移,若(Z)|(N⊕V)=1時則轉移,否則順序執(zhí)行程序。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)小于或等于后一個操作數(shù)則轉移,同樣該指令也與比較指令、減法運算指令配合使用。3.2匯編指令系統(tǒng)及應用舉例17.BLE指令3.2匯編指令系統(tǒng)及應用舉例18.BGE指令該指令根據(jù)CC寄存器溢出標志位V和負標志位N的情況決定是否轉移,若(N⊕V)=0時則轉移,否則順序執(zhí)行程序。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)大于或等于后一個操作數(shù)則轉移。3.2匯編指令系統(tǒng)及應用舉例18.BGE指令3.2匯編指令系統(tǒng)及應用舉例19.BGT指令該指令的功能與BLT指令相反,它根據(jù)CC寄存器的零標志位Z、溢出標志位V和負標志位N的情況決定是否轉移,若(Z)|(N⊕V)=0時則轉移,也就是兩個操作數(shù)進行比較,若前一個操作數(shù)大于后一個操作數(shù)則轉移。同樣該指令也與比較指令、減法運算指令配合使用3.2匯編指令系統(tǒng)及應用舉例19.BGT指令3.2匯編指令系統(tǒng)及應用舉例20.BLO指令該指令根據(jù)CC寄存器的進位標志位C的情況決定是否轉移,如果(C)=1,程序計數(shù)器PC則轉移。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)小于后一個操作數(shù)則轉移,它與BCS指令相似。3.2匯編指令系統(tǒng)及應用舉例20.BLO指令3.2匯編指令系統(tǒng)及應用舉例21.BLS指令該指令根據(jù)CC寄存器的進位標志位C和零標志位Z的情況決定是否轉移,如果(C)|(Z)=1,程序計數(shù)器PC則轉移。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)小于或等于后一個操作數(shù)則轉移。3.2匯編指令系統(tǒng)及應用舉例21.BLS指令3.2匯編指令系統(tǒng)及應用舉例22.BHS指令該指令根據(jù)CC寄存器的進位標志位C的情況決定是否轉移,如果(C)=0,程序計數(shù)器PC則轉移。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)大于或等于后一個操作數(shù)則轉移,它與BCC指令相似,3.2匯編指令系統(tǒng)及應用舉例22.BHS指令3.2匯編指令系統(tǒng)及應用舉例23.BHI指令該指令根據(jù)CC寄存器的進位標志位C和零標志位Z的情況決定是否轉移,如果(C)|(Z)=0,程序計數(shù)器PC則轉移。也就是兩個操作數(shù)進行比較,若前一個操作數(shù)大于后一個操作數(shù)則轉移。3.2匯編指令系統(tǒng)及應用舉例23.BHI指令3.2匯編指令系統(tǒng)及應用舉例24.BRCLR指令該指令是根據(jù)存儲單元的位的狀態(tài)來決定是否轉移,如果存儲單元中第n位為0則轉移25.BRSET指令該指令的功能與BRCLR指令相反,如果存儲單元中第n位為1則轉移指令3.2匯編指令系統(tǒng)及應用舉例24.BRCLR指令3.2匯編指令系統(tǒng)及應用舉例CBEQ指令CBEQ指令是比較累加器A和某個存儲單元的內容,如果它們彼此相等就轉移至指定的地址處執(zhí)行。即是兩操作數(shù)相比較,相等則轉移。注意,CBEQA指令是累加器A與一個立即數(shù)相比較,CBEQX指令是變址寄存器X與一個立即數(shù)相比較。CBEQ指令采用變址尋址方式時,當比較累加器A和變址存儲單元的內容后,變址寄存器H:X會自動加1。3.2匯編指令系統(tǒng)及應用舉例CBEQ指令3.2匯編指令系統(tǒng)及應用舉例27.DBNZ該指令是累加器A、變址寄存器X或存儲單元的內容先進行減1操作,再判斷結果是否為0,如果不為0則程序計數(shù)器PC轉移指定的地址處執(zhí)行程序。3.2匯編指令系統(tǒng)及應用舉例27.DBNZ3.2匯編指令系統(tǒng)及應用舉例JMPLOOP;跳轉到標號LOOPBRAWei;無條件轉移到標號WeiCMPPTAD;寄存器PTAD與累加器相比較BEQYY;兩者比較若相等,(Z)=1,則轉移到標號YCMPPTBD;寄存器PTBD與累加器相比較
BNEJJ;兩者比較若不相等,(Z)=0,則轉移到標號JJ3.2匯編指令系統(tǒng)及應用舉例JMPLOOP;跳轉3.2匯編指令系統(tǒng)及應用舉例BPLTK;如果(N)=0則轉移到標號TKBMITT;如果(N)=1則轉移到標號TTBIHDELAY;如果IRQ引腳=1,則程序計數(shù)器PC轉移至標號
DELAYCLI ;把CC寄存器的中斷屏蔽標志位I清0BMCLOOP;經過上一條指令的執(zhí)行,(I)=0,則程序計數(shù)器
PC轉移至標號LOOPCLI ;把CC寄存器的中斷屏蔽標志位I清0BMCLOOP ;經過上一條指令的執(zhí)行,(I)=0,則程序計數(shù)器PC沒有轉移到標號LOOP,而是順序執(zhí)行下一條指令
LDA#$0A ;這時程序計數(shù)器PC跳到此處執(zhí)行3.2匯編指令系統(tǒng)及應用舉例BPLTK;如果(N)3.2匯編指令系統(tǒng)及應用舉例ADD #$01 ;累加器A的內容加上二進制立即數(shù)00000001BHCCKEY;假設累加器A的內容00001111,運算后(H)=1,累加器A的內容00010000,此時程序計數(shù)器PC不轉移至標號KEYSTAPTAD;程序計數(shù)器PC繼續(xù)順序執(zhí)行程ADD #$01 ;累加器A的內容加上二進制立即數(shù)00000001BHCSKEY;假設累加器A的內容00001111,運算后(H)=1,累加器A的內容00010000,此時程序計數(shù)器PC轉移至標號KEYCPM #$08;將累加器A的內容與十六進制立即數(shù)08進行比較
BLTLK;若累加器A的內容小于十六進制立即數(shù)08,(N⊕V)=1,程序計數(shù)器PC轉移至標號LK3.2匯編指令系統(tǒng)及應用舉例ADD #$01 ;累加器A3.2匯編指令系統(tǒng)及應用舉例SUB#$02 ;將累加器A的內容減去十六進制立即數(shù)02BGEYY;如果累加器A的內容大于或等于十六進制立即數(shù),取02(N⊕V)=0,程序計數(shù)器PC轉移至標號YYCPM #$09 ;將累加器A的內容與十六進制數(shù)09
相比較
BGEYY;如果累加器A的內容大于十六進制數(shù)09,(Z)|(N⊕V)=0,程序計數(shù)器PC轉移至標號YYSUB#$02 ;將累加器A的內容減去十六進制立即數(shù)02BLOWW;假設累加器A的內容小于十六進制數(shù)02,(C)
=1,程序計數(shù)器PC轉移至標號WW3.2匯編指令系統(tǒng)及應用舉例SUB#$02 ;將累加器3.2匯編指令系統(tǒng)及應用舉例3.2.6相關堆棧指令堆棧指令包括入棧指令和出棧指令。HCS08系列單片機的堆棧指令只能將累加器A、變址寄存器H:X中的內容壓入堆棧,或者將堆棧中的內容彈出到累加器A、變址寄存器H:X中。入棧操作按照先壓入,后堆棧指針寄存器SP減1的規(guī)則;出棧操作先執(zhí)照堆棧指針寄存器SP加1,后彈出的規(guī)則。它不影響CCR寄存器的標志位。3.2匯編指令系統(tǒng)及應用舉例3.2.6相關堆棧指令3.2匯編指令系統(tǒng)及應用舉例1.RSP指令堆棧指針復位(RSP)指令的操作是采用隱含尋址方式,它兼容于早期的M6805系列單片機。該指令使用存儲單元$FF加載到堆棧指針寄存器SP的低8位,但不影響堆棧指針寄存器SP的高8位。在早期的體系結構中,SP寄存器的高8位難以改為$00,因此RSP需要強迫堆棧指針寄存器SP復位到其原始狀態(tài)($00FF)。在HCS08系列中,$00FF很少被用來作為堆棧的起始指針。所以,也不能夠確定高半部分會保持$00,因此,RSP在新的HCS08程序中通常不是太常用。3.2匯編指令系統(tǒng)及應用舉例1.RSP指令3.2匯編指令系統(tǒng)及應用舉例2.PSHA指令該指令將累加器A的內容壓入堆棧,然后堆棧指針寄存器SP自減1。3.PSHH指令該指令將變址寄存器H的內容壓入堆棧,然后堆棧指針寄存器SP自減1。4.PSHX指令該指令將變址寄存器X壓入堆棧,堆棧指針寄存器SP自減1。3.2匯編指令系統(tǒng)及應用舉例2.PSHA指令3.2匯編指令系統(tǒng)及應用舉例5.PULA指令該指令將累加器A的內容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把累加器A的內容彈出6.PULH指令該指令將變址寄存器H的內容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把變址寄存器H的內容彈出。3.2匯編指令系統(tǒng)及應用舉例5.PULA指令3.2匯編指令系統(tǒng)及應用舉例7.PULX指令該指令將變址寄存器X的內容出棧,指令執(zhí)行的步驟是:堆棧指針寄存器SP自加1,再把變址寄存器X的內容彈出8.AIS指令該指令是將堆棧指針寄存器SP加上立即數(shù),所得的結果作為新的堆棧指針指向的地址。3.2匯編指令系統(tǒng)及應用舉例7.PULX指令3.2匯編指令系統(tǒng)及應用舉例LDHX#$107F ;將十六進制立即數(shù)107F送至變址寄存器
H:XTXS ;將變址寄存器H:X送至堆棧指針寄存器SP,此時,堆棧就處于存儲器中107F地址處LDA#$08 ;將十六進制數(shù)08適至累加器APSHA ;累加器A的內容壓入堆棧,堆棧指針寄存器SP自減1,執(zhí)行完這條指令后,存儲單元107F的內容為累加器A的內容08,堆棧指針寄存器SP指向的地址為107EPULA ;堆棧指針寄存器SP自加1后指向的地址為
107F,而存儲單元107F的內容為08,再把存儲單元107F的內容傳至累加器3.2匯編指令系統(tǒng)及應用舉例LDHX#$107F ;將十3.2匯編指令系統(tǒng)及應用舉例3.2.7其他各種指令1.TST指令該指令用于測試累加器A、變址寄存器X和存儲單元的內容是否小于等于0,它執(zhí)行減0操作,但不改變操作數(shù)的內容,只是根據(jù)結果改變N、Z標志位。3.2匯編指令系統(tǒng)及應用舉例3.2.7其他各種指令3.2匯編指令系統(tǒng)及應用舉例2.TSX指令該指令的功能恰好與TXS指令相反,將堆棧指針寄存器SP的內容傳至到變址寄存器H:X。它采用隱含尋址方式尋址。使用該指令后,若要在隨后的程序訪問堆棧中的變量時,可以用TXS指令恢復堆棧指針寄存器SP的內容,這在效率上比應用相關變址指令有微小的優(yōu)勢,因為堆棧指針寄存器SP在指向下一個堆棧可用的位置時,指針值會自動加1,很明顯,這個操作占用了時間,因此TSX指令會比變址指令快。3.2匯編指令系統(tǒng)及應用舉例2.TSX指令3.2匯編指令系統(tǒng)及應用舉例3.JSR指令該指令使程序計數(shù)器PC跳轉至子程序標號處執(zhí)行,執(zhí)行完子程序后再返回原先的地址處繼續(xù)執(zhí)行。它具有5種尋址方式,可調用64KB地址空間中任一有效地址處的子程序。該指令的執(zhí)行順序是:⑴.程序計數(shù)器PC加n。其中n的取值有1、2和3,具體依據(jù)該指令的尋址方式。此步驟的目的是待子程序結束返回時能使程序計數(shù)器PC正確指向該指令的下一條指令。⑵.把程序計數(shù)器PC的低8位值壓入堆棧,然后堆棧指針寄存器SP減1。⑶.把程序計數(shù)器PC的高8位值壓入堆棧,然后堆棧指針寄存器SP減1。⑷.把子程序標號的地址傳送至程序計數(shù)器PC。3.2匯編指令系統(tǒng)及應用舉例3.JSR指令3.2匯編指令系統(tǒng)及應用舉例4.BSR指令該指令使程序計數(shù)器PC跳轉至子程序標號處執(zhí)行轉移到子程序,執(zhí)行完子程序后再返回原先的地址處繼續(xù)執(zhí)行。它采用相對尋址方式尋址,只能調用相對于本指令地址-126~+129地址空間內的子程序。該指令的執(zhí)行順序與JSR指令相似,區(qū)別是執(zhí)行該指令時,程序計數(shù)器PC是加2。3.2匯編指令系統(tǒng)及應用舉例4.BSR指令3.2匯編指令系統(tǒng)及應用舉例5.RTS指令該指令也稱為子程序返回指令。通常,它在子程序的結尾,當調用完子程序后,它使程序計數(shù)器PC指向調用處的下一條指令。該指令的執(zhí)行順序是:⑴.堆棧指針寄存器SP加1,程序計數(shù)器PC的高8位出棧。⑵.堆棧指針寄存器SP加1,程序計數(shù)器PC的低8位出棧。3.2匯編指令系統(tǒng)及應用舉例5.RTS指令3.2匯編指令系統(tǒng)及應用舉例6.SWI指令該指令也稱軟件中斷(SWI)指令,它和JSR指令相似,但它要把程序計數(shù)器PC、變址寄存器X、累加器A和CCR寄存器中的內容保存到堆棧中,執(zhí)行完中斷服務子程序后可以返回上述幾個寄存器的值。該指令的執(zhí)行順序是:⑴.程序計數(shù)器PC加1,此步驟的目的是待子程序結束返回時能使程序計數(shù)器PC正確指向該指令的下一條指令。⑵.把程序計數(shù)器PC的低8位值壓入堆棧,然后堆棧指針寄存器SP減1。⑶.把程序計數(shù)器PC的高8位值壓入堆棧,然后堆棧指針寄存器SP減1。⑷.把變址寄存器X的值壓入堆棧,然后堆棧指針寄存器SP減1。⑸.把累加器A的值壓入堆棧,然后堆棧指針寄存器SP減1。⑹.把CCR寄存器的值壓入堆棧,然后堆棧指針寄存器SP減1。⑺.屏蔽中斷標志位I,即中斷標志位I的值為1。⑻.把中斷地址的高8位傳送至程序計數(shù)器PC的高8位,把中斷地址的低8位傳送至程序計數(shù)器PC的低8位。3.2匯編指令系統(tǒng)及應用舉例6.SWI指令3.2匯編指令系統(tǒng)及應用舉例7.RTI指令該指令也稱軟件中斷返回指令。一般地,它處在中斷服務程序的最后,當執(zhí)行完中斷服務程序后,它恢復了CCR寄存器、累加器A、變址寄存器X、程序計數(shù)器PC的值,之前這些寄存器按相反的順序被保存在堆棧中。該指令的執(zhí)行順序是:⑴.堆棧指針寄存器SP加1,CCR寄存器的值出棧。⑵.堆棧指針寄存器SP加1,累加器A的值出棧。⑶.堆棧指針寄存器SP加1,變址寄存器X的值出棧。⑷.堆棧指針寄存器SP加1,程序計數(shù)器PC的高8位值出棧。⑸.堆棧指針寄存器SP加1,程序計數(shù)器PC的低8位值出棧。3.2匯編指令系統(tǒng)及應用舉例7.RTI指令3.2匯編指令系統(tǒng)及應用舉例8.NOP指令該指令也稱空操作指令,它沒有操作,只是用于產生1個總線周期的延時。9.SEC指令該指令設定CCR寄存器的進位標志位C為1,通常用于在執(zhí)行左移或右移指令前,改變進位標志3.2匯編指令系統(tǒng)及應用舉例8.NOP指令3.2匯編指令系統(tǒng)及應用舉例10.CLC指令該指令的功能恰好與SEC指令相反,它設定CCR寄存器的進位標志位C為0,通常用于在執(zhí)行左移或右移指令前,改變進位標志11.SEI指令該指令設定CCR寄存器的中斷屏蔽標志位I為1,主要用于禁止中斷。在上電復位或其它幾種復位開始,至堆棧指針和其他系統(tǒng)條件初始化之前的這段時間,可通過SET指令設置I位為1來禁止中斷,以防意想不到的事件發(fā)生3.2匯編指令系統(tǒng)及應用舉例10.CLC指令3.2匯編指令系統(tǒng)及應用舉例12.CLI指令該指令的功能恰好與SEI指令相反,它設定CCR寄存器的中斷屏蔽標志位I為0,主要用于開戶中斷。當完成系統(tǒng)初始化后,需要用CLI指令來啟動中斷3.2匯編指令系統(tǒng)及應用舉例12.CLI指令3.2匯編指令系統(tǒng)及應用舉例13.BGND指令該指令的用法特殊,用于CPU停止執(zhí)行新指令且不知道要持續(xù)多長時間的情況,BGND指令通常被開發(fā)系統(tǒng)用于設置用戶調試程序,以實現(xiàn)軟件斷點。當ENBDM=1時,進入背景調試狀態(tài)。相對于M68HC08系列單片機,BGND指令是HCS08的新增指令。普通用戶程序中不會使用BGND,因為它強制CPU停止處理用戶指令而進入背景調試模式。要重新執(zhí)行用戶程序的唯一方法是通過復位,或由主機調試系統(tǒng)通過背景調試接口發(fā)出GO、TRACE1或AGGO等串行命令。3.2匯編指令系統(tǒng)及應用舉例13.BGND指令3.2匯編指令系統(tǒng)及應用舉例14.WAIT指令該指令使CPU進入低功耗模式,使能中斷,接著處于等待中斷的狀態(tài)。該指令被執(zhí)行后,會引發(fā)CPU關閉時鐘以節(jié)省功耗,但其他的外圍系統(tǒng)繼續(xù)運行,一旦有中斷源(外部的IRQ引腳或者來自內部的外圍設備)到來,即可喚醒WAIT模式下的CPU。另外,復位也可以喚醒WAIT模式下的CPU3.2匯編指令系統(tǒng)及應用舉例14.WAIT指令3.2匯編指令系統(tǒng)及應用舉例15.STOP指令該指令與WAIT指令一樣,使CPU進入低功耗模式,使能中斷,停止處理相應的MCU工作,接著處于等待中斷的狀態(tài)。該指令被執(zhí)行后,會強迫MCU關掉所有的系統(tǒng)時鐘以減少系統(tǒng)功率,達到最小的功率。在這種模式下,振蕩器和時基模塊的雙穩(wěn)態(tài)多諧振蕩器的時鐘均已停止,因此系統(tǒng)功耗減至最小狀態(tài)3.2匯編指令系統(tǒng)及應用舉例15.STOP指令3.2匯編指令系統(tǒng)及應用舉例LDA #$0A ;把十六進制數(shù)0A存入累加器A中NOP;沒有操作,1個總線周期NOP ;沒有操作,1個總線周期JSR DELAY;調用子程序
DELAY3.2匯編指令系統(tǒng)及應用舉例LDA #$0A ;把十六進制3.3偽指令
匯編語言在源程序中使助記符和符號給編程帶來了極大的方便,同時也給匯編帶來了因難,因為匯編程序無法區(qū)分源程序中的符號是數(shù)據(jù)還是地址,也無法識別數(shù)據(jù)的類型,還不知道程序的定位、分段等情況。為了解決這些問題,匯編語言中專門設置了偽指令。偽指令只為匯編程序將符號指令編譯成機器指令碼提供信息,它們本身并不生成代碼,匯編工作結束后它們就不再存在。偽指令是指令助記符里保留的命令字,它可以設置一段程序的起始地址,可以使一個標號和一個值等同起來,可以確定程序變量在存儲器中的位置,也可以為RAM變量預留空間,還可以控制打印、為編譯器配置選項等等。3.3偽指令
匯編語言在源程序中使助記符和符號給編程帶來了3.3偽指令1.BASE——設定編譯器的缺省數(shù)進制一般地,編譯器默認用十進制數(shù),但是有些編譯器默認把沒有前綴的數(shù)字當作16進制數(shù)來處理。如果想使用十進制作為默認的數(shù)進制,那么可在源文件的開頭使用BASE指令設置。3.3偽指令1.BASE——設定編譯器的缺省數(shù)進制3.3偽指令2.INCLUDE——指定附加源文件在編寫工程源代碼時,將一個工程項目的所有源代碼放在一個單獨的文件里往往是不恰當?shù)模绻帉懙脑创a太多,就不容易編輯和管理這個源代碼文件了,因此,可以將一個工程項目拆分為兩個或更多的獨立源文件。而INCLUDE偽指令就是這些獨立源文件的紐帶。一般地,在主源文件中使用INCLUDE指令包含其他的源文件,當編譯器遇到一個INCLUDE指令時,它就會將附加源文件的內容轉換到被包含的文件里,直到檢測測到一個文件的結束信息為止。該偽指令的常用用法是包含一個芯片的定義文件(有時被稱為通用文件)。這個文件定義了有關寄存器的相關地址,所以,在編寫源程序時能在項目里直接使用寄存器和位名。3.3偽指令2.INCLUDE——指定附加源文件3.3偽指令3.NOLIST/LIST——關閉或打開文件列表在將一個程序的源文件編譯成目標代碼文件的同時,編譯器會讀一個源文件并且生成一個復合的列表文件。列表文件是一個包含了目標代碼和生成的行號以及原始文件信息的純文本文件。NOLIST和LIST指令允許控制列表文件的產生。這些指令通常應用在編譯器處理MCU的通用文件時壓縮列表3.3偽指令3.NOLIST/LIST——關閉或打開文件列3.3偽指令4.ORG——設置程序的起始位置在編譯過程中,編譯器保留一個“單元計數(shù)器”,這計數(shù)器可以跟蹤下一個可用的存儲單元以便存儲代碼和變量。ORG指令可以將這個計數(shù)器設置為一個具體的地址值,在目標文件里它不產生任何實際代碼,而是告訴編譯器下一字節(jié)的代碼或數(shù)據(jù)應該存放的內存空間位置。3.3偽指令4.ORG——設置程序的起始位置3.3偽指令5.EQU——賦值偽指令該指令告訴編譯器某個數(shù)值或地址與一個特定的符號聯(lián)系起來,表示符號與符號后的數(shù)值或地址是等值的。當EQU偽指令把一數(shù)值或地址定義為一個符號常量后,在源文件中就可以用該符號常量來表示該數(shù)值或地址,使程序非常清晰、直觀。3.3偽指令5.EQU——賦值偽指令3.3偽指令6.dc.b——定義存儲器中字節(jié)常量指令dc.b用來定義存儲器的8位常量。該指令設置了一個獨立的存儲器區(qū)域,讓其關聯(lián)于一個指定的8位數(shù)值。該指令可以有一個與某個地址相關聯(lián)的標號,而這個地址是用來存儲常量的。3.3偽指令6.dc.b——定義存儲器中字節(jié)常量3.3偽指令7.dc.w——在存儲器中定義16位常量dc.w指令用來在存儲器中定義16位的常量值,它設定了兩個存儲器單元用來存儲指定的16位數(shù)值,開頭的高8位存儲在當前單元計數(shù)器指向的地址,后面的低8位存儲在下一個更高位的存儲器地址。這個指令有一個和地址相關聯(lián)的標號,常量的高8位存儲在這個地址里。3.3偽指令7.dc.w——在存儲器中定義16位常量3.3偽指令8.ds.b/ds.w——定義存儲(保留)內存變量字節(jié)指令ds.b為指定的數(shù)值預留一個8位存儲器單元,以便用來存儲程序變量;ds.w指令為指定的程序變量預留16位存儲器單元。這兩條指令不產生任何的目標代碼。指令ds.b使編譯器與單元計數(shù)器所指向的當前地址相關聯(lián),之后按照ds.b指令所設置的字節(jié)數(shù)調整單元計數(shù)器的值,單元計數(shù)器就指向了下一個可用的存儲器單元。它通常給一個指定的程序變量預留出存儲空間,也可給較大的數(shù)據(jù)結構或表設置存儲空間。3.3偽指令8.ds.b/ds.w——定義存儲(保留)內3.3偽指令9.標號編譯器通過用戶自定義標號可增強代碼的可讀性并且簡化編程工作。一個標號只能定義一次,但是可以在一個程序中使用很多次。定義標號時,標號名必須從源碼行的首列開始書寫,一般地,編譯器要求在標號結尾處添加冒號,注意標號不能包含空格符。在一條匯編語句中,標號并不是必需的,匯編程序的絕大多數(shù)語句都沒有標號,通常只在子程序或轉移目的語句處使用。3.3偽指令9.標號3.4基本程序設計范例
例1:8位中強迫某位輸出“0”和“1”。要求:強迫變量VOLM的位1輸出為“1”,位4清除為“0”。3.4基本程序設計范例例1:8位中強迫某位輸出“0”和“3.4基本程序設計范例程序:LDA VOLM ;變量VOLM的內容傳送給累加器AORA #$02;將A的位強迫設定為“1”,而其他位保持不變AND#$EF;繼續(xù)將A的位4強迫清除為“0”,而其他位保持不變STA VOLM;再將運算的結果又存回變量VOLM內3.4基本程序設計范例程序:3.4基本程序設計范例例2:判斷兩個變量的內容是否相等。要求:判斷8位變量VOLM1和變量VOLM2是否相等,如果相等,則變量FLAG內容為“FF”,否則,變量FLAG內容為“00”。3.4基本程序設計范例例2:判斷兩個變量的內容是否相等。3.4基本程序設計范例程序:LDA VOLM1 ;變量VOLM1的內容傳送給累加器ACMP LOLM2 ;變量VOLM2與累加器A的內容相比較
BEQ Set_FLAG ;相等則跳轉到標號Set_FLAGLDA #$00 ;不相等,立即數(shù)“00”傳送給累加器ASTA FLAG ;累加器A的內容傳送給變量FLAGSet_FLAG: ;標號
LDA #$FF ;立即數(shù)“FF”傳送給累加器ASTAFLAG ;累加器A的內容傳送給
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 核心素養(yǎng)視角下的學習環(huán)境優(yōu)化研究論文
- 茶葉包裝間管理制度
- 隨車吊車輛管理制度
- 設備安裝工藝標準樣本
- 裂解爐管道焊接及熱處理施工技術措施
- 財務會計輔導材料及試題練習
- 表住宅工程室內空間尺寸質量分戶驗收記錄表
- 黑龍江省齊齊哈爾市克東縣第三中學2024-2025學年七年級下學期5月期中英語試題(含筆試答案無聽力答案、原文及音頻)
- 幼兒教育神秘星空教學設計教案
- 2025年Android性能優(yōu)化面試題集錦威力加強版-android程序優(yōu)化 面試
- 2025年新高考2卷(新課標Ⅱ卷)英語試卷
- 制造企業(yè)加班管理制度
- 2025年中考化學必考要點知識歸納
- 兒童疼痛的評估及護理措施
- 護理試卷試題及答案
- 人文社科班試題及答案
- 單位消防培訓課件教學
- 2025年公路水運工程重大事故隱患判定標準
- 通風維修質保合同協(xié)議
- 土地托管合同協(xié)議書范本
- 中國餐廚垃圾處理的現(xiàn)狀、問題和對策
評論
0/150
提交評論