Количество чисел, являющихся степенью 2 в массиве - Assembler
Формулировка задачи:
написать программу выводящую на экран количество являющихся степенью 2 в массиве из 15 элементов
Решение задачи: «Количество чисел, являющихся степенью 2 в массиве»
textual
Листинг программы
SQRT: mov bx,1 @@1: push ax ; входное значение xor dx,dx ; div bx ; cmp ax,bx ; jb correct ; jz @@2 ; inc bx ; pop ax ; jmp @@1 ; correct: ; dec bx ; @@2: pop ax ; xchg ax,bx ; AX = результат ret
Объяснение кода листинга программы
Код решает задачу поиска числа, которое является степенью 2 в массиве. Список действий:
- mov bx,1 — присваивает переменной bx значение 1
- push ax — сохраняет в стеке значение ax (входное значение)
- xor dx,dx — инициализирует переменную dx нулевым значением
- div bx — выполняет деление ax на bx
- cmp ax,bx — сравнивает значения ax и bx
- jb correct — если результат деления меньше, чем bx, то выполняется блок кода correct
- jz @@2 - если ax равен bx, то выполняется переход к метке @@2
- inc bx — увеличивает значение bx на 1
- pop ax — восстанавливает значение ax из стека
- jmp @@1 - происходит переход к началу цикла (метке @@1)
- correct: — это блок кода, который выполняется, если результат деления меньше, чем bx
- dec bx — уменьшает значение bx на 1
- @@2: — это метка, на которую происходит переход, если ax равно bx
- pop ax — восстанавливает значение ax из стека
- xchg ax,bx — меняет значения ax и bx местами (результат вычисления сохраняется в ax)
- ret — завершает работу программы Код работает следующим образом: он начинает с числа 1 и последовательно делит его на все числа в массиве. Если результат деления меньше, чем делитель, то число является степенью 2. Если результат равен делителю, то число является степенью 2 и число уменьшается на единицу. Если результат больше, то число не является степенью 2 и его можно пропустить.