《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > ARM匯編語言數(shù)據(jù)處理操作

ARM匯編語言數(shù)據(jù)處理操作

2017-06-22
關(guān)鍵詞: 匯編語言

1)簡單的寄存器操作

典型的ARM數(shù)據(jù)處理指令的格式如下:

ADD              R0,R1,,R2         ;R0<-R1+R2

分好后面是注釋語句,,應該被匯編器忽略。加入注釋語句使匯編代碼更加易讀和易解釋,。這個例子只是簡單地取2個寄存器值的和,并將結(jié)果放在第2個寄存器,。寄存器的值都是32位,。

在編寫匯編語言源代碼時,必須注意操作數(shù)的正確順序,,第一個是結(jié)果寄存器,,然后是第1操作數(shù),最后是第2操作數(shù)(對于**操作,,第1和第2操作數(shù)都是寄存器,,它們的次序并不重要)。當這些指令執(zhí)行時,,對系統(tǒng)而言,,惟一的變化是目的寄存器R0的值。當然,,如果指定S,,則CPSR中的標志位N,、Z、C和V的值也會有選擇的變化,。

2)立即數(shù)操作

在數(shù)據(jù)處理指令中,,第2操作數(shù)除了可以是寄存器,還可以是一個立即數(shù),。如果只有希望把一個常數(shù)加到寄存器,,而不是2個寄存器相加,則可用立即數(shù)值取代第2操作數(shù),。例如,,立即數(shù)用前面加一個#的數(shù)值常量來表示:

ADD       R3,R3,,#1                 ,;R3<-R3+1

AND       R8,R7,,#&FF            ,;R8<-R7[7:0]

由第一個例子可以說明,允許源和目的操作數(shù)使用同一個寄存器,。第二個例子中,,&表示該立即數(shù)是十六位進制的立即數(shù)。

雖然立即數(shù)的值是在32位指令字內(nèi)編碼,,但不可能將所有可能的32為值作為有效立即數(shù),,有效立即數(shù)是由一個8位的立即數(shù)循環(huán)右移2n位得到。匯編器也會用MVN代替MOV,、用SUB代替ADD等,,這樣也可把立即數(shù)置于可設(shè)置的范圍之內(nèi),。

3)寄存器移位操作

在ARM數(shù)據(jù)處理指令中,,第2操作數(shù)還有一種特有的形式——寄存器移位操作,即允許第2操作數(shù)在同第一操作數(shù)運算之前完成移位操作,。例如:

ADD       R3,,R2,R1,,LSL #3                ,;R<-R2+8*R1

注意,它是一條ARM指令,,在一個時鐘周期內(nèi)執(zhí)行,。許多處理器采用獨立的指令提供移位操作,但ARM將它們和基本的ALU操作合并在一個指令中,。

例子中,,在R1和R2相加之前,,先將R1邏輯左移3位,然后再與R2相加,,在這里用立即數(shù)#3表示移位的位數(shù),。可得到的移位操作有LSL,、LSR,、ASL、ROR和RRX,,這些移位操作與移位尋址中的移位操作時相同的,。

第2操作數(shù)的移位位數(shù)除了可用立即數(shù)定義外,還可使用寄存器值定義,。例如:

ADD              R5,,R5,R3,,LSL R2         ,;R5<-R5+R3*2的R2次冪

這是4地址指令。只有R2的低8位是有意義的,,但由于移位超過32位不是非常有用,,所以這種限制對于許多用途是不重要的。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。