LDRD R8, R9, [R3, #0x20] - I'm guessing they meant to write 8 words (where a word is 4 bytes long). The same goes for 9 words (instead of bytes)
LDRNE R2, [R5, #960]! -
960 is added to the address contained in R5, the value (4 bytes) contained at resulting address is then loaded into R2.
Following the load the address which was accessed previously is stored ...
In order to see what is going on, let's use the value of 0x1080 for the initial sp.
The stack pointer at the beginning:
esp -> 0x1080
after sub esp,0x60:
esp -> 0x1020
So the stack frame of the function is between 0x1080 and 0x1020.
The stack grew from 0x1080 to 0x1020, that why it grows under - from the higher value to the lower.
Then, esp+0x5c ...
If you don't need assembly, just read the source file (main.c). objdump is a debug tool and by using it you can check what assembly instructions correspond to source lines. If you don't need this functionality, why are you using objdump at all?