Цитата(Golikov A. @ Aug 17 2014, 21:11)

это же условно...
может же быть входной байтовый буфер через который идет структура, который при декодировании вот так сделает. Ну или прям стандарт, протокол вида:
преамбула - байт, код команды - байт, данные - 32 бита, как раз приводит к таким строчкам...
В этом случае неоценимая помощь будет оказана компилятору, если структура будет должным образом описана, а начало буфера будет выровнено на границу слова. Код привести?
CODE
typedef struct s_test
{
DWORD dw1;
BYTE b1;
BYTE b2;
DWORD dw2;
} __attribute((packed)) s_test;
BYTE b_test[10];
void f_test(void)
{
s_test *p;
p = (s_test *)b_test;
p->dw1 = p->dw2;
}
Листинг
void f_test(void)
{
8000f18: b510 push {r4, lr}
s_test *p;
p = (s_test *)b_test;
p->dw1 = p->dw2;
8000f1a: 4c0a ldr r4, [pc, #40] ; (8000f44 <f_test+0x2c>)
8000f1c: 79e2 ldrb r2, [r4, #7]
8000f1e: 79a0 ldrb r0, [r4, #6]
8000f20: 7a23 ldrb r3, [r4, #8]
8000f22: 0212 lsls r2, r2, #8
8000f24: 4302 orrs r2, r0
8000f26: 041b lsls r3, r3, #16
8000f28: 4313 orrs r3, r2
8000f2a: 1c1a adds r2, r3, #0
8000f2c: 7a63 ldrb r3, [r4, #9]
8000f2e: 061b lsls r3, r3, #24
8000f30: 4313 orrs r3, r2
8000f32: 0a1a lsrs r2, r3, #8
8000f34: 7023 strb r3, [r4, #0]
8000f36: 7062 strb r2, [r4, #1]
8000f38: 0c1a lsrs r2, r3, #16
8000f3a: 0e1b lsrs r3, r3, #24
8000f3c: 70a2 strb r2, [r4, #2]
8000f3e: 70e3 strb r3, [r4, #3]
}
8000f40: bd10 pop {r4, pc}
8000f42: 46c0 nop ; (mov r8, r8) ; прикольно. это выравнивание?))
8000f44: 2000063c .word 0x2000063c - адрес буфера
Не стреляет))
Даже осторожничает с dw1