Количество чисел, являющихся степенью 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 в массиве. Список действий:

  1. mov bx,1 — присваивает переменной bx значение 1
  2. push ax — сохраняет в стеке значение ax (входное значение)
  3. xor dx,dx — инициализирует переменную dx нулевым значением
  4. div bx — выполняет деление ax на bx
  5. cmp ax,bx — сравнивает значения ax и bx
  6. jb correct — если результат деления меньше, чем bx, то выполняется блок кода correct
  7. jz @@2 - если ax равен bx, то выполняется переход к метке @@2
  8. inc bx — увеличивает значение bx на 1
  9. pop ax — восстанавливает значение ax из стека
  10. jmp @@1 - происходит переход к началу цикла (метке @@1)
  11. correct: — это блок кода, который выполняется, если результат деления меньше, чем bx
  12. dec bx — уменьшает значение bx на 1
  13. @@2: — это метка, на которую происходит переход, если ax равно bx
  14. pop ax — восстанавливает значение ax из стека
  15. xchg ax,bx — меняет значения ax и bx местами (результат вычисления сохраняется в ax)
  16. ret — завершает работу программы Код работает следующим образом: он начинает с числа 1 и последовательно делит его на все числа в массиве. Если результат деления меньше, чем делитель, то число является степенью 2. Если результат равен делителю, то число является степенью 2 и число уменьшается на единицу. Если результат больше, то число не является степенью 2 и его можно пропустить.

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы