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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

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

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

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

特征:以變址寄存器X、Y、SP、PC的內(nèi)容為基址,再加或減個(gè)值,構(gòu)成最終的地址

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)累加器內(nèi)容做偏移量的變址尋址如LDAAB,X;(B+X)A

LDAAD,Y;(D+Y)A(8)自加自減的變址尋址(IDX)自動(dòng)加減(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偏移量的間接變址尋址(內(nèi)存中再取新地址)如LDAA[1000,X];((1000+X))A

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

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

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

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

(注:影響標(biāo)志位)

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江蘇理工學(xué)院2、寄存器存儲(chǔ)指令:STore(影響標(biāo)志位)

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

INCrement

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

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

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

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

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

&(M)BSET位置1(M)|(mm)→M江蘇理工學(xué)院4、移位指令LSLLogicShiftLeftASRArithmeticShiftRightRORROtateRight江蘇理工學(xué)院特點(diǎn):1、ASR補(bǔ)最高位,其余補(bǔ)02、移出去的進(jìn)C標(biāo)志江蘇理工學(xué)院3.3.4程序控制類指令1、無條件轉(zhuǎn)移指令

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

BMIBranchifMinusBPLBranchifPlusBHIBranchifHigherBHSBranchifHigherorSameBLOBranchifLowerBGTBranchifGreaterThan江蘇理工學(xué)院

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

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

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

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

S12X還提供了高級函數(shù)指令和模糊運(yùn)算指令,主要有:小值、大值、插值、乘積累加等重要的其它指令程序狀態(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江蘇理工學(xué)院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)合組成。江蘇理工學(xué)院3.4使用匯編語言的程序設(shè)計(jì)程序:完成特定任務(wù)的指令的集合程序設(shè)計(jì)語言:機(jī)器語言(二進(jìn)制指令代碼,可直接執(zhí)行)匯編語言(特定助記符指令語句,須編譯)高級語言(通用高級語句,須編譯)單片機(jī)應(yīng)用系統(tǒng)的程序,多用匯編語言編制(*.asm文件)或C

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

匯編語言:面向MCU硬件,不易移植,但高效、代碼量小,是學(xué)習(xí)基礎(chǔ)

江蘇理工學(xué)院匯編語言指令格式

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

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

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

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

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

ORG$0008HSTART:LDAA#$FF

PORTBEQU$0001BIT0EQU%0000001BSETPORTB,BIT0;等價(jià)于

BSET$0001,%00000001

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

ORG$1000LIST:FDB$0519,$2000

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

CPU執(zhí)行時(shí)間:

T=NxTB

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

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

故:TCOUNT=3996.25≈3996

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

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

T=1us

子程序延時(shí)時(shí)間即100ms;////////////////////////////////////////////////////////////////////;子程序DELAY:利用寄存器X、Y,;執(zhí)行兩重循環(huán)實(shí)現(xiàn)延時(shí)。;////////////////////////////////////////////////////////////////////DELAY:PSHXPSHYLDX#100DELAY1:LDY#200DELAY2:NOP;1TNOP;1TDBNEY,DELAY2;3TDBNEX,DELAY1PULYPULXRTS注:其它延時(shí)時(shí)間套此;MCU總線頻率不同延時(shí)不同江蘇理工學(xué)院4.數(shù)據(jù)查表程序【例3-6】將A中的兩個(gè)4位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,分別存入$2080、$2081中。(0~9的ASCII碼:$30~$39,A~F:$41~$46);**************************************************;子程序TRANS:十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼;入口參數(shù):(A)=十六進(jìn)制數(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……江蘇理工學(xué)院5.多分支結(jié)構(gòu)程序(類似查表);根據(jù)4x4鍵盤的鍵號執(zhí)行相應(yīng)子程序。

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

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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論