Всем привет.
Такой вопрос. Почему код
Код
while(pph!=&ph[8])
{
*(pph++)=~(*(pph-4));
},
в котором берётся часть массива, инвертируется и записывается в другое место, компилируется в такой несимметричный код?
Код
while(pph!=&ph[8])
{
*(pph++)=~(*(pph-4));
94: fd 01 movw r30, r26
96: 34 97 sbiw r30, 0x04; 4
98: 80 81 ld r24, Z
9a: 80 95 com r24
9c: 8c 93 st X, r24
9e: 80 91 71 00 lds r24, 0x0071
a2: 80 95 com r24
a4: 11 96 adiw r26, 0x01; 1
a6: 8c 93 st X, r24
a8: 11 97 sbiw r26, 0x01; 1
aa: 90 91 72 00 lds r25, 0x0072
ae: 89 2f mov r24, r25
b0: 80 95 com r24
b2: 12 96 adiw r26, 0x02; 2
b4: 8c 93 st X, r24
b6: 12 97 sbiw r26, 0x02; 2
b8: 80 91 73 00 lds r24, 0x0073
bc: 80 95 com r24
be: 13 96 adiw r26, 0x03; 3
c0: 8c 93 st X, r24
}
Казалось бы чего проще, для всех 4-х байт сделать одно и тоже действие: загрузить байт
в регистр, а лучше бы воспользоваться регистровой парой Z, инвертировать и записать в
новое место, указываемое парой Х. Дальше, почему бы не использовать постинкремент Х+
вместо двух команд adiw и st? Может, кто-то знает, как переделать си-код в нечто подобное?