Выполнение операций сдвига битов (asr, lsl, lsr) - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь вручную вычислить эти операции сдвига битов, но я не уверен, как это сделать.Инструкции ARM:

ldr    r0, =0XCAFEBABE
asr    r0, r0, 9

Я знаю, что asr означает арифметическое смещение вправо и что это эквивалентно делению или умножению числа на 2.

Еще два, которые я не знаюкак это сделать:

ldr    r0, =0XCAFEBABE
lsl    r0, r0, 11

Для этого я знаю, как сделать логический сдвиг влево, но я не уверен, как это работает со сдвигом 11 битов.

Наконец,

ldr    r0, =0XCAFEBABE
lsr    r0, r0, 6

Для этого я не уверен, что такое логический сдвиг вправо.

1 Ответ

0 голосов
/ 09 июня 2018

Разница между Логическим сдвигом и Арифметическим сдвигом заключается в том, что последний сохраняет старший бит.

Такое поведение Арифметическое смещение полезно для чисел со знаком, чтобы не изменять знак в Дополнение двух .Если старший бит равен 1 - указывает на отрицательное число - 1 с сдвинуты в правое смещение (asr), а старший бит зафиксирован на 1 в левом смещении (asl).Если старший бит равен 0, этот 0 - указывающий на положительное число - заблокирован, а 0 s сдвинуты влево.

В Logical Shift 0 с смещены в обоих направлениях (lsl и lsr).Это полезно для чисел без знака для умножения и деления без остатка или для операций с битовым потоком.

Теперь, чтобы решить вашу задачу:

  • преобразовать шестнадцатеричное значение CAFEBABE в битпредставление
  • применить логическое смещение или арифметическое смещение
  • преобразовать битовое представление в шестнадцатеричное
...