微控制器尋址方式與指令系統(tǒng)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 微控制器尋址方式與指令系統(tǒng),§3.1 尋址方式§3.2 SPCE061A指令分類,符號(hào)約定,,,,指令的格式,指令由操作碼字段和操作數(shù)字段組成。操作碼字段指示出CPU所要執(zhí)行的操作,操作數(shù)字段則指出指令執(zhí)行操作過程中所需要的操作數(shù)。如加法指令中的加數(shù)和被加數(shù)。,§3.1 尋址方式,為什么要設(shè)置不同的尋址方式?,例、將1-100存儲(chǔ)單元的內(nèi)容求和,結(jié)果放在102單元中。R1=0R2=0

2、Sum_Loop:R2+=[++ R1] // (R1)+1 =>R1 , // (R2)+((R1))=>R2CMP R1,100JNA Sum_Loop // 不大于轉(zhuǎn)移[102]=R2,例、將1-100存儲(chǔ)單元的內(nèi)容求和,結(jié)果放在102單元中。R1=0R1+=[0]R1+=[1]R1+=[2]R1+=[3]R

3、1+=[4]……[102]=R1,尋址方式,一、立即數(shù)尋址二、寄存器尋址三、直接尋址 1、6位地址直接尋址 2、16位地址直接尋址 3、22位地址直接尋址四、寄存器間接尋址 1、寄存器間接尋址 2、寄存器前置增量間接尋址 3、寄存器后置增量間接尋址 4、寄存器后置減量間接尋址 5、寄存器自動(dòng)增減量

4、間接尋址五、變址尋址六、PC相對(duì)尋址,R1=0X25 //6位立即數(shù)R1=R1+0X2400 // 16位立即數(shù),,,R1=0X25R2=R1+0X2400,,,1、R1+=[0X30] //零頁6位直接地址2、R2=R1+[0X2400] // 16位直接地址 3、22位直接地址主要用于子程序調(diào)用。,1、R1+=[R5] 2、R2=D:[++R3] //(R3)+1=>R3,

5、 //((R3))=>R2。3、R2=D:[R3 ++] //((R3))=>R2, //(R3)+1=>R3。4、R2=D:[R3 - -] //((R3))=>R2, //(R3)-1=>R3。5、主要用于堆棧操作,R1=[B

6、P+IM6] //((BP)+IM6)=>R1,用于轉(zhuǎn)移指令,(PC)±IM6;IM6<=63,,,§3.2指令分類,數(shù)據(jù)傳送類算術(shù)運(yùn)算類邏輯操作類控制轉(zhuǎn)移類及設(shè)置類,1、裝載數(shù)據(jù) Rd=源操作2、存儲(chǔ)數(shù)據(jù)[RAM地址]=Rs3、堆棧操作,1、加法運(yùn)算2、減法運(yùn)算 Rd=Rx±源操作數(shù) [,Carry]3、乘法運(yùn)算4、求補(bǔ) Rd= -源操作數(shù)

7、5、比較 CMP Rx,源操作數(shù),,,邏輯與邏輯或邏輯異或測試移位循環(huán),軟中斷程序轉(zhuǎn)移子調(diào)用功能設(shè)置,,,一、 數(shù)據(jù)傳送類指令,數(shù)據(jù)裝載類 Rd=源操作 //影響N、Z標(biāo)志。存儲(chǔ)數(shù)據(jù)類 [RAM地址]=Rs //不影響任何標(biāo)志。堆棧操作類,1、壓棧指令:,,PUSH Rx,Ry to [SP]將Rx~Ry中的數(shù)據(jù)壓入以Rs的內(nèi)容為起始地址的一組存儲(chǔ)器中。高序號(hào)寄存器內(nèi)容先壓入。壓

8、入單個(gè)寄存器PUSH Rx,Rx to [SP]壓入某兩個(gè)或多個(gè)寄存器PUSH Rx,Ry to [SP]先壓棧,SP內(nèi)容自動(dòng)減1。不影響標(biāo)志位。,例1、執(zhí)行指令 PUSH R3,PC to [SP],SP,,,SP,,高地址,低地址,2、出棧指令,POP Rx,Ry from [SP] 將以Rs的內(nèi)容為起始地址的一組存儲(chǔ)器中的內(nèi)容送到Rx~Ry中。先傳送低序號(hào)寄存器。 彈出到單個(gè)寄存器P

9、OP Rx,Rx from [SP]SP內(nèi)容先自動(dòng)增量,再彈出。影響標(biāo)志位N、Z。,例2、執(zhí)行指令 POP R3,PC from [SP],SP,,,SP,,PC,SR,R5,R4,R3,,,,,當(dāng)執(zhí)行完出棧后,內(nèi)存是什么狀態(tài)?,,高地址,低地址,堆棧應(yīng)用要注意的問題,空間沖突-堆??臻g與其它用戶空間相交引起的沖突。這是用戶空間估計(jì)不足引起的。堆棧溢出-堆棧使用超出其分配范圍,這是堆??臻g分配太少或子程序嵌套太深引起

10、的。,由于單片機(jī)內(nèi)存空間狹小,內(nèi)存空間的使用要特別小心,要精打細(xì)算,以避免出現(xiàn)下述問題。,二、 算術(shù)運(yùn)算類指令,加法運(yùn)算減法運(yùn)算乘法運(yùn)算求補(bǔ)指令比較指令,Rd=Rx±源操作數(shù)[,Carry],,Rd= - 源操作數(shù),CMP Rx,源操作數(shù),MR=Rd*Rs,MR=[Rd]*[Rs],內(nèi)積指令:,符號(hào)數(shù)內(nèi)積 MR=[Rd]* [Rs] {,ss} {,n}MR=((Rd))χ((Rs))+ ((Rd

11、+1))χ((Rs+1))+ ((Rd+2))χ((Rs+2))+……選項(xiàng){,ss} ,系統(tǒng)默認(rèn)值,表示為符號(hào)數(shù)運(yùn)算。選項(xiàng){,n},n=1~16,默認(rèn)為1。MR為R4R32.無符號(hào)數(shù)內(nèi)積 MR=[Rd]* [Rs] ,us {,n}us必須注明。其它同符號(hào)數(shù)內(nèi)積。,Rd,Rs,,,Rd,Rs,,,(R4R3)=X1*C1+X2*C2+X

12、3*C3+X4*C4,例 、MR=[Rd]*[Rs] ,4,當(dāng)自動(dòng)功能開放FIR_MOV ON時(shí),允許運(yùn)算過程中數(shù)據(jù)自由移動(dòng),[例3.25]首先在IRAM中定義8個(gè)變量。在程序的第一循環(huán)階段,計(jì)算的值為2*5+3*6,即結(jié)果為1C;第一循環(huán)結(jié)束后,由于移位作用,NO_3的值被NO_2代替,變?yōu)?x0002,而NO_2的值不變,再次循環(huán)后的值為2*5+2*6,即結(jié)果為0x0016。,.IRAM.VARNO_1=0x0001, NO_2

13、=0x0002, NO_3=0x0003, NO_4=0x0004.VARNO_5=0x0005, NO_6=0x0006, NO_7, NO_8.CODE.PUBLIC _main_main:FIR_MOV ON//允許移位R1= NO_2//指向起始位R2= NO_5MR=[R1]*[R2], us, 2 //第1次,2*5+3*6。 [NO_7]=R3[NO_8]=R4NOPJMP _ma

14、inRETF,第2次:2*5+2*6,求補(bǔ)指令與比較指令,求補(bǔ)指令是一種將正數(shù)變負(fù)數(shù),負(fù)數(shù)變正數(shù)的補(bǔ)碼運(yùn)算。比較指令作減法,僅影響N、Z、S、C標(biāo)志。目標(biāo)單元不變。,例:R1=-0x28 R2=-0xFFFF R4=-R1,例:R1=-0x28 R2=-0xFFFF CMP R1,R2 條件轉(zhuǎn)移指令,三、 邏輯操作類指令,邏輯與邏輯或邏輯異

15、或測試指令移位指令循環(huán)指令,,在開關(guān)量控制中,可用這些指令來進(jìn)行位操作:將控制字中的某些位置0,其余位不變。將控制字中的某些位置1,其余位不變。將控制字中的某些位取反,其余位不變。以實(shí)現(xiàn)對(duì)這些位的控制與測試。,,“與”操作,僅影響N、Z標(biāo)志。結(jié)合條件轉(zhuǎn)移指令使用。 在開關(guān)量控制中,可用于測試目標(biāo)字的某些位是否為0或1。,例4、分別用指令表示,將R1中的D2、D6、D13置1,清0,取反,其余

16、位不變的操作。,置1將置1的位“或”1,不變的位“或”0。所以有,R1|=0x2044 //0010000001000100清0將清0的位“與”0,不變的位“與”1。所以有,R1&=0xDFBB //1101 1111 1011 1011取反將取反的位“異或”1,不變的位 “異或”0。 所以有,R1^=0x2044 //0010000001000100,例5、假設(shè)R2中的內(nèi)容是交換機(jī)的用

17、戶摘掛機(jī)狀態(tài)字,每一位對(duì)應(yīng)一個(gè)用戶摘掛機(jī)狀態(tài),0掛機(jī),1摘機(jī)。用TEST指令測試用戶摘掛機(jī)狀態(tài)。摘機(jī)時(shí)作H處理,否則繼續(xù)測試下一個(gè)用戶狀態(tài)。,TEST R2,0x0001 //測試R2與0x0001相與的結(jié)果 JZ d1 //相與的結(jié)果為0則跳轉(zhuǎn) CALL H0 //否則執(zhí)行H0d

18、1: TEST R2,0x0002 JZ d2 CALL H1d2 : TEST R2,0x0004 JZ d3 CALL H2d3:……,邏輯/算術(shù)左移 LSL邏輯右移 LSR算術(shù)右移 ASR,,,,四、移位指令,Rd=RS LSL 3 //nn=1~4,Rd=RS LSR 3 //nn=1~4,Rd=RS ASR 3 //nn=1~4,

19、多功能移位指令: ——先移位后運(yùn)算R1+=R2 LSL 2, Carry //(R1)+(R2)左移2位+C? R1R1= -R2 LSR 2, // (R2)右移2位后求補(bǔ)? R1例:R1=0xFF00R2=0x0001R2+=R1 ASR 1 //執(zhí)行這條指令后,(R2)=FF81H,循環(huán)指令,左循環(huán) ROL右循環(huán) ROR,五、 控制轉(zhuǎn)移

20、 及設(shè)置類指令,軟中斷程序轉(zhuǎn)移子程序調(diào)用功能設(shè)置,—— 中斷向量 = 00FFF5H,——條件轉(zhuǎn)移和無條件轉(zhuǎn)移,指令周期:(滿足條件)轉(zhuǎn)移為5,否則為3。,應(yīng)用舉例1,例1、軟件延時(shí)子程序設(shè)計(jì)。Delay_x:R1=0Delay_Loop:R1=R1+1CMP R1,0x03E8JNAE Delay_Loop Exit_Loop:RETF,// 3個(gè)指令周期// 8個(gè)指令周期,3E8:1000

21、//順序?yàn)?,轉(zhuǎn)移為5個(gè)指令周期// 12個(gè)指令周期,程序延時(shí)多長時(shí)間?修改延時(shí),修改程序的什么地方?本子程序最多延時(shí)時(shí)間是多少?,應(yīng)用舉例2,例10、編寫計(jì)算1~100所有整數(shù)和,且結(jié)果存于R1中的函數(shù)。F_Calculate_Sum:R1=0R2=1L_SumLoop:R1+=R2R2+=1CMP R2,0x65JB L_SumLoop//小于轉(zhuǎn)移RET,計(jì)算1~100單元中所有整數(shù)和,如何修

22、改?,處理器的尋址方式處理器的指令分類指令表的信息指令周期指令對(duì)標(biāo)志位的影響指令長度,小結(jié),§3.3 偽指令,偽指令分類,段切換偽指令,數(shù)據(jù)定義偽指令,宏匯編與條件匯編,宏匯編:匯編具有宏處理功能的高級(jí)匯編技術(shù)條件匯編:源程序在匯編過程中,當(dāng)特定條件為真時(shí),才對(duì)源程序的一組語句進(jìn)行匯編,在源程序中用一個(gè)宏名取代一系列源語句行,從而簡化程序,增加程序的可讀性。在編譯的時(shí)候,編譯器會(huì)將其展開在目標(biāo)代碼中。,宏指令的定

23、義與調(diào)用,,宏定義:macro_name : MACRO [形參表] CPU 指令 //宏定義體 [.MACEXIT] …… .ENDM 宏指令: macro_name [實(shí)

24、參表],宏定義舉例1:M_instruction : MACRO arg,val arg Lab#: .DW val .ENDM 宏調(diào)用: M_instruction nop, 87宏展開: nop .DW 87,宏定

25、義舉例2:雇員信息 employee : MACRO arg1, arg2, arg3 name : .DW arg1 department : .DW arg2 date_hired : .DW arg3 .ENDM //調(diào)用前面定義的宏: employee

26、‘john doe’, personnel, 022098//匯編器將宏展開成下面的命令: name: .DW ‘john doe’ department: .DW personnel date_hired: .DW 022098,段切換偽指令與SPCE061A存儲(chǔ)器空間,RAM:存放無初值的變量。,

27、IRAM:存放具有初值的變量。并分配ROM及RAM空間。,ORAM:存放無初值的變量。一個(gè)項(xiàng)目的不同文件中與RAM段同名同屬性的各段會(huì)被重疊在一起。這適合于不同文件需要使用相同的變量空間。,SRAM:與RAM同,但只能連接到0~63單元。,ISRAM:與IRAM同,但只能連接到0~63單元。,OSRAM:與ORAM同,但只能連接到0~63單元。,CODE:所有程序和數(shù)據(jù)都可以存放在該段。,DATA:程序中的數(shù)據(jù)(常數(shù))都可以存放在該段。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論