SPARC - Битовая маска без смещения - PullRequest
2 голосов
/ 12 февраля 2009

Я изучаю сборку SPARC, и мне нужно создать скрипт, который извлекает поле из регистра. Скрипт принимает 3 значения, начальный номер, начальную позицию поля, длину поля.
Он не может использовать какие-либо функции сдвига, но он может использовать умножение и деление.
В настоящее время я страдаю от респираторного вируса, и впоследствии я получаю значительное количество лекарств. У меня много трудностей, чтобы понять, с чего начать. Некоторые направления будут с благодарностью.

1 Ответ

3 голосов
/ 12 февраля 2009

Умножить на 2 - сдвиг влево, а разделить на 2 - сдвиг вправо (по крайней мере, для чисел без знака).

Если вы хотите сдвинуть влево на 2 бита, это умножьте на 4.

Так, например, если у вас есть двоичное значение:

b15              b0
v                 V
0000 1111 0101 1000

и вы хотите извлечь b3 и b2, вы должны И весь лот с 0xc0 и разделить на 4.

0000 1111 0101 1000
0000 0000 0000 1100  <- AND with 0xc0
-------------------
0000 0000 0000 1000
-------------------
0000 0000 0000 0010  <- divide by 4

Поскольку это звучит подозрительно, как домашняя работа (и я не кодировал для SPARC в течение длинного времени), я не буду пытаться дать вам законченное решение - этого должно быть достаточно, чтобы вы начали .

...