2013-10-08 45 views
0

所以我的問題是我雖然很簡單,我有一個算法,但我似乎無法使用thumb-2指令使其工作。在寄存器中反轉位Thumb-2

安利,我需要扭轉r0的位,我認爲最簡單的方法是將邏輯右移到臨時寄存器,然後將左移到結果寄存器中。然而LSL,LSR似乎不允許你存儲丟失到最高有效位或最低有效位的移位位(同時也移動該寄存器的位)。是否有一些我很想理解的指令的一部分。

這是我的ARM參考: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html

回答

2

位被移出可以,如果你使用S後綴(「設置標誌」)複製到C位(進位標誌)。 RRX指令使用C來設置結果的位31。所以你大概可以這樣做:

; 32 iterations 
    MOV R2, #32 
    ; init result 
    MOV R1, #0 
loop 
    ; copy R0[31] into C and shift R0 to left 
    LSLS R0, R0, #1 
    ; shift R1 to right and copy C into R1[31] 
    RRX R1, R1 
    ; decrement loop counter 
    SUBS R2, #1 
    BNE loop 
    ; copy result back to R0 
    MOV R0, R1 

請注意,這是一個非常緩慢的位反轉方式。如果有RBIT可用,則應該使用它,否則請檢查一些bit twiddling tricks

+0

這是相當劈手,非常感謝! –