我被困在爲什麼這個函數在應該返回時反覆調用它自己。ARM函數沒有正確返回
Initialize:
stmfd sp!, {R0-R4,lr}
mov R4, #0 @used for storing 0
mov R0, #2
mov R5, #0
ldr R1, =sieve
ldr R1, [R1]
ldr R2, =primes
ldr R2, [R2]
str R4, [R1], #4 @intialize first and second elements in sieve to 0
str R4, [R1]
mov R4, #1 @used for storing 1
setToOne:
str R4, [R1], #4
add R0, R0, #1
cmp R0, #MAX
blt setToOne
ldmfd sp!, {R0-R4,pc} @For somereason Initialize repeats as if lr points back to its begining (instead of where it's called from)
好,因爲它說我不能發佈整個程序「您的文章沒有什麼太大的上下文解釋代碼段;請更清楚地解釋您的方案」
我看不出爲什麼你的函數會重複調用自己的任何原因。你打電話過得怎麼樣? – 2012-04-21 10:40:27
你能在ldmfd上設置一個斷點並看看你的棧嗎? (特別是堆疊的LR)。也許它會被粉碎(sieve相對於堆棧的位置,它的大小是多少?) - 假設你是一個「帶鏈接的分支」指令來調用「Initialize」(它在調用時更新LR) - 否則你的LR將毫無意義。 – Dan 2012-04-21 12:02:25
是你的程序垃圾堆棧?什麼是反彙編(與地址等)和你的記憶地圖看起來像什麼 – 2012-04-21 14:31:25