1
.global reverse
.data
start: .word 1
end: .word 1
loopcount: .word 0
reverse:
ldr r3, =end
str r1, [r3]
next:
ldr r3,=end
ldr r2,=start
ldr r3, [r3]
ldr r2, [r2]
cmp r2,r3
bgt done
cmp r2,r3
beq done
sub r3,r2
mov r2,#0
mov r1,#0
loop:
cmp r2,r3
beq next2
add r2, r2, #1
add r1, r1, #4
b loop
next2:
ldr r3, [r0]
add r0, r0, r1
ldr r2, [r0]
str r3, [r0]
sub r0, r0, r1
str r2, [r0]
add r0, r0, #4
ldr r3,=end
ldr r1, [r3]
sub r1, r1, #1
str r1, [r3]
ldr r3,=start
ldr r1, [r3]
add r1, r1, #1
str r1, [r3]
b next
done:
bx lr
我試圖扭轉一個數組,這是我在裝配時相反的功能,該功能是反向(int數據*,大小);數據是一個數組,大小是大小。它可以處理任何大小爲5的數組,但是對於較長的數組(例如大小爲10),它將忽略最後2個數組,並且像數組大小爲8一樣操作,並將其全部交換,就好像數組中的最後2個數字沒有它會返回:大會,分不清什麼是錯我的代碼的ARM處理器
Array:
1 2 3 4 5 6 7 8 9 10
My Return:
8 7 6 5 4 3 2 1 9 10
我似乎無法找出我的問題是什麼。
我似乎無法找出爲什麼你的代碼,甚至有時工作,因爲它看起來非常複雜,加上所有的內存變量。但調試器可以告訴你它做了什麼。我會從大小爲0,1,2的數組開始......我認爲應該比在大小10的時候更早發生意外。(並且不要只看輸出,每個指令步驟看看,真的是什麼發生......有時,即使代碼在您寫入時不起作用,您也可以獲得正確的輸出,只是幸運的事故) – Ped7g