指令系統(tǒng)與匯編語言程序設計_第1頁
指令系統(tǒng)與匯編語言程序設計_第2頁
指令系統(tǒng)與匯編語言程序設計_第3頁
指令系統(tǒng)與匯編語言程序設計_第4頁
指令系統(tǒng)與匯編語言程序設計_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3指令系統(tǒng)與匯編語言程序設計兼容以前的S12CPU

豐富、強大、靈活,高速16位處理,共400多條按功能:數(shù)據(jù)傳送、算術運算、邏輯運算、位操作、移位、控制、特殊等,尋址方式多。3.1CPU內部寄存器區(qū)別于I/O寄存器;6個:D,X,Y,SP,PC,CCR江蘇理工學院3.2尋址方式

概念CPU執(zhí)行指令時確定操作數(shù)所在單元地址的方式。操作數(shù)來自:寄存器、指令代碼、存儲單元(都有地址)

S12(X)有9大種尋址方式:(1)隱含尋址(INH)

如ROLA(循環(huán)左移,操作數(shù)A隱含在指令中)(2)立即數(shù)尋址(IMM)

如LDDA#$FF(將十六進制數(shù)FF調入A中,#表示)(3)直接尋址(DIR)

如LDAA$55(8位地址)(4)擴展尋址(EXT)

如LDAA$200A(16位地址)(5)相對尋址(REL)SHIFT:LDAA#$55BRASHIFT(相對地址跳轉)

江蘇理工學院(6)變址尋址(IDX)

特征:以變址寄存器X、Y、SP、PC的內容為基址,再加或減個值,構成最終的地址

5位/9位/16位常數(shù)偏移量的變址尋址如LDD6,X;(6+X)D(A),(6+X+1)D(B)LDAB$FF,Y;($FF+Y)BLDAA$7200,PC;($7200+PC)A

(7)累加器變址尋址(IDX)累加器內容做偏移量的變址尋址如LDAAB,X;(B+X)A

LDAAD,Y;(D+Y)A(8)自加自減的變址尋址(IDX)自動加減(1~8),先加、先減、后加、后減如STAA1,-X;X-1X,A(X)STAA1,-SP;SP-1SP,A(SP)(等效PSHA)LDX2,SP+;(SP)X,SP+2SP(等效PULX)(9)間接變址尋址(IDX)16位常數(shù)/累加器D偏移量的間接變址尋址(內存中再取新地址)如LDAA[1000,X];((1000+X))A

JMP[D,PC];((D+PC))PC

變址尋址重要而常用,表象:指令操作碼后的操作數(shù)是X,Y,SP,PC(指針)江蘇理工學院3.3指令概覽

分類(表3-1):數(shù)據(jù)傳送指令算數(shù)運算指令邏輯指令程序控制指令中斷指令CPU控制指令其它指令注:1、瀏覽書中指令內容2、以后編程時再查閱、體會助記方法:英語含義,如:CLR=CleaRLDAA=LoaDAccumulatorASTAB=SToreAccumulatorBTAB=TransferAtoBMOVB=MoveByteBEQ=BranchEQualzero

……江蘇理工學院3.3.1數(shù)據(jù)傳送類指令1、寄存器加載指令:LoaD

(注:影響標志位)

LDAA#$1FLDAB$40B0LDD2,XLDY2,SP+助記符功能操作LDAA將數(shù)據(jù)載入寄存器A(M)→ALDAB將數(shù)據(jù)載入寄存器B(M)→BLDD將數(shù)據(jù)載入寄存器D(M:M+1)→(A:B)LDS將數(shù)據(jù)載入寄存器SP(M:M+1)→SPH:SPLLDX將數(shù)據(jù)載入變址寄存器X(M:M+1)→XH:XLLDY將數(shù)據(jù)載入變址寄存器Y(M:M+1)→YH:YL江蘇理工學院2、寄存器存儲指令:STore(影響標志位)

STAA$3FSTD-$2000,PCSTY2,+SP助記符功能操作STAA將寄存器A中內容送入內存單元(A)→MSTAB將寄存器B中內容送人內存單元(B)→MSTD將寄存器D中內容送入內存單元(A)→M,(B)→M+1STS將堆棧SP中內容送入內存單元(SPH:SPL)→M:M+1STX將變址寄存器x中內容送人內存單元(XH:XL)→M:M+1STY將變址寄存器Y中內容送入內存單元(YH:YL)→M:M+1江蘇理工學院3、寄存器傳送指令:Transfer注意:TAB、TBA影響標志位,TFR不影響標志位;實際只有上述3條指令,其余寫法是為了兼容老版本MCU8位到16位:通過符號位擴展后傳送16位到8位:舍棄高8位,只傳送低8位例:TABTFRA,YTAP(相當于TFRA,CCR)助記符功能操作TAB將寄存器A中內容送入寄存器B(A)→BTBA將寄存器B中內容送人寄存器A(B)→ATFR寄存器之間的數(shù)據(jù)傳送(A、B、CCR、D、X、Y、SP)→A、B、CCR、D、X、Y、SPTSX將寄存器SP中內容送入寄存器X(SP)→XTSY將寄存器SP中內容送入寄存器Y(SP)→YTXS將寄存器X中內容送入寄存器SP(X)→SPTYS將寄存器Y中內容送入寄存器SP(Y)→SPTPA將寄存器CCR中內容送人寄存器A(CCR)→ATAP將寄存器A中內容送人寄存器CCR(A)→CCR江蘇理工學院4、寄存器交換指令:Exchange建議:平常使用時,不應使用位數(shù)不匹配的方式進行數(shù)據(jù)交換。江蘇理工學院5、內存數(shù)據(jù)傳送指令:Move特點:1、不影響標志位2、允許地址與地址間傳送3、傳送方向是->(例MOVB$1000,$2000)4、16位數(shù)據(jù)結構是高位在前,低位在后(例:MOVW#$100A,$1100)MOVB1,X,2,Y江蘇理工學院6、堆棧操作指令:PuSH、PULl特點:1、各寄存器都可以入棧、出棧2、可以做8位、16位操作3、入棧時SP-1(2),出棧時SP+1(2)江蘇理工學院7、有效地址加載指令:LEA(LoadEffectiveAddress)LEAX$100A,Y注:不影響標志位江蘇理工學院3.3.2算術運算類指令1、加、減法指令:ADD、SUBtract說明:ABAAddBtoA(A+B)SBASubtractBfromA(A–B)江蘇理工學院2、增量、減量指令:

INCrement

、DECrement江蘇理工學院3、比較、檢測指令:CoMPara、TeST特點:1、CMP作減法,結果不回傳,只影響標志位2、TST固定減0,結果不回傳,只影響標志位江蘇理工學院4、求補運算指令:特點:1、用0去減該值2、不對符號位進行判斷江蘇理工學院5、十進制調整指令:DAA(DecimalAdjustA)特點:1、是在加法操作之后進行2、是對A進行壓縮BCD碼加法調整3、只有這一條調整指令例:LDD#$3275ADDB#$69EXGA,BDAAEXGA,BADCA#$26DAA結果:D=?$5944江蘇理工學院6、符號擴展指令:SEX說明:1、根據(jù)最高位的值將8位擴展為16位

2、源:A,B,CCR目的:D,X,Y,SP例:SEXA,X7、乘、除法指令:MULtiply、DIVide江蘇理工學院3.3.3邏輯指令1、基本邏輯運算指令2、清零和取反指令:CLear、COMplement江蘇理工學院3、位操作和位檢測指令BCLR相當于:1.取反然后2.與0的位與操作

(BCLR$20,#$F0)BSET相當于:與1的位或操作(BSET$20,#$0F)注意該類指令與TST、AND的區(qū)別

指定的1位或幾位,非整體;BIT影響標志位,但不修改操作數(shù)助記符功能操作BCLR位清零(M)&(/mm)→MBITA寄存器A與內存按位相“與”(A)

&(M)BITB寄存器A與內存按位相“與”(B)

&(M)BSET位置1(M)|(mm)→M江蘇理工學院4、移位指令LSLLogicShiftLeftASRArithmeticShiftRightRORROtateRight江蘇理工學院特點:1、ASR補最高位,其余補02、移出去的進C標志江蘇理工學院3.3.4程序控制類指令1、無條件轉移指令

JMP(Jump),可以在64K范圍內跳轉2、短分支跳轉指令是在當前PC的值加上一個8位帶符號數(shù)的偏移量,即跳轉范圍:-128~+127BRABRanchAlwaysBRNBRanchNeverBCCBranchifCarryClearBCSBranchifCarrySetBEQBranchifEQual

BMIBranchifMinusBPLBranchifPlusBHIBranchifHigherBHSBranchifHigherorSameBLOBranchifLowerBGTBranchifGreaterThan江蘇理工學院

注意:1、只作檢測,滿足條件轉移,不影響標志位2、結果不回傳例:BRCLR$20,#$81,LP1BRSET$20,#$80,LP2江蘇理工學院3、長分支跳轉指令特點:1、是在當前PC的值加上一個16位帶符號數(shù)的偏移量,即跳轉范圍:-32768~+327672、與JMP指令實現(xiàn)的方法稍有不同,只能跳轉32K距離。

3、與短跳轉指令完全類似江蘇理工學院4、循環(huán)控制指令特點:1、不影響、不依賴標志位

2、轉移范圍是-256~+255ADD:LDX#$0B00LEAY4,XLDAB#4CLCLOOP:LDAAXADCA1,Y+STAA1,X+DBNEB,LOOP江蘇理工學院5、子程序調用與返回指令特點:

1、BSR調用范圍為-128~+1272、JSR調用范圍為-32768~+32767,支持多種尋址方式,直接尋址方式必須在$0000~$00FF內(例:JSR$50)3、CALL用于調用64K以外的子程序,用RTC指令返回江蘇理工學院3.3.5中斷指令特點:1、進入中斷時,硬件自動保護現(xiàn)場,RTI指令將恢復現(xiàn)場及斷點2、SWI指令不受I、X的限制,且執(zhí)行時會自動將I置1(即自動關閉可屏蔽中斷),中斷向量表入口地址$FFF6-$FFF73、各硬件中斷有固定的入口地址表,中斷服務程序需用RTI指令返回江蘇理工學院3.3.6S12CPU控制類指令特點:1、STOP進入偽停機模式,時鐘被關閉,功耗最低;當有中斷或復位時被喚醒2、WAI進入等待模式,時鐘仍在工作,當有中斷或復位時被喚醒,喚醒速度快江蘇理工學院3.3.7其它指令

S12X還提供了高級函數(shù)指令和模糊運算指令,主要有:小值、大值、插值、乘積累加等重要的其它指令程序狀態(tài)寄存器指令

特殊的數(shù)據(jù)訪問指令,通常被用來改變程序狀態(tài)寄存器CCR指令操作尋址方式ANDCCCLCCLICLVORCCPSHCPULCSECSEISEV(CCR)∧(M)=→CCRC=0I=0V=0(CCR)∨(M)→CCR(SP)–1=>SP;(CCR)→M(SP)M(SP)=>CCR;(SP)+1→SPC=1I=1V=1IMMIMMIMMIMMIMMINHINHIMMIMMIMM江蘇理工學院S12X指令系統(tǒng)提供了全局23位地址訪問的指令,包括:

GLDAA、GLDAB、GLDD、GLDS、GLDX、GLDY、GSTAA、GSTAB、GSTD、GSTS、GSTX、GSTY等,

S12X總共新增了84條這類全局尋址指令。全局地址[22:0]由CPU本地地址[15:0]和GPAGE寄存器[22:16]聯(lián)合組成。江蘇理工學院3.4使用匯編語言的程序設計程序:完成特定任務的指令的集合程序設計語言:機器語言(二進制指令代碼,可直接執(zhí)行)匯編語言(特定助記符指令語句,須編譯)高級語言(通用高級語句,須編譯)單片機應用系統(tǒng)的程序,多用匯編語言編制(*.asm文件)或C

一個匯編程序語句<--->一條單片機指令多個匯編語言語句匯編語言程序(源代碼)注:程序需要特定的編譯程序進行編譯,生成二進制機器碼

匯編語言:面向MCU硬件,不易移植,但高效、代碼量小,是學習基礎

江蘇理工學院匯編語言指令格式

[標號:]操作碼[操作數(shù)1][,操作數(shù)2][;注釋]標號該指令的符號地址,標定程序入口或轉移位置注:標號必須以字母開始,分大小寫操作碼助記符,指令所實現(xiàn)的操作功能注:不分大小寫;前面無標號時,至少應保留一個空格;必有操作數(shù)參加操作的數(shù)據(jù)對象,地址、常數(shù)或表達式注:寄存器尋址已歸納到隱含尋址中,當操作數(shù)部分出現(xiàn)寄存器時,通常是寄存器變址尋址;分大小寫注釋為方便閱讀、修改而加的注釋;可有可無注:以“;”開始,本行其后的內容不再編譯注意:必須在英文輸入法或中文半角字符模式下書寫指令,全角字符

錯江蘇理工學院常數(shù)數(shù)據(jù)的表示方法

Freescale規(guī)定,加前綴$十六進制%二進制@八進制’ASCII無十進制#立即數(shù)的標記如:LDAA#$32;立即數(shù)

LDAA$32;地址江蘇理工學院匯編程序偽指令匯編程序使用的輔助性語句,不生成機器碼起始地址偽指令ORG賦值偽指令EQU字節(jié)常量偽指令FCB(DC.B)雙字節(jié)常量偽指令FDB(DC.W)字符量偽指令FCC

例:注:定界符可以是’、/、”,建議用’

ORG$0008HSTART:LDAA#$FF

PORTBEQU$0001BIT0EQU%0000001BSETPORTB,BIT0;等價于

BSET$0001,%00000001

ORG$0200TABLE:FCB$13,18,N1+6,21

ORG$1000LIST:FDB$0519,$2000

ORG$2000STAR:FCC’ABCD’江蘇理工學院【例3-2】大小排序LDX#$2000;數(shù)據(jù)首地址CLC;C清零LDY#0;Y清零BEGIN:LDAA0,X;(0+X)→ALDAB1,X;(1+X)→ACBA;(A)-(B)BCSDONE;減有借位(前小后;大),無需調整,跳轉BEQFLAG;相等,跳轉STAA1,X;A→(1+X)STAB0,X;B→(0+X)BRADONE;調整完畢,跳轉FLAG:INY;1+Y→YDONE:BRA*;結束,踏步等待比較RAM區(qū)內兩個相鄰單元中無符號數(shù)的大小,按小數(shù)在前、大數(shù)在后的規(guī)則,重新存放(首地址$2000)。若相等則Y寄存器加1。江蘇理工學院3.4.2匯編語言編程實例1.基本數(shù)據(jù)傳遞與算術運算程序【例3-1】BCD加法,見書2.循環(huán)控制程序【例3-3】2個8字節(jié)數(shù)求和;**********************************ADD8:LDX#$0B01LEAY8,XLDAB#8CLCLOOP:LDAAXADCA1,Y+STAA1,X+DBNEB,LOOP$0B01...$0B09被加數(shù)0字節(jié)被加數(shù)1字節(jié)……加數(shù)0字節(jié)加數(shù)1字節(jié)……RAM區(qū)江蘇理工學院3.延時子程序硬件延時內部定時器實現(xiàn),精確,不占CPU軟件延時循環(huán)執(zhí)行指令,粗略,占用CPU【例3-4】2ms延時。

CPU執(zhí)行時間:

T=NxTB

T總執(zhí)行時間,此2msN總時鐘周期數(shù)TB總線時鐘周期(如1/8M=125ns)

則需N=T/TB=2ms/125ns=16000程序運行:N=4+2+3+(1+3)(TCOUNT-1)+(1+1)+3+5

故:TCOUNT=3996.25≈3996

注:其它時間可套用此,如20ms改TCOUNT為39996(或40000)

;*************************************JSRDELAY1;4;*************************************TCOUNTEQU3996;無DELAY1:PSHX;2LDX#TCOUNT;3DLOOP:DEX;1BNEDLOOP;3/1PULX;3RTS;5江蘇理工學院又【例3-5】雙重循環(huán)的100ms延時。忽略配合指令的執(zhí)行時間,粗略估算:內循環(huán)=200x(1+1+3)T=1000T總時間=100x1000T=100000T2MHz晶振時,總線頻率=1MHz

T=1us

子程序延時時間即100ms;////////////////////////////////////////////////////////////////////;子程序DELAY:利用寄存器X、Y,;執(zhí)行兩重循環(huán)實現(xiàn)延時。;////////////////////////////////////////////////////////////////////DELAY:PSHXPSHYLDX#100DELAY1:LDY#200DELAY2:NOP;1TNOP;1TDBNEY,DELAY2;3TDBNEX,DELAY1PULYPULXRTS注:其它延時時間套此;MCU總線頻率不同延時不同江蘇理工學院4.數(shù)據(jù)查表程序【例3-6】將A中的兩個4位十六進制數(shù)轉換為ASCII碼,分別存入$2080、$2081中。(0~9的ASCII碼:$30~$39,A~F:$41~$46);**************************************************;子程序TRANS:十六進制數(shù)轉換為ASCII碼;入口參數(shù):(A)=十六進制數(shù),高4位為0;出口參數(shù):(B)=ASCII碼;**************************************************TRANS:PSHX;X壓棧

LDX#TABLE;置表地址

LDABA,X;查表,(X+A)BPULX;X出棧

RTS;返回TABLE:‘0123456789ABCDEF’;主程序段********************

ORG$8000HEXA:TFRA,XANDA#$0FJSRTRANSSTAB$2080

TFRX,ALSRALSRALSRALSRAJSRTRANSSTAB$2081……江蘇理工學院5.多分支結構程序(類似查表);根據(jù)4x4鍵盤的鍵號執(zhí)行相應子程序。

………………KeyMain:JSRKey16;調用鍵號獲取子程序(鍵號:0~15,16無鍵按下)LDAAKey_Numb;加載鍵號到A,Key_Numb預先有定義

LSLA;A=A×2(分支編號)

LDX#Jmp_Table;給X賦表首地址

LDYA,X;給Y賦為(X+A),即加偏移A后查得分支地址

溫馨提示

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

評論

0/150

提交評論