2013-11-25 50 views
1

在反編譯程序我翻過凸輪以下指令:無用存儲和負載

890c:  e50b0008  str  r0, [fp, #-8] 
8910:  e50b100c  str  r1, [fp, #-12] 
8914:  e51b0008  ldr  r0, [fp, #-8] 
8918:  e51b100c  ldr  r1, [fp, #-12] 

什麼是最後2 LDR的地步?

回答

4

編譯器在未完全優化時會發出這些消息。像

a = 0; 
return a; 

當編譯調試時,會看起來有點像這樣。

回覆:評論:在這種情況下,最有可能是調用序列

a = something; //compiler: calculate in register, write out to memory 
b = something_else; //compiler: calculate in register, write out to memory 
Func(a, b); //compiler: pick up from memory, branch and link to the function 
+0

下一條指令是一個「bl」,它可以解釋這一切。 – mathk

0

另一種可能是,該方案正在修改內存映射I/O寄存器。

+1

IO在[fp,#-8]映射? – mathk

+0

沒有理由'fp'不能用作通用寄存器 – tangrs