Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .def _test
- .ref _d
- .text
- _test:
- BSET M40
- AADD #-4, SP
- MOV SP, AR1
- MOV AC1, dbl(*SP(2)) ; Сохранение значение, из которого необходимо вычленить битовые поля
- MOV AC3, dbl(*SP(2)) ; Сохранение маски
- ; формируем команду для извлечения младших 16 битов по маске
- MOV LO(AC3), AC2 ; младшие 16 битов в AC2
- SFTL AC2, #8 ; маска должна быть смещена на 8 битов влево (см. формат выше)
- OR #76FFh << #16, AC2, AC2 ; добавляем 0111 0110 к старшей части
- OR #10h, AC2 ; добавляем 0001 0000 к младшей части команды
- MOV AC2, *(bxtr_low) ;
- ; аналогично форм. ком. для изв. для стар. 16 битов маски
- MOV HI(AC3), AC2 ;
- SFTL AC2, #8 ;
- OR #76FFh << #16, AC2, AC2 ;
- OR #10h, AC2 ;
- MOV AC2, *(bxtr_high);
- ; надо обнулить очередь команд (IBQ)
- MOV #1, T0;
- ; обнуляем благодаря использованию условного ветвления (сброс IBQ)
- BCC bxtr_low, T0 != #0; любое условие
- bxtr_low:
- BFXTR #8024h, AC0, T2 ; любая команда размером 32 бита (будет заменена)
- SHTL AC1, #16;
- bfxtr_high:
- BFXTR #8024h, AC0, T2 ; любая команда размером 32 бита (будет заменена)
- BCNT LW(AC3), LW(AC3), T1, T2; в T1 - кол-во единиц в младшей части маски
- OR AC1 << T1, AC0
- AADD #3, SP
- RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement