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

下載本文檔

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

文檔簡介

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

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

用堆棧指針的變址尋址

另:隱含尋址

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

例:AND#$0FCPX#10

尋址區(qū)域:用戶ROM或Flash3.1.2直接尋址

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

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

例:LDA$40或LDA<$40

尋址區(qū)域:存儲器中最低256個字節(jié),即$0000~$00FF

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

例:SUB$1540

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

類別:間接尋址

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

例:ADD,X

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

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

機器語言OPCODE,n

例:BLOLOOPBSRDISPLY

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

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

例:DEC$40,X

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

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

例:ADD$1240,X

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

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

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

例:DEC$40,SP

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

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

例:ADD$1240,SP

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

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

例:BSET5,$40

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

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

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

機器語言無

例:TAX

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

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

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

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

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

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

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

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

MC68HC08的指令系統(tǒng)可分為4類:

?數(shù)據(jù)存取類指令

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

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

?位操作類指令學習指令系統(tǒng)必須掌握的內(nèi)容:1)類別;

2)尋址方式;

3)表達形式;

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

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

*表示相乘運算;

表示邏輯與;

表示邏輯或;

⊕表示邏輯異或;

Y

表示Y的反碼;

(Y)

表示Y中的內(nèi)容;

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中的內(nèi)容((Y))表示以Y中的內(nèi)容作地址,該地址中的內(nèi)容執(zhí)行取數(shù)操作并按取入的數(shù)來改變N,Z標志位,且V=0操作說明43IX2((X)+addr16)→

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

data→XLDX#data寄存器X取數(shù)累加器取數(shù)周期數(shù)字節(jié)尋址方式操作指令類型表1數(shù)據(jù)存取類指令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續(xù)表154SP2(X)→(SP)+addr16STXaddr16,SP操作說明周期數(shù)字節(jié)尋址方式操作指令類型43SP1(X)→(SP)+addr8STXaddr8,SP43IX2(X)→(X)+addr16STXaddr16,X32IX1(X)→(X)+addr8STXaddr8,X21IX(X)→(X)STX,X43EXT(X)→addr16STXaddr1632DIR(X)→addr8STXaddr8寄存器X存數(shù)43IX2(A)→(X)+addr16STAaddr16,X32IX1(A)→(X)+addr8STAaddr8,X21IX(A)→(X)STA,X43EXT(A)→addr16STAaddr16(A)→addr8STAaddr8累加器存數(shù)執(zhí)行存數(shù)操作并按存入的數(shù)來改變N,Z標志位,且V=032DIRSTAaddr8,SPSTAaddr16,SP(A)→(SP)+addr8(A)→(SP)+addr163445SP1SP242(H)→addr8(X)→addr8+1STHXaddr8DIR續(xù)表221INH(H:X)-1→SP操作說明周期數(shù)字節(jié)尋址方式操作指令類型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

執(zhí)行結果: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)執(zhí)行前:X中內(nèi)容為$50,$50RAM單元內(nèi)容為$20執(zhí)行此段程序后X中內(nèi)容為多少?執(zhí)行后:X中內(nèi)容為單元號為$20+$0F=$2FRAM單元的內(nèi)容。

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

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

?加減法運算指令

?比較指令

?乘法運算指令

?增量減量指令

?取負指令和零測試指令算術運算類指令如表2所示:表2算術運算類指令根據(jù)結果影響V、H,N、Z,C標志操作說明周期數(shù)字節(jié)尋址方式操作指令類型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續(xù)表2根據(jù)結果影響V、H,N、Z,C標志操作說明周期數(shù)字節(jié)尋址方式操作指令類型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續(xù)表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根據(jù)結果影響V、N、Z標志11IMM(A)+1→AINCA加1指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型MULDIV(A)*(X)→X:A(H:A)/(X)→A,余數(shù)→H影響Z、CINHINH1751根據(jù)結果影響V、N、Z,C標志操作說明周期數(shù)字節(jié)尋址方式操作指令類型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續(xù)表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根據(jù)結果影響V、N、Z、C標志11INH$00–(A)→ANEGA取負指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型DAA十進制調整A21INH根據(jù)結果影響N、Z標志,而V=0續(xù)表2例:LDA#$60ADD#$30執(zhí)行后:A中為$90。例:LDX#$80LDA$1080SUB,X執(zhí)行前:$80單元中的數(shù)為$20,$1080單元中的數(shù)為$33執(zhí)行后:A中的數(shù)為多少?

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

代替SUB,X

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

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

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

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

?位測試指令

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

?移位指令包括算術左移指令、算術右移指令、邏輯左移指令、邏輯右移指令、循環(huán)左移指令和循環(huán)右移指令邏輯運算類指令如表3所示:表3邏輯運算類指令根據(jù)結果影響N、Z標志,而V=0操作說明周期數(shù)字節(jié)尋址方式操作指令類型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根據(jù)結果影響N、Z標志,而V=0操作說明周期數(shù)字節(jié)尋址方式操作指令類型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續(xù)表3續(xù)表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根據(jù)結果影響N、Z標志,而V=0,C=111INH(A)→ACOMA取反指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型CLRaddr8,SP$00→(SP)+addr843SP1Z=1,而V=0,N=0算術右移指令續(xù)表353SP1ASRaddr8,SP42IX1ASRaddr8,X31IXASR,X42DIRASRaddr811INHASRX11INHASRACb7b0操作說明周期數(shù)字節(jié)尋址方式操作指令類型53SP1ASLaddr8,SP42IX1ASLaddr8,X31IXASL,X42DIRASLaddr811INHASLX11INHASLA算術左移指令C0b7b0根據(jù)結果影響V、NZ、C標志根據(jù)結果影響V、NZ、C標志續(xù)表353SP1LSRaddr8,SP42IX1LSRaddr8,X31IXLSR,X42DIRLSRaddr811INHLSRX11INHLSRACb7b0類型邏輯左移指令C0b7b0操作操作說明周期數(shù)字節(jié)尋址方式指令53SP1LSLaddr8,SP42IX1LSLaddr8,X31IXLSL,X42DIRLSLaddr811INHLSLX11INHLSLA根據(jù)結果影響V、NZ、C標志根據(jù)結果影響V、Z、C標志,而N=0邏輯右移指令0續(xù)表353SP1RORaddr8,SP42IX1RORaddr8,X31IXROR,X42DIRRORaddr811INHRORX11INHRORACb7b0循環(huán)左移指令Cb7b0操作說明周期數(shù)字節(jié)尋址方式操作指令類型53SP1ROLaddr8,SP42IX1ROLaddr8,X31IXROL,X42DIRROLaddr811INHROLX11INHROLA根據(jù)結果影響V、NZ、C標志根據(jù)結果影響V、NZ、C標志循環(huán)右移指令例: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

所示:操作說明周期數(shù)字節(jié)尋址方式操作指令類型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類型指令操作尋址方式字節(jié)周期數(shù)操作說明返回指令RTSRTI(SP)+1→SP,((SP))→PCH(SP)+1→SP,((SP))→PCLINHCCR、ACC、X、PCH、PCL依次從棧中彈出INH1147續(xù)表4根據(jù)結果影響V、H、I、N、Z、C標志3.2.3.2條件轉移指令

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

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

?比較轉移指令

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

5

所示:類型指令操作及測試條件尋址方式字節(jié)周期數(shù)操作說明標志位測試轉移指令(無符號數(shù)比較轉移指令)BHIrel大于轉移C∨Z=0BHSrel大于等于轉移C=0BLOrel小于轉移C=1BLSrel小于等于轉移C∨Z=1BEQrel等于轉移Z=1BNErel不等于轉移Z=0標志位測試轉移指令(有符號數(shù)比較轉移)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標志位測試轉移操作說明周期數(shù)字節(jié)尋址方式測試條件指令類型續(xù)表5relrelrelrelrelrelrelrelrelrelrel222222222222333333333333BPLrelBMIrelBNErelBEQrelN=0N=1Z=1Z=0操作說明周期數(shù)字節(jié)尋址方式測試轉移條件指令類型64SP1DBNZaddr8,SP,rel42IXDBNZX,rel53IX1DBNZaddr8,X,rel32INHDBNZXrel32INHDBNZArel53DIR(addr8)-1→addr8,≠0DBNZaddr8,rel64SP142IX+53IX1+43IMM4353DIR(A)-(addr8)=0

比較轉移指令續(xù)表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控制類指令類型指令操作尋址方式字節(jié)周期數(shù)操作說明標志控制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位操作類指令位操作指令包括置位/清零(復位)指令和位測試轉移指令,位的尋址采用對所尋址位所在的內(nèi)部RAM單元直接尋址的方式(DIR)加上對所尋址位直接位尋址的方式(bit)相結合的尋址方式。

?置位/清零指令

?位測試轉移指令位操作指令如表7所示:表7位操作類指令類型指令測試條件若尋址方式字節(jié)周期數(shù)置位清零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指令系統(tǒng)識記簡表3.2.5.1各類指令中所采用尋址方式組合類別

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

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

?Ⅲ類含:AXaddr8,Xaddr8,X

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

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

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

?程序控制類指令

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

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

浮點運算子程序設計AAOPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2++進位高8位低8位…進位高8位高8位低8位低8位…例3.1雙字節(jié)補碼加法子程序功能:將起始地址為OPR1和OPR2的兩個二字節(jié)數(shù)相加,將結果存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雙字節(jié)減法功能:將起始地址為SOURCE1和SOURCE2的兩個二字節(jié)數(shù)相減(前者為被減數(shù)),將結果存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雙字節(jié)求補功能:將OPR1開始二字節(jié)求補DNEG:NEGOPR1+1BCSD1INCOPR1D1:RTS

OPR1高低DNEG:COMOPR1 LDAOPR1+1COMA ADC#1 STAOPR1+1CLRAADCOPR1STAOPR1例3.3雙字節(jié)拆成四個半字節(jié)數(shù)據(jù)

功能:將SOURCE開始的二個字節(jié)拆成四個半字節(jié),并將結果存入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查表求數(shù)字0

~9的顯示字模子程序

功能:將ACC中存放的0~

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

BLODRET;可不用

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

PB5PB6PB7I0Q0I1Q1I7Q7GNDVDDaghI0Q0

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

9831467…2為小數(shù)點,此處未連接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.動態(tài)刷新軟件延時,延時時間粗略估算。4.程序顯示緩沖區(qū):首地址SOURCE例3.5將自存儲器SOURCE開始的50個數(shù)據(jù)的累加和存放到自DESI開始的二字節(jié)中。SADDLDX#$00CLRASTADESILOOPADDSOURCE,XBCCNEXTINCDESINEXTINCXCPX#50BLOLOOPSTADESI+1

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

溫馨提示

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

評論

0/150

提交評論