四川大學電氣信息學院單片機3_第1頁
四川大學電氣信息學院單片機3_第2頁
四川大學電氣信息學院單片機3_第3頁
四川大學電氣信息學院單片機3_第4頁
四川大學電氣信息學院單片機3_第5頁
已閱讀5頁,還剩86頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第三章MC68HC08單片機指令系統3.1尋址方式3.2指令系統3.3匯編語言程序設計3.1尋址方式3.1.1立即尋址尋址方式總表直接尋直接尋址間接尋即無偏移量變址

址方式擴展尋址址方式:尋址位尋址立即尋址相對尋址:直接變址尋址用變址寄存器的變址尋址位尋址

用堆棧指針的變址尋址

另:隱含尋址

類別:立即尋址概念:操作數包含于指令中,即在操作碼的后續字節中表達:匯編語言#data機器語言OPCODE,n

例:AND#$0FCPX#10

尋址區域:用戶ROM或Flash3.1.2直接尋址

類別:直接尋址(零頁尋址)

概念:指令中直接給出存放操作數的低位字節地址,即操作數的有效地址EA的低位存放于操作碼后續的一個字節中,地址的高位字節默認為$00,且不含在指令中。在單字節地址前加符號“<”表示直接尋址。表達:匯編語言addr8機器語言OPCODE,n

例:LDA$40或LDA<$40

尋址區域:存儲器中最低256個字節,即$0000~$00FF

類別:直接尋址概念:指令中直接給出存放操作數的2字節地址,即操作數的有效地址EA存放于操作碼后續的2個字節中表達:匯編語言addr16機器語言OPCODE,m,n

例:SUB$1540

尋址區域:存儲器中的任何一個字節,即$0000~$FFFF3.1.3擴展尋址

類別:間接尋址

概念:指令中指出存放操作數的1或2字節地址由變址寄存器H:X給出,如果沒有一個指令修改H寄存器中的內容,H寄存器中的值將默認為$00。該尋址方式可以移動鏈表指針或鎖定一個經常使用的RAM地址或輸入輸出地址。表達:匯編語言,X機器語言OPCODE

例:ADD,X

尋址區域:存儲器中的任何地方3.1.4無偏移量變址尋址(IX)3.1.5相對尋址

類別:變址尋址概念:指令中指出如果發生轉移,轉移地址由操作碼后提供的8位有符號整數(1字節)作為偏移量加上PC提供的基地址(PC的當前值)而得出。相對尋址只用于轉移指令(包括轉子指令)。表達:匯編語言標號

機器語言OPCODE,n

例:BLOLOOPBSRDISPLY

尋址區域:用戶ROM或Flash中PC當前值所表達地址的-128到+127(或操作碼起始地址的-126到+129)

類別:變址尋址概念:指令中指出存放操作數的有效地址EA由變址寄存器H:X提供的基地址和操作碼后提供的8位無符號整數(1字節)的偏移量相加而得出。表達:匯編語言偏移量,X機器語言OPCODE,n

例:DEC$40,X

尋址區域:存儲器中的任何地方3.1.68位偏移量變址尋址(IX1)3.1.716位偏移量變址尋址(IX2)

類別:變址尋址概念:指令中指出存放操作數的有效地址EA由變址寄存器H:X提供的基地址和操作碼后提供的16位無符號整數(2字節)的偏移量相加而得出。表達:匯編語言偏移量,X機器語言OPCODE,m,n

例:ADD$1240,X

尋址區域:存儲器中的任何地方3.1.8用堆棧指針的8位偏移量變址尋址

類別:變址尋址概念:指令中指出存放操作數的有效地址EA由堆棧指針SP提供的基地址和操作碼后提供的8位無符號整數(1字節)的偏移量相加而得出。該尋址方式可方便訪問堆棧中的數據,但訪問時間將會長一些。

表達:匯編語言偏移量,SP機器語言OPCODE,n

例:DEC$40,SP

尋址區域:堆棧中的任何地方3.1.9用堆棧指針的16位偏移量變址尋址

類別:變址尋址概念:指令中指出存放操作數的有效地址EA由堆棧指針SP提供的基地址和操作碼后提供的16位無符號整數(2字節)的偏移量相加而得出。表達:匯編語言偏移量,SP機器語言OPCODE,m,n

例:ADD$1240,SP

尋址區域:堆棧中的任何地方3.1.10直接位尋址

類別:直接位尋址概念:指令中指出存放位操作數(0或1)的直接位地址,該位地址由操作碼中的相應位來表達。表達:匯編語言bit機器語言OPCODE中的相應位

例:BSET5,$40

尋址區域:存儲器中的前256個字節中的任何可讀寫的位,即$0000~$

00FF中的任何可讀寫的位3.1.11隱含尋址

類別:隱含尋址概念:指令中以隱含方式指出存放操作數的地址,該地址以操作碼來指定,而不提供地址的任何信息。表達:匯編語言指令本身

機器語言無

例:TAX

尋址區域:專對A、H、X、CCR等3.1.12存儲器到存儲器的尋址方式存儲器到存儲器的尋址方式有4種不同的形式:

(1)立即尋址到直接尋址

(2)直接尋址到直接尋址

(3)自動變址尋址到直接尋址

(4)直接尋址到自動變址尋址指令格式為:MOV源地址,目的地址

1.立即尋址到直接尋址操作碼后緊跟的操作數將被存儲到操作碼后第二個字節所指的地址中。通常用來初始化變量和寄存器,用這種尋址方式的傳送指令不影響累加器的值。例如MOV#$05,$C5

2.直接尋址到直接尋址操作碼后第一個字節是源操作數的地址,第二個字節是目的操作數的地址。通常用于在存儲器間直接移動數據。用這種尋址方式的傳送指令不影確累加器的值。例如MOV$05,$F03.自動變址尋址到直接尋址

H:X中的內容作為存放源操作數的地址,有效目標地址由操作碼的后繼字節給出,數據傳送后,H:X自動加1。常用來在間接尋址頁中的數據塊傳送,用這種尋址方式的指令不影響累加器的值。例如MOVX+,$184.直接尋址到自動變址尋址有效源地址由操作碼的后繼字節給出,H:X中的內容作為存放目標操作數的地址,數據傳送后,H:X自動加1。通常用于將存儲器的內容填充到間接尋址頁中的數據表格。用這種尋址方式的指令不影響累加器的值。例如MOV$18,X+3.2指令系統指令系統即MCU所能執行的所有指令的集合。

MC68HC08的指令系統可分為4類:

?數據存取類指令

?算術/邏輯運算類指令又分:算術運算類指令和邏輯運算類指令

?程序控制類指令又分:無條件/條件轉移類指令和控制類指令

?位操作類指令學習指令系統必須掌握的內容:1)類別;

2)尋址方式;

3)表達形式;

4)功能和對標志位的影響;

5)執行過程和時序3.2.1數據存取類指令數據存取類指令的目標單元是A和X(或H:X),主要是取數指令、存數指令、堆棧操作指令以及傳送指令,還有幾條A、H:X、CCR和SP之間的數據互換指令。各種符號及字母的含義:

*表示相乘運算;

表示邏輯與;

表示邏輯或;

⊕表示邏輯異或;

Y

表示Y的反碼;

(Y)

表示Y中的內容;

IMM

表示立即尋址;

INH

表示隱含尋址;

Rel

表示相對尋址;IX

表示無偏移量變址尋址;IX1

表示8位偏移量變址尋址;IX2

表示16位偏移量變址尋址;DIR

表示直接尋址;EXT

表示擴展尋址;SP1

表示8位偏移量棧指針尋址;SP2

表示16位偏移量棧指針尋址;IX+

表示無偏移量變址增1尋址;IXI+

表示8位偏移量變址增1尋址;IMD表示存儲器至存儲器IMD尋址;DD

表示存儲器至存儲器DD尋址;

IX+D表示存儲器至存儲器尋址;表示方法:(Y)表示Y中的內容((Y))表示以Y中的內容作地址,該地址中的內容執行取數操作并按取入的數來改變N,Z標志位,且V=0操作說明43IX2((X)+addr16)→

XLDXaddr16,X32IX1((X)+addr8)→XLDXaddr8,X21IX((X))→XLDX,X43EXT(addr16)→XLDXaddr1632DIR(addr8)→XLDXaddr822IMM

data→XLDX#data寄存器X取數累加器取數周期數字節尋址方式操作指令類型表1數據存取類指令LDAaddr16,XLDAaddr8,XLDA,XLDAaddr16LDAaddr8LDA#dataLDAaddr8,SPLDAaddr16,SP((SP)+addr8)→A((X)+addr16)→A((X)+addr8)→A((X))→A(addr16)→A(addr8)→Adata→A((SP)+addr16)→AIX2IX1IXEXTDIRIMMSP2SP14332214332223445LDXaddr8,SPLDXaddr16,SPLDHX#data16LDHXaddr8((SP)+addr8)→X((SP)+addr16)→

X

addr16→H:X(addr8)→H(addr8+1)→XSP1SP2IMMDIR34324534續表154SP2(X)→(SP)+addr16STXaddr16,SP操作說明周期數字節尋址方式操作指令類型43SP1(X)→(SP)+addr8STXaddr8,SP43IX2(X)→(X)+addr16STXaddr16,X32IX1(X)→(X)+addr8STXaddr8,X21IX(X)→(X)STX,X43EXT(X)→addr16STXaddr1632DIR(X)→addr8STXaddr8寄存器X存數43IX2(A)→(X)+addr16STAaddr16,X32IX1(A)→(X)+addr8STAaddr8,X21IX(A)→(X)STA,X43EXT(A)→addr16STAaddr16(A)→addr8STAaddr8累加器存數執行存數操作并按存入的數來改變N,Z標志位,且V=032DIRSTAaddr8,SPSTAaddr16,SP(A)→(SP)+addr8(A)→(SP)+addr163445SP1SP242(H)→addr8(X)→addr8+1STHXaddr8DIR續表221INH(H:X)-1→SP操作說明周期數字節尋址方式操作指令類型21INH(SP)+1→H:X11INH(CCR)→A21INH(A)→CCR42IX+D42DIX+53DD(addr8)→addr8傳送指令21INHPULH21INHPULA21INHPSHX21INHPSHH(A)→(SP)(SP)-1→SPPSHA堆棧操作指令影響N,Z標志位,且V=021INHPULX12INH31

A[3:0]A[7:4]NSAINH(H)→(SP)(SP)-1→SP(X)→(SP)(SP)-1→SP(SP)+1→SP((SP))→A(SP)+1→SP((SP))→H(SP)+1→SP((SP))→XMOV#data,addr8MOVaddr8,addr8MOVaddr8,X+MOVX+,addr8TAPTPATSXTXATXSTAXdata→addr8(addr8)→(H:X)(H:X)+1→H:X((H:X))→addr8(H:X)+1→H:X(A)→X(X)→A交換IMDINHINH341111不影響標志位不影響標志位VHINZC例:LDA#$05LDA$05LDA$1030LDX#$05LDX$05LDX$1030#$05A($0005)A($1030)A#$05X($0005)X($1030)X例:LDX#$89LDA,X

執行結果:A($0089)#$89X((X))=($0089)ALDA$08,X若:(X)=$60($08+$60)ALDA$1002,X若:(X)=$60($1002+$60)ALDX,X((X))X若(X)=$60($0060)XSTA$90(A)$0090STX$90(X)$0090STX,X(X)(X)若(X)=$60(X)($0060)即#$60($0060)例:LDA$1010;A($1010)

LDA$1010,X;A($1010+(X))LDX,X;X((X))LDX$0F,X;X((X)+$0F)執行前:X中內容為$50,$50RAM單元內容為$20執行此段程序后X中內容為多少?執行后:X中內容為單元號為$20+$0F=$2FRAM單元的內容。

STX$0F,X;$0F+(X)(X)執行前:X中內容為$50執行此段程序后X中內容為多少,$5FRAM單元的內容為多少?執行后:單元號為$50+$0F=$5FRAM單元的內容為$50,X中也為$50。3.2.2算術/邏輯運算類指令又分:算術運算類指令和邏輯運算類指令。3.2.2.1算術運算類指令

MC68HC08的算術運算指令一般均隱含為操作數與累加器A進行算術運算或存儲器本身以及變址寄存器X進行算術運算。算術運算指令又分為:

?加減法運算指令

?比較指令

?乘法運算指令

?增量減量指令

?取負指令和零測試指令算術運算類指令如表2所示:表2算術運算類指令根據結果影響V、H,N、Z,C標志操作說明周期數字節尋址方式操作指令類型53IX2(A)+((X)+addr16)→AADDaddr16,X42IX1(A)+((X)+addr8)→AADDaddr8,X31IX(A)+((X))→AADD,X43EXT(A)+(addr16)→AADDaddr1632DIR(A)+(addr8)→AADDaddr822IMM(A)+data→AADD#data加法指令ADDaddr8,SPADDaddr16,SP(A)+((SP)+addr8)→A(A)+((SP)+addr16)→ASP2SP13333帶進位加法指令43IX2(A)+((X)+addr16)+(C)→AADCaddr16,X32IX1(A)+((X)+addr8)+(C)→AADCaddr8,X21IX(A)+((X))+(C)→AADC,X43EXT(A)+(addr16)+(C)→AADCaddr1632DIR(A)+(addr8)+(C)→AADCaddr822IMM(A)+data+(C)→AADC#dataADCaddr8,SPADCaddr16,SP(A)+((SP)+addr8)+(C)→A(A)+((SP)+addr16)+(C)→ASP2SP14534AIS#dataAIX#data(SP)+data→SP(H:X)+data→H:XIMMIMM22223續表2根據結果影響V、H,N、Z,C標志操作說明周期數字節尋址方式操作指令類型43IX2(A)-((X)+addr16)→ASUBaddr16,X32IX1(A)-((X)+addr8)→ASUBaddr8,X21IX(A)-((X))→ASUB,X43EXT(A)-(addr16)→ASUBaddr1632DIR(A)-(addr8)→ASUBaddr822IMM(A)-data→ASUB#data減法指令SUBaddr8,SPSUBaddr16,SP(A)-((SP)+addr8)→A(A)-((SP)+addr16)→ASP2SP14534帶借位減法指令43IX2(A)-((X)+addr16)-(C)→ASBCaddr16,X32IX1(A)-((X)+addr8)-(C)→ASBCaddr8,X21IX(A)-((X))-(C)→ASBC,X43EXT(A)-(addr16)-(C)→ASBCaddr1632DIR(A)-(addr8)-(C)→ASBCaddr822IMM(A)-data-(C)→ASBC#dataSBCaddr8,SPSBCaddr16,SP(A)-((SP)+addr8)-(C)→A(A)-((SP)+addr16)-(C)→ASP2SP14534續表2乘除53IX2((SP)+addr8)–1→(SP)+addr8DECaddr8,SP42IX1((X)+addr8)–1→(X)+addr8DECaddr8,X31IX((X))–1→(X)DEC,X42EXT(addr8)–1→addr8DECaddr811DIR(X)–1→XDECX11IMM(A)–1→ADECA減1指令53IX2((SP)+addr8)+1→(SP)+addr8INCaddr8,SP42IX1((X)+addr8)+1→(X)+addr8INCaddr8,X31IX((X))+1→(X)INC,X42EXT(addr8)+1→addr8INCaddr811DIR(X)+1→XINCX根據結果影響V、N、Z標志11IMM(A)+1→AINCA加1指令操作說明周期數字節尋址方式操作指令類型MULDIV(A)*(X)→X:A(H:A)/(X)→A,余數→H影響Z、CINHINH1751根據結果影響V、N、Z,C標志操作說明周期數字節尋址方式操作指令類型43IX2(A)–((X)+addr16)CMPaddr16,X32IX1(A)–((X)+addr8)CMPaddr8,X21IX(A)–((X))CMP,X43EXT(A)–(addr16)CMPaddr1632DIR(A)–(addr8)CMPaddr822IMM(A)–

dataCMP#data與累加器比較指令CMPaddr8,SPCMPaddr16,SP(A)–((SP)+addr8)(A)–((SP)+addr16)SP2SP14534與變址寄存器比較指令43IX2(X)–((X)+addr16)CPXaddr16,X32IX1(X)–((X)+addr8)CPXaddr8,X21IX(X)–((X))CPX,X43EXT(X)–(addr16)CPXaddr1632DIR(X)–(addr8)CPXaddr822IMM(X)–

dataCPX#dataCPXaddr8,SPCPXaddr16,SP(X)–((SP)+addr8)(X)–((SP)+addr16)SP2SP14534CPHX#data16CPHXaddr8(H:X)–data16(H:X)–(adata8:adata8+1)IMMIMM3342續表2影響N、Z、C43SP1((SP)+addr8)–$00TSTaddr8,SP32IX1((X)+addr8)–$00TSTaddr8,X21IX((X))–$00TST,X32DIR(addr8)–$00TSTaddr811INH(X)–$00TSTX11INH(A)–$00TSTA零測試指令53SP1$00–((SP)+addr8)→(SP)+addr8NEGaddr8,SP42IX1$00–((X)+addr8)→(X)+addr8NEGaddr8,X31IX$00–((X))→(X)NEG,X42DIR$00–(addr8)→addr8NEGaddr811INH$00–(X)→XNEGX根據結果影響V、N、Z、C標志11INH$00–(A)→ANEGA取負指令操作說明周期數字節尋址方式操作指令類型DAA十進制調整A21INH根據結果影響N、Z標志,而V=0續表2例:LDA#$60ADD#$30執行后:A中為$90。例:LDX#$80LDA$1080SUB,X執行前:$80單元中的數為$20,$1080單元中的數為$33執行后:A中的數為多少?

A:$33-$20=$13若用CMP,X

代替SUB,X

結果如何?減法運算后,差不回送A,A中仍然是$33,減法的結果通過標志位反映。例:NEG$60執行前:$60單元中的數為$03執行后:$60單元中的數為$FD,是-03H的補碼。例:LDX#$92TSTX執行后:結果只影響標志位

$92-$00=$92,結果N=1,Z=03.2.2.2邏輯運算類指令

MC68HC08的邏輯運算指令又分為:

?基本邏輯操作指令包括邏輯與、邏輯或和邏輯異或指令

?位測試指令

?簡單邏輯操作指令包括清零指令和取反指令

?移位指令包括算術左移指令、算術右移指令、邏輯左移指令、邏輯右移指令、循環左移指令和循環右移指令邏輯運算類指令如表3所示:表3邏輯運算類指令根據結果影響N、Z標志,而V=0操作說明周期數字節尋址方式操作指令類型43IX2(A)∧((X)+addr16)→AANDaddr16,X32IX1(A)∧((X)+addr8)→AANDaddr8,X21IX(A)∧((X))→AAND,X43EXT(A)∧(addr16)→AANDaddr1632DIR(A)∧(addr8)→AANDaddr822IMM(A)∧data→AAND#data邏輯與指令ANDaddr8,SPANDaddr16,SP(A)∧((SP)+addr8)→A(A)∧((SP)+addr16)→ASP2SP14534邏輯或指令43IX2(A)∨((X)+addr16)→AORAaddr16,X32IX1(A)∨((X)+addr8)→AORAaddr8,X21IX(A)∨((X))→AORA,X43EXT(A)∨(addr16)→AORAaddr1632DIR(A)∨(addr8)→AORAaddr822IMM(A)∨

data→AORA#dataORAaddr8,SPORAaddr16,SP(A)∨((SP)+addr8)→A(A)∨((SP)+addr16)→ASP2SP14534根據結果影響N、Z標志,而V=0操作說明周期數字節尋址方式操作指令類型43IX2(A)⊕((X)+addr16)→AEORaddr16,X32IX1(A)⊕((X)+addr8)→AEORaddr8,X21IX(A)⊕((X))→AEOR,X43EXT(A)⊕(addr16)→AEORaddr1632DIR(A)⊕(addr8)→AEORaddr822IMM(A)⊕

data→AEOR#data邏輯異或指令EORaddr8,SPEORaddr16,SP(A)⊕((SP)+addr8)→A(A)⊕((SP)+addr16)→ASP2SP14534位測試指令43IX2(A)∧((X)+addr16)BITaddr16,X32IX1(A)∧((X)+addr8)BITaddr8,X21IX(A)∧((X))BIT,X43EXT(A)∧(addr16)BITaddr1632DIR(A)∧(addr8)BITaddr822IMM(A)∧

dataBIT#dataBITaddr8,SPBITaddr16,SP(A)∧((SP)+addr8)(A)∧((SP)+addr16)SP2SP14534續表3續表311INH$00→H

CLRH32IX1$00→(X)+addr8

CLRaddr8,X21IX

$00→

(X)CLR,X32DIR$00→

addr8

CLRaddr811INH

$00→XCLRX11INH

$00→ACLRA清零指令53SP1((SP)+addr8)→(SP)+addr8COMaddr8,SP42IX1((X)+addr8)→(X)+addr8COMaddr8,X31IX((X))→(X)COM,X42DIR(addr8)→addr8COMaddr811INH(X)→XCOMX根據結果影響N、Z標志,而V=0,C=111INH(A)→ACOMA取反指令操作說明周期數字節尋址方式操作指令類型CLRaddr8,SP$00→(SP)+addr843SP1Z=1,而V=0,N=0算術右移指令續表353SP1ASRaddr8,SP42IX1ASRaddr8,X31IXASR,X42DIRASRaddr811INHASRX11INHASRACb7b0操作說明周期數字節尋址方式操作指令類型53SP1ASLaddr8,SP42IX1ASLaddr8,X31IXASL,X42DIRASLaddr811INHASLX11INHASLA算術左移指令C0b7b0根據結果影響V、NZ、C標志根據結果影響V、NZ、C標志續表353SP1LSRaddr8,SP42IX1LSRaddr8,X31IXLSR,X42DIRLSRaddr811INHLSRX11INHLSRACb7b0類型邏輯左移指令C0b7b0操作操作說明周期數字節尋址方式指令53SP1LSLaddr8,SP42IX1LSLaddr8,X31IXLSL,X42DIRLSLaddr811INHLSLX11INHLSLA根據結果影響V、NZ、C標志根據結果影響V、Z、C標志,而N=0邏輯右移指令0續表353SP1RORaddr8,SP42IX1RORaddr8,X31IXROR,X42DIRRORaddr811INHRORX11INHRORACb7b0循環左移指令Cb7b0操作說明周期數字節尋址方式操作指令類型53SP1ROLaddr8,SP42IX1ROLaddr8,X31IXROL,X42DIRROLaddr811INHROLX11INHROLA根據結果影響V、NZ、C標志根據結果影響V、NZ、C標志循環右移指令例:LDA#$5DTAXSTX,XAND#$0FORA#$30AND,XBIT#$01A#$5DX(A);(X)=$5D(X);$5D單元$5DA(A)∧#$0F;(A)=$0DA(A)∨#$30;(A)=$3DA(A)∧((X));(A)=#$3D∨#$5D=#$1D(A)∧#$01;Z=0,N=03.2.3程序控制類指令又分:無條件轉移指令/條件轉移指令和控制類指令。3.2.3.1無條件轉移指令

MC68HC08的無條件轉移指令又分為:

?無條件跳轉指令

?轉子程序指令

?返回指令無條件轉移指令如表

4

所示:操作說明周期數字節尋址方式操作指令類型42relPC進棧,(PC)+2+rel→PCBSRrel63IX2PC進棧,00:(X)+addr16→PCJSRaddr16,X52IX1PC進棧,00:(X)+addr8→PCJSRaddr8,X41IXPC進棧,00:(X)→PCJSR,X53EXTPC進棧,addr16→PCJSRaddr1642DIRPC進棧,00:addr8→PCJSRaddr832rel(PC)+2+rel→PCBRArel43IX200:(X)+addr16→PCJMPaddr16,X32IX100:(X)+addr8→PCJMPaddr8,X21IX00:(X)→PCJMP,X33addr16→PCJMPaddr1622DIR00:addr8→PCJMPaddr8無條件跳轉指令表4無條件轉移指令轉子程序指令EXT類型指令操作尋址方式字節周期數操作說明返回指令RTSRTI(SP)+1→SP,((SP))→PCH(SP)+1→SP,((SP))→PCLINHCCR、ACC、X、PCH、PCL依次從棧中彈出INH1147續表4根據結果影響V、H、I、N、Z、C標志3.2.3.2條件轉移指令

MC68HC08的條件轉移指令又分為:

?標志位測試轉移指令(包括無符號數比較轉移指令和有符號數比較轉移指令)

?比較轉移指令

?減1比較轉移指令條件轉移指令如表

5

所示:類型指令操作及測試條件尋址方式字節周期數操作說明標志位測試轉移指令(無符號數比較轉移指令)BHIrel大于轉移C∨Z=0BHSrel大于等于轉移C=0BLOrel小于轉移C=1BLSrel小于等于轉移C∨Z=1BEQrel等于轉移Z=1BNErel不等于轉移Z=0標志位測試轉移指令(有符號數比較轉移)BGErel大于等于轉移N⊕V=0BGTrel大于轉移Z∨(N⊕V)=0BLTrel小于轉移N⊕V=1BLErel小于等于轉移Z∨(N⊕V)=1表5條件轉移指令relrelrelrelrelrelrelrelrelrel22222222223333333333IRQ腳=0BILrelIRQ腳=1BIHrelI=0BMCrelI=1BMSrelH=0BHCCrelH=1BHCSrelC=0BCCrelrelC=1BCSrel標志位測試轉移操作說明周期數字節尋址方式測試條件指令類型續表5relrelrelrelrelrelrelrelrelrelrel222222222222333333333333BPLrelBMIrelBNErelBEQrelN=0N=1Z=1Z=0操作說明周期數字節尋址方式測試轉移條件指令類型64SP1DBNZaddr8,SP,rel42IXDBNZX,rel53IX1DBNZaddr8,X,rel32INHDBNZXrel32INHDBNZArel53DIR(addr8)-1→addr8,≠0DBNZaddr8,rel64SP142IX+53IX1+43IMM4353DIR(A)-(addr8)=0

比較轉移指令續表5CBEQaddr8,rel減1比較轉移指令CBEQA#data,relCBEQX#data,relCBEQaddr8,X+,relCBEQX+,relCBEQaddr8,SP,rel(A)-data=0(X)-data=0(A)-((H:X)+addr8)=0,(H:X)+1

H:X(A)-((H:X))=0,(H:X)+1

H:X(A)-((SP)+addr8)=0(A)-1→A,≠0(X)-1→X,≠0((X)+addr8)-1→(X)+addr8,≠0((X))-1→(X),≠0((SP)+addr8)-1→(SP)+addr8,≠0IMM3.2.3.3控制類指令

MC68HC08的控制類指令又分為:

?C和I標志控制指令

?空操作指令

?復位指令

?省電控制指令(低功耗指令)?軟件中斷指令控制類指令如表6所示:表6控制類指令類型指令操作尋址方式字節周期數操作說明標志控制SEC1→CINH11CLC0→CINH11SEI1→IINH12CLI0→IINH12空操作NOPINH11BRNrelINH21復位RSP$FF→SPL,SPH保持不變INH13省電控制WAIT停止CPU的運行INH11STOP停止振蕩器的工作INH11軟件中斷SWI(PC)+1→PC(PCL)→(SP);(SP)―1→SP(PCH)→(SP);(SP)―1→SP(X)→(SP);(SP)―1→SP(ACC)→(SP);(SP)―1→SP(CCR)→(SP);(SP)―1→SP1

→I($FFFC)

→PCH;($FFFD)

→PCLINH193.2.4位操作類指令位操作指令包括置位/清零(復位)指令和位測試轉移指令,位的尋址采用對所尋址位所在的內部RAM單元直接尋址的方式(DIR)加上對所尋址位直接位尋址的方式(bit)相結合的尋址方式。

?置位/清零指令

?位測試轉移指令位操作指令如表7所示:表7位操作類指令類型指令測試條件若尋址方式字節周期數置位清零BSETbit,addr81→(addr8)

·bitDIR.bit24BCLRbit,addr80→(addr8)

·bitDIR.bit24位測試BRSETbit,addr8,rel(addr8)·bit→C,若(C)=1,則(PC)+3+rel→PCDIR.bit35BRCLRbit,addr8,rel(addr8)·bit→C,若(C)=0,則(PC)+3+rel→PCDIR.bit353.2.5指令系統識記簡表3.2.5.1各類指令中所采用尋址方式組合類別

MC68HC08各類指令中所采用尋址方式組合類別大致有以下幾種:

?Ⅰ類含:#dataaddr8addr16,Xaddr8,Xaddr16,Xaddr8,SPaddr16,SP?Ⅱ類含:addr8addr16,Xaddr8,Xaddr16,Xaddr8,SPaddr16,SP

?Ⅲ類含:AXaddr8,Xaddr8,X

addr8,SP?Ⅳ類含:rel?Ⅴ類其它其中Ⅰ、Ⅱ、Ⅲ類尋址方式組合主要用于數據存取類指令和算術/邏輯運算類指令中,而Ⅱ、Ⅳ類尋址方式組合主要用于程序控制類指令中。3.2.5.2指令系統簡表

?數據存取(數據傳送)類指令指令類別LDALDXSTASTXTAXTXA尋址組合類別Ⅰ類Ⅰ類Ⅱ類Ⅱ類Ⅴ類Ⅴ類

?算術/邏輯運算類指令指令類別ADDADCSUBSBCCMPCPX尋址組合類別Ⅰ類Ⅰ類Ⅰ類Ⅰ類Ⅰ類Ⅰ類指令類別ANDORAEORBIT尋址組合類別Ⅰ類Ⅰ類Ⅰ類Ⅰ類指令類別INCDECNEGTSTMULDIV尋址組合類別Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅴ類Ⅴ類指令類別CLRCOMLSLASLLSRASRROLROR尋址組合類別Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類

?程序控制類指令

指令類別JMPBRAJSRBSRBXX尋址組合類別Ⅱ類Ⅳ類Ⅱ類Ⅳ類Ⅳ類匯編源程序格式標號操作碼操作數;注釋冒號或空格空格(一)標號*開頭,本行為注釋行;可執行語句標號必須以字母開頭,由字母、數字、特殊符號組成,長度不大于15個字符。(二)操作碼大寫、小寫等價匯編偽指令ORG,定位偽指令格式:ORG表達式表達式的值賦給程序計數器。EQU ,賦值偽指令。格式:標號EQU表達式把表達式的值賦給前面的標號。該標號不能在程序其它地方再定義。FCB,字節變量定義偽指令格式:標號FCB表達式,表達式,…表達式為空,則操作數為一個字節的零。FDB,雙字節變量定義偽指令。格式:標號FDB表達式,表達式,…雙字節數,高字節在前,低字節在后。存儲區:從現行程序計數器開始。標號被賦值第一個操作數的首地址。操作數可為數字常量、字符常量、符號或表達式。表達式為空,則操作數為兩個字節的零。FCC,字符串變量定義偽指令格式:標號FCC‘字符串’把一個ASCII碼字符串依次存入相應的存儲器中。第一個字符從當前程序計數器值指定地址開始存放。RMB,保留存儲器字節偽指令。格式:標號RMB表達式存儲區:從現行程序計數器開始保留一塊存儲區,保留存儲區的字節長度等于表達式的值。不進行任何初始化。例:ORG$00A0COUNTEQU10SOURCEFCB$23,,$40ASCFCC‘AB’RESULFDB$8130GRRMB723004041428130????……??SOURCEASCRESULTGR7B3.3匯編語言程序設計簡單程序設計結構程序設計

算術運算程序設計代碼和數制轉換程序設計排序、搜索程序設計

浮點運算子程序設計AAOPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2++進位高8位低8位…進位高8位高8位低8位低8位…例3.1雙字節補碼加法子程序功能:將起始地址為OPR1和OPR2的兩個二字節數相加,將結果存RESULT開始的二個單元中。3.3.1簡單程序設計OPR1 EQU $60OPR2 EQU $62DADD: LDA OPR1+1 ADD OPR2+1 STA OPR1+1 LDA OPR1 ADC OPR2 STA OPR1 RTS高8位低8位…進位高8位高8位低8位低8位…OPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2例3.2雙字節減法功能:將起始地址為SOURCE1和SOURCE2的兩個二字節數相減(前者為被減數),將結果存RESULT開始的二個單元中。AASOURCE1SOURCE1+1RESULTRESULT+1SOURCE2SOURCE2+1--高8位低8位…高8位高8位低8位低8位…DSUB:LDASOURCE1+1SUBSOURCE2+1STARESULT+1LDASOURCE1SBCSOURCE2STARESULT RTS高8位低8位…高8位高8位低8位低8位…SOURCE1SOURCE1+1RESULTRESULT+1SOURCE2SOURCE2+1例3.3雙字節求補功能:將OPR1開始二字節求補DNEG:NEGOPR1+1BCSD1INCOPR1D1:RTS

OPR1高低DNEG:COMOPR1 LDAOPR1+1COMA ADC#1 STAOPR1+1CLRAADCOPR1STAOPR1例3.3雙字節拆成四個半字節數據

功能:將SOURCE開始的二個字節拆成四個半字節,并將結果存入RESULT開始的四個單元中。DISA:LDASOURCELDX#RESULTAND#$F0LSRALSRALSRALSRASTA,XINCXLDASOURCEAND#$0F

STA,X

INCXLDASOURCE+1AND#$F0LSRALSRALSRALSRASTA,XINCXLDASOURCE+1AND#$0FSTA,XA

(SOURCE)X(RESULT)A(A)∧#$F0A右移4次(X)

(A)X(X)+1A(SOURCE)A(A)∧#$0F(X)

(A)

A

0CA

(SOURCE+1)A(A)∧#$F0A右移4次X(X)+1(X)

(A)X(X)+1A(SOURCE+1)A(A)∧#$0F(X)

(A)

例3.4查表求數字0

~9的顯示字模子程序

功能:將ACC中存放的0~

9的數字的字模從表中查出,存入RESULT單元中。DISPLDASOURCECMP#$00;可不用

BLODRET;可不用

CMP#$09BHIDRETTAXLDATAB,XSTARESULTDRETRTSTABFCB$3F,$06,$5B,$4F,$66FCB$6D,$7D,$07,$7F,$6F3F065B4F666D7DTABLED分靜態顯示、動態顯示兩種。LED靜態顯示+5VI/O口RLED01滅10亮74LS373G74LS373G74LS373GPC0PC1PC7MC68HC05PB0PB1PB7LED動態顯示PC0PC1PC7MC68HC05PB0

PB5PB6PB7I0Q0I1Q1I7Q7GNDVDDaghI0Q0

I5Q5I6Q6I7Q7GND(2)1.段碼表(1)(3)(4)(9)(8)(6)(7)PC7PC6PC5PC0PC1

9831467…2為小數點,此處未連接0011111100000110$3F$0601011011$5B2.查段碼表DISTA:FCB$3FFCB$06FCB$5BFCB$4FFCB$66FCB$6DFCB$7DFCB$07FCB$6FFCB$7FFCB$77FCB$7CFCB$39FCB$5EFCB$79FCB$71FCB$00FCB$40FCB$38滅中間3.動態刷新軟件延時,延時時間粗略估算。4.程序顯示緩沖區:首地址SOURCE例3.5將自存儲器SOURCE開始的50個數據的累加和存放到自DESI開始的二字節中。SADDLDX#$00CLRASTADESILOOPADDSOURCE,XBCCNEXTINCDESINEXTINCXCPX#50BLOLOOPSTADESI+1

3.3.2結構程序設計datadata…datadataSOURCESOURCE+1DESIDESI+1AA例3.6將自存儲器SOURCE開始的100個數據(字節)中的所有正數相加,并將其累加和存放到自BUFF開始的二字節中。SPADCLRXCLRASTABUFFSTABUFF+1LOOPLDASOURCE,XBMINEXT;N=1?BEQNEXT;Z=1?ADDBUFF+1STABUFF+1BCCNEXTINCBUFFNEXTINCXCPX#100BLOLOOPSOURCEBUFFBUFF+1例3.7將自存儲器SOURCE開始的NUM字節16位無符號數中的最大數找出來,存放到自MAX開始的二字節中。(所有低字節存于高地址)EACHCLRXLDASOURCE,XSTAMAXINCXLDASOURCE,XSTAMAX+1INCXLOOPLDAMAXCMPSOURCE,X BHINEXT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論