The bit being shifted out can be copied into the C
bit (carry flag) if you use the S
suffix ("set flags"). And the RRX
instruction uses C
to set the bit 31 of the result. So you can probably do something like:
; 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
Note that this is a pretty slow way of reversing bits. If RBIT
is available, you should use it, otherwise check some bit twiddling tricks.