Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
static inline uint8_t
get_byte_bits(uint8_t b)
{
b = (b & 0x55) + ((b > > 1) & 0x55); // 0, 1 or 2 in each bit pair
b = (b & 0x33) + ((b > > 2) & 0x33); // 0..4 in each 4 bits
b = (b + (b > > 4)) & 0x0F;
return b;
}
Перед этим в R19 загружался из ОЗУ нужный байт.
558 027e 932F mov r25,r19
560 0280 9575 andi r25,lo8(85)
561 0282 832F mov r24,r19
563 0284 8695 lsr r24
564 0286 8575 andi r24,lo8(85)
565 0288 980F add r25,r24
567 028a 892F mov r24,r25
568 028c 8695 lsr r24
569 028e 8695 lsr r24
570 0290 8373 andi r24,lo8(51)
571 0292 9373 andi r25,lo8(51)
573 0294 980F add r25,r24
577 0296 892F mov r24,r25
578 0298 8295 swap r24
579 029a 8F70 andi r24,0x0f ; -- единственная "лишняя" команда
580 029c 980F add r25,r24
581 029e 9F70 andi r25,lo8(15)