.thumb
ldr r0,=0xFF00FF00
0: f04f 20ff mov.w r0, #4278255360 ; 0xff00ff00
.thumb
.cpu cortex-m0
ldr r0,=0xFF00FF00
00000000 <.text>:
0: 4800 ldr r0, [pc, #0] ; (4 <.text+0x4>)
2: 0000 .short 0x0000
4: ff00ff00 .word 0xff00ff00
Look at the ARM documentation it clearly documents how the immediate encodings work. And also basically what you cannot do. Various thumb2 extensions add more features as shown above (armv6-m vs armv7-m (or -a)).
As Jake points out the 32 bit arm instructions are basically 8 significant bits shifted by an even number (0,2,4,6).
ldr r0,=0x00000081
ldr r0,=0x00000101
ldr r0,=0x00000102
ldr r0,=0x00000204
ldr r0,=0x10000008
ldr r0,=0xEFFFFFF7
ldr r0,=0xFFFFF00F
00000000 <.text>:
0: e3a00081 mov r0, #129 ; 0x81
4: e59f0010 ldr r0, [pc, #16] ; 1c <.text+0x1c>
8: e59f0010 ldr r0, [pc, #16] ; 20 <.text+0x20>
c: e3a00f81 mov r0, #516 ; 0x204
10: e3a00281 mov r0, #268435464 ; 0x10000008
14: e3e00281 mvn r0, #268435464 ; 0x10000008
18: e3e00eff mvn r0, #4080 ; 0xff0
1c: 00000101 .word 0x00000101
20: 00000102 .word 0x00000102
The arm encodings are easier to understand than the thumb encodings, but the arm docs have examples that make it easier.
Since you mentioned 0xFF00FF00 this means you are asking about armv7-a or armv7-m yes?