ассемблер1
.docxЗадание на ассемблере 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: