Advertisement
Guest User

Untitled

a guest
May 19th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .def    _test
  2.     .ref    _d
  3.     .text
  4.  
  5. _test:
  6.     BSET M40
  7.     AADD #-4, SP
  8.     MOV SP, AR1
  9.     MOV AC1, dbl(*SP(2)) ; Сохранение значение, из которого необходимо вычленить битовые поля
  10.     MOV AC3, dbl(*SP(2)) ; Сохранение маски
  11.  
  12.     ; формируем команду для извлечения младших 16 битов по маске
  13.     MOV LO(AC3), AC2 ; младшие 16 битов в AC2
  14.     SFTL AC2, #8 ; маска должна быть смещена на 8 битов влево (см. формат выше)
  15.     OR #76FFh << #16, AC2, AC2 ; добавляем 0111 0110 к старшей части
  16.     OR #10h, AC2 ; добавляем 0001 0000 к младшей части команды
  17.     MOV AC2, *(bxtr_low) ;
  18.  
  19.     ; аналогично форм. ком. для изв. для стар. 16 битов маски
  20.     MOV HI(AC3), AC2 ;
  21.     SFTL AC2, #8 ;
  22.     OR #76FFh << #16, AC2, AC2 ;
  23.     OR #10h, AC2 ;
  24.     MOV AC2, *(bxtr_high);
  25.  
  26.     ; надо обнулить очередь команд (IBQ)
  27.     MOV #1, T0;
  28.     ; обнуляем благодаря использованию условного ветвления (сброс IBQ)
  29.     BCC bxtr_low, T0 != #0; любое условие
  30. bxtr_low:
  31.     BFXTR #8024h, AC0, T2 ; любая команда размером 32 бита (будет заменена)
  32.     SHTL AC1, #16;
  33. bfxtr_high:
  34.     BFXTR #8024h, AC0, T2 ; любая команда размером 32 бита (будет заменена)
  35.  
  36.     BCNT LW(AC3), LW(AC3), T1, T2; в T1 - кол-во единиц в младшей части маски
  37.     OR AC1 << T1, AC0
  38.     AADD #3, SP
  39.     RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement