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

ассемблер

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

Задание:

Вводишь число. Если вводимое число является степенью двойки, то вывести 1, в противном случае 0. Вводить числа используя инструкции загрузки константы, например, li x2, 1234 загрузит число 1234 в регистр x2

Код:

li x1 16 #вводим число (n)

addi x2, x1, -1 # вычитаем из него единицу (n-1)

and x3,x1,x2 # сравниваем n и n-1. Если это была степень двойки, то в х3 будет 0.

beq x3, x0 , Yes # Сравниваем с нулем и прыгаем по метке Yes, если 0=0

li x3, 0 # Если 0!=0, значит это не степень двойки, кладем в регистр 0 по заданию

jal x2 No # Просто прыгаем в конец, чтобы не задеть ветку метки Yes.

Yes:

li x3, 1 # По заданию должна быть выведена единица, если степень двойки.

No:

Скриншот, чтобы читать удобнее было:

Входные параметры в регистре х1.

Выходные параметры в регистре x3.

Основная мысль:

Если число – это степень двойки, то в двоичной записи оно будет содержать всего одну единицу. После того, как мы вычтем из этого числа единицу, оно будет иметь вид: …0001111… Жирным выделен ноль, который до вычитания был единственной единицей. Теперь, при логическом «И» между входным число и полученным будет ноль. Иначе, при нечетной степени логическое «И» вернет нам что-то не нулевое. Дальше просто проверяем х3 на равенство нулю и делаем выводы.