What mathematical function do ASR and ROR perform?

For instance I have a two registers for storing a value of 2bytes (R5:R4)

then I use

```
SomeProcedure:
mov r20, r2
clr r3
clr r4
clr r5
cpi r20, 0
brge ProcLoop
neg r20
com r3
ProcLoop:
cpi r20, 0
breq ExitLoop
add r4, r2
adc r5, r3
dec r20
rjmp ProcLoop
ExitLoop:
asr r5
ror r4
ret
;then write the result to the data memory R4:R5
rcall SomeProcedure
st x+,r4
st x+,r5
```

The first part of program is to square the input value (input = r3)

I have chosen several values for R5:R4, but they do not make sense

For example (all in decimal)

choose R3=2, then result = 512 = 128*(2^2)

choose R3=3, then result = 1024 = 64*(3^2)

choose R3=4, then result = 2048 = 128*(4^2)

choose R3=5, then result = 3072 = ????

I know that in the hex value, whatever the program get after getting the square of input value into R5:R4, then the program does R5/2:R4/2 then change the position of R5 and R4 into new R4:R5 as the output .