匯編語言編寫方法及程序分析_第1頁
匯編語言編寫方法及程序分析_第2頁
匯編語言編寫方法及程序分析_第3頁
匯編語言編寫方法及程序分析_第4頁
匯編語言編寫方法及程序分析_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編語言編寫方法及程序分析· 出處:統(tǒng)一教學(xué)網(wǎng) · 作者:casularm · 發(fā)表日期:2006-6-25 15:17:00 匯編語言編寫方法及程序分析1             匯編語言程序的編寫方法(1)       匯編語言源程序以.asm為其擴(kuò)展名。(2)       匯編語言源程序的每一行都可以由4個(gè)部分組成,句法如

2、下:標(biāo)號: 助記符 操作數(shù) ;注釋其中可用空格或TABS鍵隔開標(biāo)號供本程序的其他部分或其他程序調(diào)用。標(biāo)號是任選項(xiàng),標(biāo)號后面可以加也可以不加冒號“:”。標(biāo)號必須從第一列寫起,標(biāo)號最多可達(dá)到32個(gè)字符(AZ ,az ,09 ,_ ,以及$),但第1個(gè)字母不能以數(shù)字開頭。引用標(biāo)號時(shí),標(biāo)號的大小寫必須一致。標(biāo)號的值就是SPC(段程序計(jì)數(shù)器)的值。如果不用標(biāo)號,則第一個(gè)字母必須為空格、分號或信號(*)。助記符助記符指令、匯編指令、宏指令和宏調(diào)用。作為助記符指令,一般用大寫;匯編命令和宏指令,以句號“.”開始,且為小寫。匯編命令可以形成常數(shù)和變量,當(dāng)用它控制匯編和連接過程時(shí),可以不占用存儲(chǔ)空間。指令和匯編

3、命令都不能寫在第1列。操作數(shù)指令中的操作數(shù)或匯編命令中定義的內(nèi)容。操作數(shù)之間必須用逗號“,.8專GkzKH業(yè)國l”分開。有的指令操作無操作數(shù),如NOP、RESET。注釋注釋從分號“;”開始,可以放在指令或匯編命令的后面,也可以放在單獨(dú)的以行或數(shù)行。注釋是任選項(xiàng)。(如果注釋從第1列開始,也可以用“*”。)(3)       常用的匯編命令如表所示。匯編命令作用舉例.title緊隨其后的是匯編語言程序正文.title “example.asm”.end結(jié)束匯編命令放在匯編語言程序的最后.text緊隨其后的是匯編語言程序正文經(jīng)匯編后,緊隨.

4、text后的是可執(zhí)行程序代碼.data緊隨其后的是已初始化數(shù)據(jù)有兩種數(shù)據(jù)形式:.int和.用來設(shè)置一個(gè)或多個(gè)16位無符號整型量常數(shù)table: .word 1,2,3,4 .word 6,8,4,2.word.word 用來設(shè)置一個(gè)或多個(gè)16位符號整型量常數(shù)表示在程序存儲(chǔ)器標(biāo)號為table開始的8個(gè)單元中存放初始化數(shù)據(jù)1,2,3,4,6,8,4,2.bss.bss為未初始化變量保留存儲(chǔ)空間.bss x,4 表示在數(shù)據(jù)存儲(chǔ)器中空出4個(gè)存儲(chǔ)單元存放變量x1,x2,x3和x4.sect建立包含代碼和數(shù)據(jù)的自定義段.sect “vectors”定義向量表,緊隨其后的是復(fù)位向量和

5、中斷向量,名為vectors.usect為未初始化變量保留存儲(chǔ)空間的自定義段STACK .usect “STACK”,10h 在數(shù)據(jù)存儲(chǔ)器中留出16個(gè)單元作為堆棧區(qū),名為STACK(4)       匯編語言程序中的數(shù)據(jù)形式如表所示形式舉例二進(jìn)制1110001b或1111001B八進(jìn)制226q或572Q十進(jìn)制1234或1234或1234(缺省型)十六進(jìn)制0A40h或0A40H或0xA40浮點(diǎn)數(shù)1.654e23(僅C語言程序中能用,匯編程序中不能用)字符D字符串“this is a string”2   &

6、#160;         程序21 程序一編程目的:本程序是試編的第一個(gè)程序,其主要目的是為了了解DSP的輸入和輸出方法程序功能:求乘積之和y=a1*x1+a2*x2+a3*x3+a4*x4.title"sample.asm".mmregs ;將存儲(chǔ)映像寄存器導(dǎo)入列表STACK.usect"STACK",10h ;給堆棧段分配空間.bssa,4 ;將9個(gè)字分配給各個(gè)變量.bssx,4.bssy,1PA0.set0.defstart.data ;以下是分配的數(shù)據(jù)table:.word4

7、,4,4,4.word4,4,4,4 .text ;以下是數(shù)據(jù)start:STM#0,SWWSR ;將等待位設(shè)為0STM#STACK+10h,SP ;設(shè)堆棧指針STM#a,AR1 ;將AR1指向變量aRPT #7 ;從 程序存儲(chǔ)空間轉(zhuǎn)移8個(gè)值到數(shù)據(jù)儲(chǔ)存空間MVPDtable,*AR1+CALLSUM ;調(diào)用SUM子程序end:Bend SUM:STM#a,AR3 ;子程序STM#x,AR4 RPTZA,#3 ;求乘積之和MAC*AR3+,*AR4+,ASTL A,y ;將寄存器A中的低16位存入y地址 空間PORTWy,PA0 ;將y地址中的值輸出到輸出口RET ;子程序返回.end ;程序結(jié)

8、束等待位的設(shè)置:C54x片內(nèi)有一部件軟件可編程等待狀態(tài)發(fā)生器, lYV軟vb無X網(wǎng)教供Y16G9i垠控制著外部總線的工作。軟件可編程等待狀態(tài)發(fā)生器可將外部總線周期延長多達(dá)7個(gè)周期,這樣一來,C54x就能很方便的與外部慢速器件相接口。如果外部器件要求插入7個(gè)以上的等待周期,則可以利用硬件READY先來接口。當(dāng)所有的外部尋址都配置在0等待狀態(tài)時(shí),加到等待狀態(tài)發(fā)生器的時(shí)鐘被關(guān)斷;來自內(nèi)部時(shí)鐘的這些通道被切斷后,可以降低處理器的功耗。 軟件可編程等待狀態(tài)發(fā)生器的工作受到一個(gè)16位的軟件等待狀態(tài)寄存器(SWWSR)的控制,它時(shí)一個(gè)存儲(chǔ)器映象寄存器,在數(shù)據(jù)空間的地址為0028h。將程序空間和數(shù)據(jù)空間都分成

9、兩個(gè)32K 字塊,I/O空間由一個(gè)64K字塊組成。這5個(gè)字塊空間在SWWSR中都相應(yīng)的有一個(gè)3位字段,用來定義各個(gè)空間插入等待狀態(tài)的數(shù)目: 15 1412 119 86 53 20 保留/XPA(僅C548,C549)I/O空間(64K)數(shù)據(jù)空間 (高32K)數(shù)據(jù)空間 (低32位)程序空間 (高32位)程序空間 (低32位) R R/W R/W R/W R/W R/W上述SWWSR的各個(gè)3位字段規(guī)定的插入等待狀態(tài)的最小數(shù)為0(不插入等待周期),最大數(shù)為7(111b)。22程序二編程目的:熟悉DSP匯編程序設(shè)計(jì)技巧,完善輸出功能程序功能:實(shí)現(xiàn)一8位LED燈泡由左到右循環(huán)閃爍 .title&quo

10、t;bubble.asm" .mmregsSTACK.usect"STACK",5h.bssy,1 .defstart .dataPA0.set 0.textstart:STM#7000,SWWSR ;設(shè)等待位 STM #2,AR3 ;將輔助寄存器AR3設(shè)為2 (乘2,實(shí)現(xiàn)左移)STM#6,AR1 ;將輔助寄存器AR1設(shè)為6 (左移7次)STM#3,AR2 ;將輔助寄存器AR2設(shè)為3 (循環(huán)執(zhí)行4次) LDAR3,T ;將T(乘法寄存器)設(shè)為2loop1: LD#1,A ;A寄存器值為1STLA,y ;y1PORTWy,PA0 ;輸出y地址內(nèi)的值到輸出口 STM#

11、10000,AR4 ;將輔助寄存器AR4設(shè)為10000loop3:RPT#10000 ;重復(fù)執(zhí)行下一程序10001次NOP ;等待 BANZloop3,*AR4- ;循環(huán)AR4值(10000)1次loop2:MPYy,A ;將y×T,其值存入A寄存器STLA,y ;將A內(nèi)值存入y地址中PORTWy,PA0 ;輸出y地址值到輸出口STM#10000,AR5 ;將輔助寄存器AR5設(shè)為10000loop4:RPT#10000 ;實(shí)現(xiàn)第8個(gè)燈跳轉(zhuǎn)到第1個(gè)燈時(shí)的時(shí)間延遲NOPBANZloop4,*AR5-BANZloop2,*AR1-BANZloop1,*AR2-end:Bend.end數(shù)據(jù)尋

12、址方式:C54x共有7種數(shù)據(jù)尋址方式,如表所示:尋址方式用途舉例指令含義立即尋址主要用于初始化LD 10,A將立即數(shù)10傳送至累加器A絕對尋址利用16位地址尋址存儲(chǔ)單元STL A,*(y)將累加器A的低16位存放到變量y所在的存儲(chǔ)單元中累加器尋址把累加器的內(nèi)容作為地址READYA x按累加器A作為地址讀程序存儲(chǔ)器,并存入變量x所在的數(shù)據(jù)存儲(chǔ)器單元直接尋址利用數(shù)據(jù)頁指針和堆棧指針尋址LD x,A(DP+x的低7位地址)A間接尋址利用輔助寄存器作為地址指針LD *AR1,A(AR1)A存儲(chǔ)器映象寄存器尋址快速尋址存儲(chǔ)器映象寄存器LDM ST1, bGkI,FV垠的國)Eq的B (ST1)B堆棧尋址

13、壓入/彈出數(shù)據(jù)存儲(chǔ)器和MMR(存儲(chǔ)器映象寄存器)PSHM AG(SP)1SP,(AG)TOSC54x尋址存儲(chǔ)器有兩種基本的數(shù)據(jù)形式:16位數(shù)和32位數(shù)。大多數(shù)指令能夠?qū)ぶ?6位數(shù),但是,只有雙精度和長字指令才能尋址32位數(shù)。在32位尋址時(shí),先處理高有效字,然后處理低有效字。如果尋址的第1個(gè)字處在偶地址,那么第2 個(gè)字就處在下一個(gè)(較高的)地址;如果第1各字處在奇地址,那么第2個(gè)字就處在前一個(gè)(較低的)地址。循環(huán)操作:BANZ在程序設(shè)計(jì)時(shí),經(jīng)常需要重復(fù)執(zhí)行某一段程序。利用BANZ(當(dāng)輔助寄存器部位0時(shí)轉(zhuǎn)移)指令執(zhí)行循環(huán)技術(shù)和操作是十分方便的。如果要重復(fù)執(zhí)行n次,則重復(fù)指令中應(yīng)規(guī)定計(jì)數(shù)值為n1次。

14、重復(fù)操作:C54x有3條重復(fù)操作指令:RPT(重復(fù)下條指令)、RPTZ(累加器清0并重復(fù)下條指令)以及RPTB(塊重復(fù)指令)。重復(fù)指令RPT或 RPTZ允許重復(fù)執(zhí)行緊隨其后的那一條指令。如果要重復(fù)執(zhí)行n次,則重復(fù)指令中應(yīng)規(guī)定計(jì)數(shù)值為n1次。23 程序三編程目的:實(shí)現(xiàn)DSP分時(shí)輸入與輸出功能程序功能:先從I/O口讀入一數(shù)據(jù)并將其存入某地址,再從該地址將數(shù)據(jù)輸出到I/O口 .title "dspio.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart: PORTRPA1

15、,y ;從I/O口讀入數(shù)據(jù)并儲(chǔ)存到y(tǒng)所在的地址 LDy,A ;將y中的數(shù)據(jù)寫入累加器A中(便于觀察y中數(shù)值的變化情況) PORTWy,PA0 將y所在地址中的數(shù)據(jù)輸出到I/O口;end:Bend.end 2.4 程序四編程目的:實(shí)現(xiàn)DSP循環(huán)輸入與輸出功能程序功能:令DSP反復(fù)執(zhí)行從輸入裝置讀取數(shù)據(jù),并將數(shù)據(jù)存入某一地址,再從該地址將數(shù)據(jù)輸出到輸出設(shè)備 .title "dspio2.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .textstart:STM#4000,AR1LOOP

16、1:PORTRPA1,y ;循環(huán)讀寫LDy,APORTWy,PA0 BANZLOOP1,*AR1end:Bend.end2.5 程序五編程目的:應(yīng)用DSP實(shí)現(xiàn)對壓水堆大破口事故(LOCA)進(jìn)行事故后果判斷編程背景:當(dāng)始發(fā)事件大LOCA發(fā)生時(shí),教$pZZ)d育z理提.育'|cG供rJ.國Q&=教6atE%SLq軟pG需要下列功能響應(yīng)以消除或緩解事故:(1)       停堆(RS),中止核裂變過程;(2)       安全殼噴淋系統(tǒng)動(dòng)作,以降低安全殼壓力(COI

17、);(3)       向堆芯注入應(yīng)急冷卻水(ECI),以冷卻堆芯;(4)       安全殼再循環(huán)冷卻(COR),由循環(huán)噴淋水導(dǎo)出安全殼內(nèi)熱量,控制安全殼的溫度核壓力;(5)       堆芯再循環(huán)冷卻(ECR),進(jìn)行堆芯再循環(huán)冷卻階段。 功能事件樹圖如下圖所示破口 PB堆次臨界RS安全殼降壓COI堆芯應(yīng)急冷卻ECI完全殼降壓COR堆芯再循環(huán)冷卻ECR序列號堆芯是否熔化程序功能:反復(fù)從輸入口讀取數(shù)據(jù)(不同位分別代表

18、執(zhí)行不同的功能響應(yīng)),經(jīng)DSP處理后將判斷結(jié)果輸出到輸出口,通過指示燈(不同的燈代表不同事故結(jié)果)顯示出來 .title "LOCA.asm" .mmregsPA0.set0 PA1.set1STACK.usect"STACK",10h .bssy,1 .bssx,1 .defstart .datatable:.word0,128,0,128,0,32,0,32,0,128,0 ;事故分析列表 .word128,0,32,0,32,0,0,0,0,0 .word4,0,4,0,0,0,0,0,4,0 .word4,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,2,0,2,0,0,0,0,0 .word2,0,2,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word0,0,0,0,0,0,0,0,0,0 .word16,0,16,0,0,0,0,0,16,0 .word16,0,0,0,0,0,1,0,1,0 .word0,0,0,0,1,0,1,0,0,0 .word0,

溫馨提示

  • 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

提交評論