ARM體系結構與程式設計學習(五)

2021-05-26 06:14:24 字數 3335 閱讀 3021

ldr rd, =label 示例: 字串複製

example 2.7 顯示了用乙個字串覆蓋另乙個字串的 arm **例程。 該例程使用ldr偽指令從乙個資料節中載入兩個字串的位址。 有以下幾點需要特別注意:

dcb

dcb指令定義乙個或多個儲存位元組。除了整數值之外,dcb還接受帶引號的字串。 字串的每個字元均存放在連續的位元組中。 有關詳細資訊,請參閱dcb。

ldr, str

ldrstr指令使用後變址定址來更新其位址暫存器。例如,指令:

ldrb    r2,[r1],#1
r1所指向的位址的內容載入r2,然後將r1增加 1。

example 2.7. 字串複製

area    strcopy, code, readonly

entry ; mark first instruction to execute

start

ldr r1, =srcstr ; pointer to first string(把位址載入到r1)

ldr r0, =dststr ; pointer to second string

bl strcopy ; call subroutine to do copy

stop

mov r0, #0x18 ; angel_swireason_reportexception

svc     #0x123456 ; arm semihosting (formerly swi)

strcopy

ldrb r2, [r1],#1 ; load byte and update address

strb r2, [r0],#1 ; store byte and update address

cmp r2, #0 ; check for zero terminator

bne strcopy ; keep going if not

mov pc,lr ; return

area strings, data, readwrite (定義資料區)

srcstr dcb "first string - source",0

dststr dcb "second string - destination",0

end

4.6.2 arm彙編例項
;設定本段程式的名稱及屬性
area  block , code , readonly
;設定將要複製的字數
num  equ  20
;標識程式入口點
entry
start
;r0暫存器指向源資料區src
ldr  r0,=src
;r1暫存器指向目標資料區dst
ldr  r1 ,=dst
;r2指定將要複製的字數
mov  r2, #num
;設定資料棧指標(r13),用於儲存工作暫存器數值(設定sp堆疊開始位址為0x400)
mov  sp,#0x400
;進行以8個字為單位的資料複製
blockcopy
;需要進行的以8個字為單位的複製次數
movs  r3,r2,lsr #3
;對剩餘不足8個字的資料,,跳轉到copywords,以字為單位進行複製
beq   copywords
;儲存工作暫存器
stmfd  sp!,
octcopy
;從源資料讀取8個字的資料,放到8個工作暫存器中,並更新目標資料區指標r0
ldmia  r0!,
;將這8個字資料寫入到目標資料區中,並更新目標資料區指標r1
stmia  r1!,
;將塊複製次數減1
subs   r3,r3,#1
;迴圈,直到完成以8字為單位的塊複製
bne   octcopy
;恢復工作暫存器值
ldmfd  sp!,
copywords
;剩餘不足8個字的資料的字數(邏輯與,把r2 前7 位扔掉)
ands   r2,r2,#7
;資料複製完成
beq  stop
wordcopy
;從源資料讀取1個字的資料,放到暫存器r3中,並更新目標資料區指標r0
ldr  r3,[r0],#4
;將這r3中資料寫入到目標資料區中,並更新目標資料區指標r1
str  r3 ,[r1],#4
;將字數減1
subs r2,r2,#1
;迴圈,直到完成以字為單位的資料複製
bne    wordcopy
stop
;呼叫angel_swireason_reportexception
;arm semihosting swi
;從應用程式中退出
mov  r0, #0x18
ldr   r1,=0x20026
swi   0x123456
;定義資料區blockdata
area  blockdata, data, readonly
;定義源資料src及目標資料區dst
src   dcd    1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst   dcd    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;結束彙編
end

ARM體系結構與程式設計

arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在全部模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每乙個暫存器相應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每乙個...

ARM體系結構與程式設計學習(六)

adr偽指令例項 設定本段程式的名稱及屬性 area adrlabel code,readonly entry start 跳轉到子程式func執行 bl func 呼叫angel swireason reportexception arm semihosting swi stop mov r0,0...

ARM體系結構與程式設計學習(十)

第六章 atpcs介紹 在彙編編譯器中使用 apcs選項。6.1.2暫存器使用規則 子程式使用r0 r3來傳遞引數。用r4 r11來儲存區域性變數,thumb使用r4 r7。r12記作ip,呼叫scratch暫存器。r13記作sp,用作資料堆疊指標。r14記作lr,用作儲存子程式的返回位址。r15記...