簡體   English   中英

ARM匯編遞歸功能

[英]ARM assembly recursive power function

需要將以下C代碼轉換為ARM匯編子例程:

 int power(int x, unsigned int n) 
 {          
   int y; 
   if (n == 0)  
     return 1; 
   if (n & 1) 
     return x * power(x, n - 1); 
   else 
   { y = power(x, n >> 1); 
     return y * y; 
   } 
 }     

這是我到目前為止的內容,但無法弄清楚如何在每次返回后使鏈接寄存器遞增(基普循環回到同一點)

pow             CMP             r0, #0
                MOVEQ           r0, #1
                BXEQ            lr
                TST             r0, #1
                BEQ             skip
                SUB             r0, r0, #1
                BL              pow
                MUL             r0, r1, r0
                BX              lr
skip            LSR             r0, #1
                BL              pow
                MUL             r3, r0, r3
                BX              lr

BL指令不會自動從堆棧中壓入或彈出任何內容。 這樣可以節省內存訪問。 這就是它與RISC處理器一起工作的方式(部分是因為它們提供30個通用寄存器)。

STR   lr, [sp, #-4]!   ; "PUSH lr"
BL    pow
LDR   lr, [sp], #4     ; "POP lr"

如果重復BL調用,那么您想在循環外的堆棧上進行STR / LDR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM