




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第三章MC68HC08單片機指令系統(tǒng)3.1尋址方式3.2指令系統(tǒng)3.3匯編語言程序設(shè)計3.1尋址方式3.1.1立即尋址尋址方式總表直接尋直接尋址間接尋即無偏移量變址
址方式擴展尋址址方式:尋址位尋址立即尋址相對尋址:直接變址尋址用變址寄存器的變址尋址位尋址
用堆棧指針的變址尋址
另:隱含尋址
類別:立即尋址概念:操作數(shù)包含于指令中,即在操作碼的后續(xù)字節(jié)中表達(dá):匯編語言#data機器語言O(shè)PCODE,n
例:AND#$0FCPX#10
尋址區(qū)域:用戶ROM或Flash3.1.2直接尋址
類別:直接尋址(零頁尋址)
概念:指令中直接給出存放操作數(shù)的低位字節(jié)地址,即操作數(shù)的有效地址EA的低位存放于操作碼后續(xù)的一個字節(jié)中,地址的高位字節(jié)默認(rèn)為$00,且不含在指令中。在單字節(jié)地址前加符號“<”表示直接尋址。表達(dá):匯編語言addr8機器語言O(shè)PCODE,n
例:LDA$40或LDA<$40
尋址區(qū)域:存儲器中最低256個字節(jié),即$0000~$00FF
類別:直接尋址概念:指令中直接給出存放操作數(shù)的2字節(jié)地址,即操作數(shù)的有效地址EA存放于操作碼后續(xù)的2個字節(jié)中表達(dá):匯編語言addr16機器語言O(shè)PCODE,m,n
例:SUB$1540
尋址區(qū)域:存儲器中的任何一個字節(jié),即$0000~$FFFF3.1.3擴展尋址
類別:間接尋址
概念:指令中指出存放操作數(shù)的1或2字節(jié)地址由變址寄存器H:X給出,如果沒有一個指令修改H寄存器中的內(nèi)容,H寄存器中的值將默認(rèn)為$00。該尋址方式可以移動鏈表指針或鎖定一個經(jīng)常使用的RAM地址或輸入輸出地址。表達(dá):匯編語言,X機器語言O(shè)PCODE
例:ADD,X
尋址區(qū)域:存儲器中的任何地方3.1.4無偏移量變址尋址(IX)3.1.5相對尋址
類別:變址尋址概念:指令中指出如果發(fā)生轉(zhuǎn)移,轉(zhuǎn)移地址由操作碼后提供的8位有符號整數(shù)(1字節(jié))作為偏移量加上PC提供的基地址(PC的當(dāng)前值)而得出。相對尋址只用于轉(zhuǎn)移指令(包括轉(zhuǎn)子指令)。表達(dá):匯編語言標(biāo)號
機器語言O(shè)PCODE,n
例:BLOLOOPBSRDISPLY
尋址區(qū)域:用戶ROM或Flash中PC當(dāng)前值所表達(dá)地址的-128到+127(或操作碼起始地址的-126到+129)
類別:變址尋址概念:指令中指出存放操作數(shù)的有效地址EA由變址寄存器H:X提供的基地址和操作碼后提供的8位無符號整數(shù)(1字節(jié))的偏移量相加而得出。表達(dá):匯編語言偏移量,X機器語言O(shè)PCODE,n
例:DEC$40,X
尋址區(qū)域:存儲器中的任何地方3.1.68位偏移量變址尋址(IX1)3.1.716位偏移量變址尋址(IX2)
類別:變址尋址概念:指令中指出存放操作數(shù)的有效地址EA由變址寄存器H:X提供的基地址和操作碼后提供的16位無符號整數(shù)(2字節(jié))的偏移量相加而得出。表達(dá):匯編語言偏移量,X機器語言O(shè)PCODE,m,n
例:ADD$1240,X
尋址區(qū)域:存儲器中的任何地方3.1.8用堆棧指針的8位偏移量變址尋址
類別:變址尋址概念:指令中指出存放操作數(shù)的有效地址EA由堆棧指針SP提供的基地址和操作碼后提供的8位無符號整數(shù)(1字節(jié))的偏移量相加而得出。該尋址方式可方便訪問堆棧中的數(shù)據(jù),但訪問時間將會長一些。
表達(dá):匯編語言偏移量,SP機器語言O(shè)PCODE,n
例:DEC$40,SP
尋址區(qū)域:堆棧中的任何地方3.1.9用堆棧指針的16位偏移量變址尋址
類別:變址尋址概念:指令中指出存放操作數(shù)的有效地址EA由堆棧指針SP提供的基地址和操作碼后提供的16位無符號整數(shù)(2字節(jié))的偏移量相加而得出。表達(dá):匯編語言偏移量,SP機器語言O(shè)PCODE,m,n
例:ADD$1240,SP
尋址區(qū)域:堆棧中的任何地方3.1.10直接位尋址
類別:直接位尋址概念:指令中指出存放位操作數(shù)(0或1)的直接位地址,該位地址由操作碼中的相應(yīng)位來表達(dá)。表達(dá):匯編語言bit機器語言O(shè)PCODE中的相應(yīng)位
例:BSET5,$40
尋址區(qū)域:存儲器中的前256個字節(jié)中的任何可讀寫的位,即$0000~$
00FF中的任何可讀寫的位3.1.11隱含尋址
類別:隱含尋址概念:指令中以隱含方式指出存放操作數(shù)的地址,該地址以操作碼來指定,而不提供地址的任何信息。表達(dá):匯編語言指令本身
機器語言無
例: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ù)的地址,有效目標(biāo)地址由操作碼的后繼字節(jié)給出,數(shù)據(jù)傳送后,H:X自動加1。常用來在間接尋址頁中的數(shù)據(jù)塊傳送,用這種尋址方式的指令不影響累加器的值。例如MOVX+,$184.直接尋址到自動變址尋址有效源地址由操作碼的后繼字節(jié)給出,H:X中的內(nèi)容作為存放目標(biāo)操作數(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ù)存取類指令
?算術(shù)/邏輯運算類指令又分:算術(shù)運算類指令和邏輯運算類指令
?程序控制類指令又分:無條件/條件轉(zhuǎn)移類指令和控制類指令
?位操作類指令學(xué)習(xí)指令系統(tǒng)必須掌握的內(nèi)容:1)類別;
2)尋址方式;
3)表達(dá)形式;
4)功能和對標(biāo)志位的影響;
5)執(zhí)行過程和時序3.2.1數(shù)據(jù)存取類指令數(shù)據(jù)存取類指令的目標(biāo)單元是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標(biāo)志位,且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標(biāo)志位,且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標(biāo)志位,且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不影響標(biāo)志位不影響標(biāo)志位VHINZC例:LDA#$05LDA$05LDA$1030LDX#$05LDX$05LDX$1030#$05A($0005)A($1030)A#$05X($0005)X($1030)X例:LDX#$89LDA,X
執(zhí)行結(jié)果: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算術(shù)/邏輯運算類指令又分:算術(shù)運算類指令和邏輯運算類指令。3.2.2.1算術(shù)運算類指令
MC68HC08的算術(shù)運算指令一般均隱含為操作數(shù)與累加器A進行算術(shù)運算或存儲器本身以及變址寄存器X進行算術(shù)運算。算術(shù)運算指令又分為:
?加減法運算指令
?比較指令
?乘法運算指令
?增量減量指令
?取負(fù)指令和零測試指令算術(shù)運算類指令如表2所示:表2算術(shù)運算類指令根據(jù)結(jié)果影響V、H,N、Z,C標(biāo)志操作說明周期數(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加法指令A(yù)DDaddr8,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ù)結(jié)果影響V、H,N、Z,C標(biāo)志操作說明周期數(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ù)結(jié)果影響V、N、Z標(biāo)志11IMM(A)+1→AINCA加1指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型MULDIV(A)*(X)→X:A(H:A)/(X)→A,余數(shù)→H影響Z、CINHINH1751根據(jù)結(jié)果影響V、N、Z,C標(biāo)志操作說明周期數(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ù)結(jié)果影響V、N、Z、C標(biāo)志11INH$00–(A)→ANEGA取負(fù)指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型DAA十進制調(diào)整A21INH根據(jù)結(jié)果影響N、Z標(biāo)志,而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
結(jié)果如何?減法運算后,差不回送A,A中仍然是$33,減法的結(jié)果通過標(biāo)志位反映。例:NEG$60執(zhí)行前:$60單元中的數(shù)為$03執(zhí)行后:$60單元中的數(shù)為$FD,是-03H的補碼。例:LDX#$92TSTX執(zhí)行后:結(jié)果只影響標(biāo)志位
$92-$00=$92,結(jié)果N=1,Z=03.2.2.2邏輯運算類指令
MC68HC08的邏輯運算指令又分為:
?基本邏輯操作指令包括邏輯與、邏輯或和邏輯異或指令
?位測試指令
?簡單邏輯操作指令包括清零指令和取反指令
?移位指令包括算術(shù)左移指令、算術(shù)右移指令、邏輯左移指令、邏輯右移指令、循環(huán)左移指令和循環(huán)右移指令邏輯運算類指令如表3所示:表3邏輯運算類指令根據(jù)結(jié)果影響N、Z標(biāo)志,而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邏輯與指令A(yù)NDaddr8,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ù)結(jié)果影響N、Z標(biāo)志,而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ù)結(jié)果影響N、Z標(biāo)志,而V=0,C=111INH(A)→ACOMA取反指令操作說明周期數(shù)字節(jié)尋址方式操作指令類型CLRaddr8,SP$00→(SP)+addr843SP1Z=1,而V=0,N=0算術(shù)右移指令續(xù)表353SP1ASRaddr8,SP42IX1ASRaddr8,X31IXASR,X42DIRASRaddr811INHASRX11INHASRACb7b0操作說明周期數(shù)字節(jié)尋址方式操作指令類型53SP1ASLaddr8,SP42IX1ASLaddr8,X31IXASL,X42DIRASLaddr811INHASLX11INHASLA算術(shù)左移指令C0b7b0根據(jù)結(jié)果影響V、NZ、C標(biāo)志根據(jù)結(jié)果影響V、NZ、C標(biāo)志續(xù)表353SP1LSRaddr8,SP42IX1LSRaddr8,X31IXLSR,X42DIRLSRaddr811INHLSRX11INHLSRACb7b0類型邏輯左移指令C0b7b0操作操作說明周期數(shù)字節(jié)尋址方式指令53SP1LSLaddr8,SP42IX1LSLaddr8,X31IXLSL,X42DIRLSLaddr811INHLSLX11INHLSLA根據(jù)結(jié)果影響V、NZ、C標(biāo)志根據(jù)結(jié)果影響V、Z、C標(biāo)志,而N=0邏輯右移指令0續(xù)表353SP1RORaddr8,SP42IX1RORaddr8,X31IXROR,X42DIRRORaddr811INHRORX11INHRORACb7b0循環(huán)左移指令Cb7b0操作說明周期數(shù)字節(jié)尋址方式操作指令類型53SP1ROLaddr8,SP42IX1ROLaddr8,X31IXROL,X42DIRROLaddr811INHROLX11INHROLA根據(jù)結(jié)果影響V、NZ、C標(biāo)志根據(jù)結(jié)果影響V、NZ、C標(biāo)志循環(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程序控制類指令又分:無條件轉(zhuǎn)移指令/條件轉(zhuǎn)移指令和控制類指令。3.2.3.1無條件轉(zhuǎn)移指令
MC68HC08的無條件轉(zhuǎn)移指令又分為:
?無條件跳轉(zhuǎn)指令
?轉(zhuǎn)子程序指令
?返回指令無條件轉(zhuǎn)移指令如表
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無條件跳轉(zhuǎn)指令表4無條件轉(zhuǎn)移指令轉(zhuǎn)子程序指令EXT類型指令操作尋址方式字節(jié)周期數(shù)操作說明返回指令RTSRTI(SP)+1→SP,((SP))→PCH(SP)+1→SP,((SP))→PCLINHCCR、ACC、X、PCH、PCL依次從棧中彈出INH1147續(xù)表4根據(jù)結(jié)果影響V、H、I、N、Z、C標(biāo)志3.2.3.2條件轉(zhuǎn)移指令
MC68HC08的條件轉(zhuǎn)移指令又分為:
?標(biāo)志位測試轉(zhuǎn)移指令(包括無符號數(shù)比較轉(zhuǎn)移指令和有符號數(shù)比較轉(zhuǎn)移指令)
?比較轉(zhuǎn)移指令
?減1比較轉(zhuǎn)移指令條件轉(zhuǎn)移指令如表
5
所示:類型指令操作及測試條件尋址方式字節(jié)周期數(shù)操作說明標(biāo)志位測試轉(zhuǎn)移指令(無符號數(shù)比較轉(zhuǎn)移指令)BHIrel大于轉(zhuǎn)移C∨Z=0BHSrel大于等于轉(zhuǎn)移C=0BLOrel小于轉(zhuǎn)移C=1BLSrel小于等于轉(zhuǎn)移C∨Z=1BEQrel等于轉(zhuǎn)移Z=1BNErel不等于轉(zhuǎn)移Z=0標(biāo)志位測試轉(zhuǎn)移指令(有符號數(shù)比較轉(zhuǎn)移)BGErel大于等于轉(zhuǎn)移N⊕V=0BGTrel大于轉(zhuǎn)移Z∨(N⊕V)=0BLTrel小于轉(zhuǎn)移N⊕V=1BLErel小于等于轉(zhuǎn)移Z∨(N⊕V)=1表5條件轉(zhuǎn)移指令relrelrelrelrelrelrelrelrelrel22222222223333333333IRQ腳=0BILrelIRQ腳=1BIHrelI=0BMCrelI=1BMSrelH=0BHCCrelH=1BHCSrelC=0BCCrelrelC=1BCSrel標(biāo)志位測試轉(zhuǎn)移操作說明周期數(shù)字節(jié)尋址方式測試條件指令類型續(xù)表5relrelrelrelrelrelrelrelrelrelrel222222222222333333333333BPLrelBMIrelBNErelBEQrelN=0N=1Z=1Z=0操作說明周期數(shù)字節(jié)尋址方式測試轉(zhuǎn)移條件指令類型64SP1DBNZaddr8,SP,rel42IXDBNZX,rel53IX1DBNZaddr8,X,rel32INHDBNZXrel32INHDBNZArel53DIR(addr8)-1→addr8,≠0DBNZaddr8,rel64SP142IX+53IX1+43IMM4353DIR(A)-(addr8)=0
比較轉(zhuǎn)移指令續(xù)表5CBEQaddr8,rel減1比較轉(zhuǎn)移指令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標(biāo)志控制指令
?空操作指令
?復(fù)位指令
?省電控制指令(低功耗指令)?軟件中斷指令控制類指令如表6所示:表6控制類指令類型指令操作尋址方式字節(jié)周期數(shù)操作說明標(biāo)志控制SEC1→CINH11CLC0→CINH11SEI1→IINH12CLI0→IINH12空操作NOPINH11BRNrelINH21復(fù)位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位操作類指令位操作指令包括置位/清零(復(fù)位)指令和位測試轉(zhuǎn)移指令,位的尋址采用對所尋址位所在的內(nèi)部RAM單元直接尋址的方式(DIR)加上對所尋址位直接位尋址的方式(bit)相結(jié)合的尋址方式。
?置位/清零指令
?位測試轉(zhuǎn)移指令位操作指令如表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ù)存取類指令和算術(shù)/邏輯運算類指令中,而Ⅱ、Ⅳ類尋址方式組合主要用于程序控制類指令中。3.2.5.2指令系統(tǒng)簡表
?數(shù)據(jù)存?。〝?shù)據(jù)傳送)類指令指令類別LDALDXSTASTXTAXTXA尋址組合類別Ⅰ類Ⅰ類Ⅱ類Ⅱ類Ⅴ類Ⅴ類
?算術(shù)/邏輯運算類指令指令類別ADDADCSUBSBCCMPCPX尋址組合類別Ⅰ類Ⅰ類Ⅰ類Ⅰ類Ⅰ類Ⅰ類指令類別ANDORAEORBIT尋址組合類別Ⅰ類Ⅰ類Ⅰ類Ⅰ類指令類別INCDECNEGTSTMULDIV尋址組合類別Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅴ類Ⅴ類指令類別CLRCOMLSLASLLSRASRROLROR尋址組合類別Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類Ⅲ類
?程序控制類指令
指令類別JMPBRAJSRBSRBXX尋址組合類別Ⅱ類Ⅳ類Ⅱ類Ⅳ類Ⅳ類匯編源程序格式標(biāo)號操作碼操作數(shù);注釋冒號或空格空格(一)標(biāo)號*開頭,本行為注釋行;可執(zhí)行語句標(biāo)號必須以字母開頭,由字母、數(shù)字、特殊符號組成,長度不大于15個字符。(二)操作碼大寫、小寫等價匯編偽指令ORG,定位偽指令格式:ORG表達(dá)式表達(dá)式的值賦給程序計數(shù)器。EQU ,賦值偽指令。格式:標(biāo)號EQU表達(dá)式把表達(dá)式的值賦給前面的標(biāo)號。該標(biāo)號不能在程序其它地方再定義。FCB,字節(jié)變量定義偽指令格式:標(biāo)號FCB表達(dá)式,表達(dá)式,…表達(dá)式為空,則操作數(shù)為一個字節(jié)的零。FDB,雙字節(jié)變量定義偽指令。格式:標(biāo)號FDB表達(dá)式,表達(dá)式,…雙字節(jié)數(shù),高字節(jié)在前,低字節(jié)在后。存儲區(qū):從現(xiàn)行程序計數(shù)器開始。標(biāo)號被賦值第一個操作數(shù)的首地址。操作數(shù)可為數(shù)字常量、字符常量、符號或表達(dá)式。表達(dá)式為空,則操作數(shù)為兩個字節(jié)的零。FCC,字符串變量定義偽指令格式:標(biāo)號FCC‘字符串’把一個ASCII碼字符串依次存入相應(yīng)的存儲器中。第一個字符從當(dāng)前程序計數(shù)器值指定地址開始存放。RMB,保留存儲器字節(jié)偽指令。格式:標(biāo)號RMB表達(dá)式存儲區(qū):從現(xiàn)行程序計數(shù)器開始保留一塊存儲區(qū),保留存儲區(qū)的字節(jié)長度等于表達(dá)式的值。不進行任何初始化。例:ORG$00A0COUNTEQU10SOURCEFCB$23,,$40ASCFCC‘AB’RESULFDB$8130GRRMB723004041428130????……??SOURCEASCRESULTGR7B3.3匯編語言程序設(shè)計簡單程序設(shè)計結(jié)構(gòu)程序設(shè)計
算術(shù)運算程序設(shè)計代碼和數(shù)制轉(zhuǎn)換程序設(shè)計排序、搜索程序設(shè)計
浮點運算子程序設(shè)計AAOPR1OPR1+1RESULTRESULT+1OPR2OPR2+1RESULT+2++進位高8位低8位…進位高8位高8位低8位低8位…例3.1雙字節(jié)補碼加法子程序功能:將起始地址為OPR1和OPR2的兩個二字節(jié)數(shù)相加,將結(jié)果存RESULT開始的二個單元中。3.3.1簡單程序設(shè)計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ù)),將結(jié)果存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é),并將結(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結(jié)構(gòu)程序設(shè)計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)系上傳者。文件的所有權(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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025財產(chǎn)信托合同模板
- 中班安全教育《禁止的事情不能做》教案及課件大綱
- 2025《產(chǎn)品代理合同范本》
- 2025年二房東出租房屋租賃合同模板
- 2025科技公司租賃合同模板
- 2025裝飾裝修工程勞務(wù)總承包合同
- 2025關(guān)于商業(yè)建筑設(shè)計合同
- 2025工程承包合作合同協(xié)議
- 玩具管理員課件
- 幼兒園安全教育之乘車安全
- 幼兒園小班健康《打針吃藥我不怕》課件
- 新高考背景下高考數(shù)學(xué)重點板塊分析與教學(xué)建議課件
- 肥胖患者麻醉管理專家共識
- 全廠接地裝置安裝施工方案
- 成都市2022級(2025屆)高中畢業(yè)班摸底測試(零診) 語文試卷(含答案)
- 中國系統(tǒng)性紅斑狼瘡診療指南
- 部編人教版高中英語選擇性必修二教學(xué)設(shè)計全套
- 浙江省杭州市余杭區(qū)2023-2024學(xué)年六年級下學(xué)期期中數(shù)學(xué)試卷
- 建筑邊坡工程監(jiān)測技術(shù)標(biāo)準(zhǔn)
- 中國應(yīng)急管理的演化歷程
- 2023年江蘇省徐州市中考地理真題含解析
評論
0/150
提交評論