我想弄清楚在ARM程序集中數組是如何工作的,但我只是不知所措。我想初始化一個大小爲20的數組爲0,1,2等等。ARM彙編數組
A[0] = 0
A[1] = 1
我什至不知道如何打印什麼,我必須看看,如果我做得正確。這是我到目前爲止:
.data
.balign 4 @ Memory location divisible by 4
string: .asciz "a[%d] = %d\n"
a: .skip 80 @ allocates 20
.text
.global main
.extern printf
main:
push {ip, lr} @ return address + dummy register
ldr r1, =a @ set r1 to index point of array
mov r2, #0 @ index r2 = 0
loop:
cmp r2, #20 @ 20 elements?
beq end @ Leave loop if 20 elements
add r3, r1, r2, LSL #2 @ r3 = r1 + (r2*4)
str r2, [r3] @ r3 = r2
add r2, r2, #1 @ r2 = r2 + 1
b loop @ branch to next loop iteration
print:
push {lr} @ store return address
ldr r0, =string @ format
bl printf @ c printf
pop {pc} @ return address
ARM迷惑了我,因爲它是,我不知道我做錯了什麼。如果任何人都可以幫助我更好地理解這種工作方式,將不勝感激。
使用調試器,你會看到如果你做得對。你的數組處理看起來不錯,但打印部分是錯誤的。檢查如何在您的平臺上使用printf。 –
'str r2,[r3] @ r3 = r2'該評論是錯誤的,不是'r3'會改變,但內存內容會改變。在由'r3'值指向的地址處。 'mov r2,#0 @ index r2 = 0'有點......你用'r2'作爲索引和值,這實際上是很好的,但是我會從註釋中忽略單詞「index」。 'ldr r1,= a @ r1給數組的索引點'r1'是數組(第一個元素)的地址,而不是索引。 (其餘部分如上面薩米寫過的,數組代碼看起來不錯,printf完全是borked,並使用調試器來檢查內存內容並註冊內容) – Ped7g
是你想要創建一個單詞數組還是字節數組?你做了一連串的單詞,如果那是你想要的,那很好。 –