




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章SPCE061A尋址方式及指令系統(tǒng)3.1基本概念3.2尋址方式3.3指令系統(tǒng)本章小結(jié)
3.1基本概念
3.1.1常用指令符號(hào)
為了方便閱讀程序,在介紹尋址方式之前,先統(tǒng)一約定常用的指令符號(hào),見(jiàn)表3.1。3.1.2匯編語(yǔ)言格式
用戶要計(jì)算機(jī)完成各項(xiàng)任務(wù),就要設(shè)計(jì)各種應(yīng)用程序。程序設(shè)計(jì)常有三種:機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。機(jī)器語(yǔ)言是計(jì)算機(jī)惟一能識(shí)別的語(yǔ)言,它由一組0、1二進(jìn)制數(shù)組成,人們不便識(shí)別、記憶,因此很難用它來(lái)進(jìn)行程序設(shè)計(jì)。高級(jí)語(yǔ)言是面向問(wèn)題和計(jì)算過(guò)程的語(yǔ)言,可通用于各種不同的計(jì)算機(jī),用戶編程時(shí)不必仔細(xì)了解計(jì)算機(jī)的具體性能和指令系統(tǒng)。用匯編語(yǔ)言設(shè)計(jì)的程序具有針對(duì)性,不同的微處理器有不同的指令系統(tǒng)。
3.2尋址方式
3.2.1立即數(shù)尋址
立即數(shù)尋址直接包含操作數(shù),操作數(shù)是一個(gè)6位或16位的常數(shù),也叫立即數(shù)。6位立即數(shù)用IM6表示,范圍是0x00~0x3F;16位立即數(shù)用IM16表示,范圍是0x0000~0xFFFF。
【例3.1】3.2.2直接尋址
1.6位地址直接尋址
此尋址方式指令中給出的地址為6位有效地址[A6],由于只給出6位有效地址,所以只能用于第0頁(yè)存儲(chǔ)器(SPCE061A只用到第0頁(yè))的前64個(gè)字存儲(chǔ)單元范圍內(nèi)尋址,指令周期短。
【例3.2】
2.16位地址直接尋址
此尋址方式指令中給出的地址為16位有效地址[A16],指令周期較6位地址直接尋址強(qiáng)。由于給出的是16位有效地址,所以只用于第0頁(yè)存儲(chǔ)器的64K字存儲(chǔ)單元范圍內(nèi)尋址。
【例3.3】
3.22位地址直接尋址
此尋址方式指令中給出的地址為16位有效地址[A16],它是將CS代碼段作為高6位地址和頁(yè)內(nèi)16位地址拼接而成的。其可在4?MB的存儲(chǔ)單元范圍內(nèi)尋址,主要用于程序的調(diào)用與返回。3.2.3寄存器直接尋址
寄存器直接尋址是操作數(shù)存放在某個(gè)寄存器中,寄存器名稱由指令指出。
【例3.4】
R2=R1+0x20003.2.4寄存器間接尋址
寄存器間接尋址是操作數(shù)的地址由寄存器給出,寄存器需用“[]”括起來(lái),其格式為{D:}[Rs]。省略D,Rs指向0頁(yè)存儲(chǔ)器單元;不省略D,由寄存器Rs和段寄存器SR中的數(shù)據(jù)段DS共同指向存儲(chǔ)單元。DS的值確定存儲(chǔ)器的頁(yè)碼,然后再根據(jù)Rs的值尋址。由于SPCE061A地址只涉及到0頁(yè),故以后省略D。
【例3.5】
1.寄存器前置增量間接尋址
【例3.6】
R1=[++R3]
假設(shè)執(zhí)行指令前R3中的內(nèi)容為0x1000,該指令是先將R3的內(nèi)容加1,即0x1000加1,得0x1001,再把0x1001地址中的內(nèi)容存放到R1中。指令執(zhí)行完后,R3的值變?yōu)?x1001。
2.寄存器后置增量間接尋址
【例3.7】
R1=[R3++]
同樣假設(shè)執(zhí)行指令前R3中的內(nèi)容為0x1000,該指令是先將0x1000地址中的內(nèi)容存放到R1中,再把R3的內(nèi)容加1,即0x1000加1,得0x1001。指令執(zhí)行完后,R3的值變?yōu)?x1001。
3.寄存器后置減量間接尋址
【例3.8】
R1=[R3--]
同樣假設(shè)執(zhí)行指令前R3中的內(nèi)容為0x1000,該指令是先將0x1000地址中的內(nèi)容存放到R1中,再把R3的內(nèi)容減1,即0x1000減1,得0x0FFF。指令執(zhí)行完后,R3的值變?yōu)?x0FFF。3.2.5變址尋址
【例3.9】
R1=[BP+0x30]
若BP的內(nèi)容為0x1000,該指令執(zhí)行的操作是將0頁(yè)存儲(chǔ)器0x1030的內(nèi)容存放到寄存器R1中。3.2.6PC相對(duì)尋址
PC相對(duì)尋址主要用于跳轉(zhuǎn)指令中,并且是短跳轉(zhuǎn)。根據(jù)寄存器SR中標(biāo)志段的4個(gè)標(biāo)志位(NZSC)來(lái)作為程序跳轉(zhuǎn)的條件。若條件滿足則跳轉(zhuǎn)到相關(guān)的地址上,其跳轉(zhuǎn)范圍是根據(jù)6位的相對(duì)偏移量來(lái)決定的,因此跳轉(zhuǎn)范圍限制在PC?+?63個(gè)字,往前往后均最多跳63個(gè)字。
3.3指令系統(tǒng)
3.3.1數(shù)據(jù)傳送類指令
數(shù)據(jù)傳送類指令是把源操作數(shù)傳送到指令所指定的目標(biāo)地址。數(shù)據(jù)傳送操作屬?gòu)?fù)制性質(zhì),而不是搬家性質(zhì)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)代替。通用格式是:
<目的操作數(shù)>=<源操作數(shù)>
1.立即數(shù)尋址
立即數(shù)尋址分6位和16位立即數(shù)尋址,格式:Rd=IM6和Rd=IM16,執(zhí)行后將6位或16位立即數(shù)存入目的寄存器Rd中。
【例3.10】
R1=0x20
//將6位的立即數(shù)0x20送入寄存器R1
R1=0x1FFF//將16位立即數(shù)0x1FFF送入寄存器R1
2.寄存器直接尋址
寄存器直接尋址的格式為Rd=Rs,將源寄存器Rs中的內(nèi)容存入目的寄存器Rd中。
【例3.11】
R1=R2
若執(zhí)行前R2=0x2000,執(zhí)行后將此數(shù)據(jù)存入R1,R1=0x2000。
3.寄存器間接尋址
寄存器間接尋址格式為[Rd]=Rs,將Rs的數(shù)據(jù)存入到以Rd的值作為地址的單元中。
【例3.12】
[++R3]=R1
4.直接地址尋址
該尋址方式有6位和16位兩種。例如:
5.變址尋址
該尋址方式有兩種尋址格式:
6.堆棧操作
堆棧操作也屬于一種特殊的數(shù)據(jù)傳送指令,其通過(guò)兩條指令PUSH和POP來(lái)完成壓棧與出棧操作。將多個(gè)寄存器同時(shí)壓棧時(shí),總是序號(hào)最高的寄存器先壓棧,然后依次壓入序號(hào)較低的寄存器,直到序號(hào)最低的寄存器最后入棧。所以,執(zhí)行指令“PUSHR1,R4TO[SP]”與指令“PUSHR4,R1TO[SP]”是等效的,都是先壓入R4,再依次R3、R2、R1。堆棧指令格式為:
PUSHRx,RyTO[SP]
POPRx,RyFROM[SP]
PUSHRxTO[SP]
POPRxFROM[SP]
【例3.13】
PUSHR2,PCTO[SP]圖3.1PUSHR2,PCTO[SP]執(zhí)行過(guò)程示意圖
【例3.14】
POPR2,PCFROM[SP]圖3.2POPR2,PCFROM[SP]執(zhí)行過(guò)程示意圖3.3.2算術(shù)運(yùn)算類指令
1.不帶進(jìn)位的加法指令A(yù)DD
加法運(yùn)算中,被加數(shù)X可以是目的寄存器或源寄存器,加數(shù)Y可以是6種尋址方式中的任何一種,其運(yùn)算結(jié)果存放到目的寄存器Rd中。表3.3是ADD運(yùn)算的指令表。
【例3.15】
R1+=[++R3]
該指令功能是先將R3加1,然后R1中的數(shù)據(jù)與R3中的內(nèi)容作為地址所指向的單元中的數(shù)據(jù)相加,結(jié)果存放到R1中。
2.帶進(jìn)位的加法指令A(yù)DC
帶進(jìn)位的加法指令與不帶進(jìn)位的加法指令的唯一區(qū)別是執(zhí)行加法時(shí)進(jìn)位標(biāo)志也參與加法運(yùn)算,即Rd=X+Y+C,其余完全相同。
3.減法指令SUB與SBC
減法運(yùn)算中,被減數(shù)X可以是目的寄存器或源寄存器,減數(shù)Y可以是6種尋址方式中的任何一種,其運(yùn)算結(jié)果X-Y的差存放到目的寄存器Rd中。減法運(yùn)算有不帶進(jìn)位的減法和帶進(jìn)位的減法兩種,兩者唯一的差別只是是否有進(jìn)位參與運(yùn)算。表3.5和3.6是這兩種減法的指令表。
【例3.16】
R1-=[R4--]
這是一條不帶進(jìn)位的減法指令,先將寄存器R1中的數(shù)據(jù)減去由R4中的值作為地址所指向的單元中的數(shù)據(jù),結(jié)果存放于R1中,然后寄存器R4中的值再減1,即(R4)-1→(R4)。
【例3.17】
求0x1000、0x1001單元數(shù)據(jù)的差值(不考慮進(jìn)位C),結(jié)果存放于R1中。
R2=0x1000 //地址指針
R1=[R2++] //取0x1001單元的數(shù)據(jù)
R1-=[R2] //求差,結(jié)果存放到R1內(nèi)
【例3.18】
R2=R1-[0x1000],Carry
這是一條帶進(jìn)位的減法指令,執(zhí)行(R1)-(0x1000)-C,所得結(jié)果存放到R2內(nèi)。
4.求補(bǔ)指令
求補(bǔ)指令為NEG,求一個(gè)數(shù)的補(bǔ)碼相當(dāng)于執(zhí)行(-X)+1操作,即將被求數(shù)據(jù)X進(jìn)行取反后加1運(yùn)算,操作結(jié)果存放于目的寄存器Rd中。求補(bǔ)指令可以采用6種尋址方式中的任何一種,表3.7給出了所有求補(bǔ)指令。
【例3.19】
求-600與0x06FF單元的數(shù)據(jù)差,結(jié)果存放到R1中。
R1=-600
BP=0x06FF //地址指針
R2=-[BP] //求0x06FF的補(bǔ)碼
R1+=R2 //相加,結(jié)果送入R1
5.乘法運(yùn)算指令MUL
乘法運(yùn)算分為有符號(hào)數(shù)乘法和無(wú)符號(hào)數(shù)乘法兩種,乘法指令只能采用寄存器尋址,且Rd、Rs只能采用R1~R4、BP(R5),不采用SP、SR、PC,是為了避免誤用,以及提供彈性給新版指令集作擴(kuò)充。表3.8給出了有符號(hào)數(shù)乘法和無(wú)符號(hào)數(shù)乘法運(yùn)算的指令格式、指令周期等。
1)有符號(hào)數(shù)乘法
MR=Rd*Rs{,ss}
2)無(wú)符號(hào)數(shù)和有符號(hào)數(shù)乘法
MR=Rd*Rs,ss
【例3.20】
計(jì)算一年(365天)共有多少小時(shí),結(jié)果存放到R4(高位)R3(低位)中。
6.n項(xiàng)內(nèi)積指令MULS
SPCE061A除了提供乘法指令外,還提供速度較快的n項(xiàng)內(nèi)積指令MULS,使得其具有一定的數(shù)字信號(hào)處理(DSP)功能。表3.9列出了內(nèi)積指令的格式。
1)有符號(hào)內(nèi)積
MR=[Rd]*[Rs]{,ss}{,n}圖3.3內(nèi)積運(yùn)算操作過(guò)程示意圖
【例3.21】
2)無(wú)符號(hào)內(nèi)積
MR=[Rd]*[Rs],us{,n}
7.比較指令
比較指令是兩個(gè)數(shù)進(jìn)行比較的指令。比較運(yùn)算執(zhí)行兩數(shù)的減法操作,不存儲(chǔ)運(yùn)算結(jié)果,只影響標(biāo)志位N、Z、S、C。比較指令主要用于判斷,然后實(shí)現(xiàn)條件轉(zhuǎn)移。表3.10為比較指令格式表。
【例3.22】
CMPR1,[BP+0x08]
//比較R1,[BP+IM6]
JELabel_1
//若R1=[BP+0x08],則跳轉(zhuǎn)
到Label_13.3.3邏輯運(yùn)算與移位類指令
1.邏輯與、或、異或指令
這三條指令的語(yǔ)法格式、指令周期以及影響的標(biāo)志位完全相同,在此一起介紹,表3.11為三者的指令格式。
【例3.23】假設(shè)開(kāi)始時(shí)的標(biāo)志位為:N=0,Z=1,S=0,C=1。
2.測(cè)試指令
測(cè)試指令(TEST)對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯與操作,即X&Y,不改變X、Y的值,結(jié)果不寫入寄存器,僅影響N、Z標(biāo)志位。
測(cè)試的數(shù)X、Y一個(gè)是寄存器(目的寄存器Rd或源寄存器Rs),另一個(gè)可是六種尋址方式中的任一種。表3.12為所有測(cè)試指令。
【例3.24】假設(shè)開(kāi)始時(shí)的標(biāo)志位為:N=0,Z=1,S=0,C=1。
3.移位指令
SPCE061A的移位運(yùn)算包括邏輯左移(LSL)、邏輯右移(LSR)、循環(huán)左移(ROL)、循環(huán)右移(ROR)、算術(shù)右移(ASR)等操作。在移位的同時(shí)還可進(jìn)行其他運(yùn)算,如加、減、求補(bǔ)、與、或、異或、測(cè)試,指令長(zhǎng)度為1,指令周期為3/8。由于硬件原因,對(duì)于移位操作,每條指令可以移1~4位。表3.13為其指令格式。
1)邏輯左移(LSL)
邏輯左移的基本格式為Rd=RsLSLn,該指令對(duì)Rs進(jìn)行n(可設(shè)為1~4)位邏輯左移,將Rs高n位移入SB寄存器,同時(shí)Rs的低n(1~4)位用0補(bǔ)足,結(jié)果送入Rd寄存器。假設(shè)n=3,其操作過(guò)程如圖3.4所示。圖3.4邏輯左移操作過(guò)程
【例3.25】
R1=0xF11F//移位前R1的初值為0xF11F
R1=R1LSL3
//R1邏輯左移3位后值變?yōu)?x88F8
2)邏輯右移(LSR)
邏輯右移的基本格式為Rd=RsLSRn,該指令對(duì)Rs進(jìn)行n(可設(shè)為1~4)位邏輯右移,將Rs低n位移入SB寄存器,同時(shí)Rs的高n(1~4)位用0補(bǔ)足,結(jié)果送入Rd寄存器。假設(shè)n=3,其操作過(guò)程如圖3.5所示。圖3.5邏輯右移操作過(guò)程
3)循環(huán)左移(ROL)
循環(huán)左移的基本格式為Rd=RsROLn,該指令對(duì)Rs進(jìn)行n(可設(shè)為1~4)位循環(huán)左移,將Rs高n位移入SB寄存器,同時(shí)將SB寄存器的高n位移入Rs的低n位,結(jié)果送入Rd寄存器。假設(shè)n=1,其操作過(guò)程如圖3.6所示。圖3.6循環(huán)左移操作過(guò)程
【例3.26】
R1=0xF11F//移位前R1的初值為0xF11F
R1=R1ROL1
//R1循環(huán)左移1位后值變?yōu)?xE23F
4)循環(huán)右移(ROR)
循環(huán)右移的基本格式為Rd=RsRORn,該指令對(duì)Rs進(jìn)行n(可設(shè)為1~4)位循環(huán)右移,將Rs低n位移入SB寄存器,同時(shí)將SB寄存器的低n位移入Rs的高n位,結(jié)果送入Rd寄存器。假設(shè)n=1,其操作過(guò)程如圖3.7所示。圖3.7循環(huán)右移操作過(guò)程
【例3.27】
R1=0xF11F//移位前R1的初值為0xF11F
R1=R1ROR1//R1循環(huán)右移1位后值變?yōu)?xF88F
5)算術(shù)右移(ASR)
算術(shù)右移的基本格式為Rd=RsASRn,該指令對(duì)Rs進(jìn)行n(可設(shè)為1~4)位算術(shù)右移,將Rs低n位移入SB寄存器,并對(duì)其符號(hào)位(最高位)進(jìn)行擴(kuò)展,結(jié)果送入Rd寄存器。該指令適合對(duì)所有有符號(hào)數(shù)的移位操作。假設(shè)n=3,其操作過(guò)程如圖3.8所示。圖3.8算術(shù)右移操作過(guò)程
【例3.28】
【例3.29】3.3.4控制轉(zhuǎn)移類指令
表3.14為控制轉(zhuǎn)移類指令表。
1.軟件中斷
軟件中斷為單字指令,助記符為BREAK,采用16位直接地址尋址方式,指令周期為13,不影響標(biāo)志位,功能是產(chǎn)生軟件中斷請(qǐng)求,使CPU轉(zhuǎn)到軟件中斷服務(wù)程序中去。軟件中斷服務(wù)程序的入口地址為[0x00FFF5],該地址固定,不得作其他用。
2.程序轉(zhuǎn)移指令
程序轉(zhuǎn)移指令分為近轉(zhuǎn)移和遠(yuǎn)轉(zhuǎn)移,又稱相對(duì)轉(zhuǎn)移和絕對(duì)轉(zhuǎn)移。近轉(zhuǎn)移時(shí)PC值只能在PC+63個(gè)字的范圍內(nèi)跳轉(zhuǎn)(即前進(jìn)或后退63個(gè)字);遠(yuǎn)轉(zhuǎn)移則在頁(yè)內(nèi)64K個(gè)字的范圍內(nèi)跳轉(zhuǎn)。
【例3.30】條件轉(zhuǎn)移。
【例3.31】無(wú)條件轉(zhuǎn)移。
3.子程序調(diào)用和返回指令
子程序調(diào)用指令用于從指定的代碼段調(diào)用子程序,采用22位直接地址[A22]尋址方式,因此,該指令可以從整個(gè)64頁(yè)代碼的程序存儲(chǔ)空間內(nèi)調(diào)用任何指定的子程序。其助記符為CALL。子程序返回指令和CALL對(duì)應(yīng),表示子程序已結(jié)束,需返回主程序,同樣采用22位直接地址[A22]尋址方式,助記符為RETF。
子程序返回過(guò)程:彈出調(diào)用子程序時(shí)壓入的段寄存器SR和程序指針PC,使程序從調(diào)用CALL的下一條指令處開(kāi)始繼續(xù)執(zhí)行主程序。
【例3.32】
4.中斷返回指令
從中斷服務(wù)子程序返回時(shí)須用RETF或者RETI指令從棧中彈出狀態(tài)寄存器SR和程序指針PC的值。由于彈棧動(dòng)作發(fā)生在本指令執(zhí)行之后,故彈棧后SR和PC的值應(yīng)分別與進(jìn)入中斷服務(wù)子程序之前二者的值相同。
【例3.33】
5.功能設(shè)置類指令
1)?FIR_MOV
該指令用來(lái)控制允許或禁止FIR濾波器運(yùn)算過(guò)程中數(shù)據(jù)的自動(dòng)移動(dòng)。由于這會(huì)影響到FIR濾波器運(yùn)算的狀態(tài),且此狀態(tài)具有全局性質(zhì),因此用在中斷服務(wù)子程序時(shí)要格外小心。
只有如下兩條:
2)?FIQ
該指令用來(lái)允許或禁止快速中斷請(qǐng)求(FIQ),只有如下兩條:
FIQON //允許FIQ中斷
FIQOFF //禁止FIQ中斷
3)?IRQ
該指令用來(lái)允許或禁止中斷請(qǐng)求(IRQ),只有如下兩條:
IRQON //允許IRQ中斷
IRQOFF //禁止IRQ中斷
4)?INT
該指令用來(lái)設(shè)置允許或禁止FIQ和IRQ中斷的標(biāo)志。具體如下:
5)?NOP
該指令為空操作,是對(duì)CPU的控制指令,執(zhí)行時(shí)機(jī)器不作任何操作,而轉(zhuǎn)向下一條指令去執(zhí)行,不影響任何寄存器和標(biāo)志位,通常用于精確延時(shí)或等待。
【例3.34】3.3.5偽指令
閱讀一些SPCE061A單片機(jī)的源程序開(kāi)始段,會(huì)發(fā)現(xiàn)有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記不同,沒(méi)有相對(duì)應(yīng)的操作碼,通常稱這些特殊指令助記符為偽指令。為與匯編指令區(qū)別,偽指令前加一圓點(diǎn)。
1)定義類偽指令
定義類偽指令主要用于對(duì)段、程序數(shù)據(jù)性質(zhì)等進(jìn)行定義。
(1)?CODE、DATA、TEXT。
【例3.35】
.CODE
.PUBLIC_MAIN;
_MAIN:
【例3.36】
.DATA
tone_table:.DW5,8,6,9,3,8,0;
【例3.37】
.TEXT
.PUBLIC_IRQ0
.PUBLIC_IRQ1
.PUBLIC_IRQ2
_IRQ0://中斷子程序入口
PUSHR1,R5to[SP]
(2)?IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM。
IRAM段用來(lái)存放具有初始值的變量。此段亦不可跨bank鏈接,且在鏈接時(shí)所有與其同名或同屬性的各段都會(huì)被合并在一起,將會(huì)同時(shí)被分配空間于ROM及RAM中。
ISRAM段與IRAM段的性質(zhì)基本相同,區(qū)別是ISRAM段在RAM中只能被分配在前面64(0~63)個(gè)字的數(shù)據(jù)單元。
下面給出各自的定義格式。
(3)?MACRO、MACEXIT、ENDM。
MACRO偽指令用來(lái)起始宏定義,ENDM偽指令則用來(lái)結(jié)束宏定義,二者應(yīng)成對(duì)使用。從宏定義里退出是立即且無(wú)條件的,MACEXIT偽指令并非用來(lái)終止宏定義,它常與條件匯編用在一起,條件滿足時(shí)從宏定義里退出,對(duì)ENDM偽指令后面的指令進(jìn)行匯編;條件不滿足時(shí),繼續(xù)匯編MACEXIT偽指令后的宏定義內(nèi)的其它指令。不必?fù)?dān)心從宏里退出時(shí)條件會(huì)失衡,因?yàn)镸ACEXIT偽指令會(huì)自動(dòng)將條件恢復(fù)到原來(lái)的均衡狀態(tài)。下面給出各自定義格式。
【例3.44】
Personal_info:.MACROarg1,arg2,arg3
Name:.DWarg1
Age:.DWarg2
.ENDM
【例3.45】
eserve:.MACROarg1,arg2
.VARarg1
.IFcount
.MACEXIT
.ENDIF
.VARcount–1
.ENDM
(4)?PROC、ENDP、STRUCT、ENDS。
PROC偽指令用于起始程序的定義,ENDP用來(lái)結(jié)束程序定義,兩者成對(duì)使用;STRUCT偽指令用于起始結(jié)構(gòu)的定義,ENDS用來(lái)結(jié)束結(jié)構(gòu)定義,兩者成對(duì)使用。下面給出各自定義格式。
(5)?DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEF。
DEFINE用來(lái)定義常量符號(hào),給常量符號(hào)所賦之值既可以是一個(gè)已定義過(guò)的常量符號(hào),也可以是一個(gè)表達(dá)式。切忌符號(hào)超前引用,即如果賦值引用的符號(hào)不是在引用前定義的,則會(huì)出現(xiàn)“非法超前引用”的錯(cuò)誤。
【例3.48】
.DEFINEBODY1;
.DEFINEIO_PORT0x7016;
.IFDEFBODY;
R1=0xFFFF;
[IO_PORT]=R1;
.ENDIF
【例3.49】
.RAM
.VARs1,s2,s3; //無(wú)賦初值
【例3.52】
label:.EQU10
VDEF用來(lái)為標(biāo)號(hào)賦值,它可以在程序的任何部位為標(biāo)號(hào)重復(fù)賦值。
【例3.53】
int0:.VDEF0x005F
2)存儲(chǔ)類偽指令
存儲(chǔ)類偽指令以指定的數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)或設(shè)定程序地址等。數(shù)據(jù)類型包括DW、DD、FLOAT、DOUBLE、END等。表3.16為各數(shù)據(jù)類型的字長(zhǎng)及值域。
(1)?DW、DD、FLOAT、DOUBLE。
DW用來(lái)指示以16位整型數(shù)據(jù)的形式來(lái)存儲(chǔ)常量或變量;DD用來(lái)指示以32位長(zhǎng)整型數(shù)據(jù)的形式存儲(chǔ)雙字常量或變量;FLOAT用來(lái)指示以單精度浮點(diǎn)型實(shí)數(shù)數(shù)據(jù)單元來(lái)存儲(chǔ)實(shí)數(shù)常量或變量;DOUBLE用來(lái)指示以雙精度浮點(diǎn)型實(shí)數(shù)數(shù)據(jù)的形式存儲(chǔ)實(shí)數(shù)常量或變量。
(2)?END。
END用來(lái)結(jié)束程序文件或結(jié)束包含文件,本偽指令用在程序文件中意味該文件結(jié)束(不可再包含其它文件)。
3)存儲(chǔ)定義類偽指令
DUP用來(lái)定義若干指定數(shù)據(jù)類型的數(shù)據(jù)存儲(chǔ)單元,與DW、FLOAT、DD、DOUBLE存儲(chǔ)類偽指令組合在一起用于存放若干個(gè)具有相同數(shù)值的常量;或者申請(qǐng)若干個(gè)備用的整型、單精度浮點(diǎn)型、長(zhǎng)整型以及雙精度浮點(diǎn)型數(shù)據(jù)單元。
4)條件類偽指令
條件類偽指令包括IF、ELSE、ENDIF、IFMA、IFDEF、IFNDEF,共6個(gè)。
IF指令引出在條件匯編結(jié)果為真時(shí)所要匯編的程序指令。ELSE引出IF偽指令設(shè)置的條件匯編結(jié)果為假時(shí)所要匯編的程序指令,它必須與IF偽指令結(jié)合使用。ENDIF用來(lái)結(jié)束條件匯編組合的定義,也必須與IF偽指令成對(duì)使用。
5)匯編方式類偽指令
該類偽指令包括兩條:INCLUDE和SECTION。INCLUDE指令的作用是在匯編文件里包含某個(gè)文件。SECTION指令的作用是用來(lái)創(chuàng)建用戶定義段,創(chuàng)建段的屬性參量attribute可以是以下預(yù)定義段名當(dāng)中的任意一個(gè):CODE、DATA、TEXT、RAM、SRAM、IRAM、ISRAM、ORAM、OSRAM。3.3.6宏定義與調(diào)用
1.宏定義
宏(Macro)是指在源程序里將一序列的源指令行用一個(gè)簡(jiǎn)單的宏名(MacroName)所取代。這樣做的好處是使程序的可讀性增強(qiáng)。
2.宏標(biāo)號(hào)
宏定義里可以用顯式標(biāo)號(hào)(由用戶定義),亦可用隱含標(biāo)號(hào)(由匯編器自動(dòng)定義)。匯編器不會(huì)改變用戶定義的顯式標(biāo)號(hào)。在宏標(biāo)號(hào)后加上后綴符‘#’則表明該標(biāo)號(hào)為隱含標(biāo)號(hào),匯編器會(huì)自動(dòng)生成一個(gè)后綴數(shù)字符號(hào)‘_X_XXXX’(X表示一位數(shù)符,XXXX表示4位擴(kuò)展數(shù)符)來(lái)取代這個(gè)隱含標(biāo)號(hào)中的后綴符‘#’,如例3.65所示。隱含標(biāo)號(hào)中的字母字符及其后綴數(shù)符總共不能超過(guò)32個(gè)字符。
3.宏調(diào)用
在調(diào)用宏時(shí),可以使用任何類型的參數(shù):直接型、間接型、字符串型或寄存器型。只有字符串型參數(shù)才能含有空格,但必須用引號(hào)將此空格括起,即‘’或“”(而字符串參數(shù)中的單引號(hào),必須用雙引號(hào)將其括起,即“‘”)。只要在宏嵌套中的形參名相同,則這些參數(shù)就可以穿過(guò)嵌套的宏使用。宏嵌套使用唯一所受的限制是內(nèi)存空間的容量。宏的多個(gè)參數(shù)應(yīng)以逗號(hào)隔開(kāi),參數(shù)前的空格及Tab鍵都將被忽略。單有一個(gè)逗號(hào),而后面未帶有任何參數(shù)時(shí)會(huì)被匯編器表示為參數(shù)丟失錯(cuò)誤。
4.宏參數(shù)分隔符
在一個(gè)宏體中,宏參數(shù)的有效分隔為標(biāo)點(diǎn)符號(hào)中的逗號(hào),即“,”。
5.宏內(nèi)字符串連接符
符號(hào)‘@’(40H)是字符串連接符。注意,字符串連接只能在宏內(nèi)進(jìn)行。
6.助記符搜索順序
通常,匯編器以表3.17列出的順序來(lái)搜索各種助記符或符號(hào)。
7.宏應(yīng)用舉例
【例3.66】數(shù)的比較。
【例3.67】將標(biāo)號(hào)名傳入程序代碼。3.3.7段的定義與調(diào)用
1.預(yù)定義段
在Xasm16里共定義有9個(gè)預(yù)定義段:CODE、DATA、TEXT、ORAM、OSRAM、RAM、IRAM、SRAM及ISRAM段。這些預(yù)定義段都分別被規(guī)定了以下內(nèi)容:
(1)段內(nèi)存儲(chǔ)數(shù)據(jù)類型:指令/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 長(zhǎng)春汽車工業(yè)高等??茖W(xué)?!懂a(chǎn)品策略與開(kāi)發(fā)設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 防災(zāi)科技學(xué)院《網(wǎng)絡(luò)經(jīng)濟(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 二維材料光熱轉(zhuǎn)換-洞察及研究
- 物流前臺(tái)客服管理制度
- 物流客戶服務(wù)管理制度
- 物流庫(kù)房值班管理制度
- 物流運(yùn)營(yíng)倉(cāng)庫(kù)管理制度
- 物資儲(chǔ)備倉(cāng)庫(kù)管理制度
- 物資出門安全管理制度
- 陜北石窟水月觀音造像研究
- 財(cái)務(wù)會(huì)計(jì)實(shí)務(wù) 課件 053第五章第三講 其他債權(quán)投資
- 《企業(yè)國(guó)有資產(chǎn)法》考試題庫(kù)及答案
- 新時(shí)代中小學(xué)教師職業(yè)行為十項(xiàng)準(zhǔn)則課件
- DB33T 2320-2021 工業(yè)集聚區(qū)社區(qū)化管理和服務(wù)規(guī)范
- 突發(fā)事件應(yīng)急預(yù)案管理辦法
- 骨與關(guān)節(jié)感染 邱貴興-教學(xué)課件幻燈
- 校園開(kāi)展安全生產(chǎn)課件
- 金匱要略知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 02565+24273中醫(yī)藥學(xué)概論
- 電力鐵塔灌注樁施工方案
- 北京理工大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》2022-2023學(xué)年第一學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論