Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ассемблер1

.docx
Скачиваний:
7
Добавлен:
24.12.2021
Размер:
105.85 Кб
Скачать

Задание на ассемблере RISC – V

Вводится два числа M и N. Необходимо изменить в числе М начиная с младших битов N нулей на единицу. Например 42(101010) и 2, значит на выходе получается число 47. Вводить числа используя инструкции загрузки константы li x2, 1234.

7 стр.: Сравнение нужно для того, чтобы определить сколько единиц превратились в нули, когда мы добавили единицу (назовем это количество n). На выходе мы получим число, в котором будет некое количество нулей, а затем единиц подряд, где количество единиц равно n+1. Единицы показывают сколько битов изменились из-за прибавления единицы. И этот «+1» появился, поскольку нужный нам ноль тоже изменился. 9-11 стр: Далее мы вычтем единицу из этого сравнения, подвинем вправо на один. Назовем исходное число (без прибавленной единицы) m1, с прибавленной – m2, полученное на 10 шаге – m3. Сумма m2+m3 это m1 c инвертированным самым младшим нулем (шаг 11).

Повторяем, пока заданное число младших нулей не инвертируется.

результат в регистре x1

Код перепечатала)) :

li x1, 240

li x2, 3

li x3, 0xFF

Jump1:

beq x2, x0, Jump2

addi x4, x1, 1

xor x5, x4, x1

addi x5, x5, -1

srli x5, x5 , 1

add x1, x4 , x5

addi x2, x2, -1

jal x6 Jump1

Jump2: