Дано 3 числа в двоичной системе счисления. Определить, в каком числе число единиц больше - Assembler

Узнай цену своей работы

Формулировка задачи:

Дано 3 числа в двоичной системе счисления. Определить, в каком числе число единиц больше.

Решение задачи: «Дано 3 числа в двоичной системе счисления. Определить, в каком числе число единиц больше»

textual
Листинг программы
;FASM
    org 100h
    mov eax, [a]
    push    eax
    call    bitcnt
    mov dh, al      ; dh = bitcht(a)
    mov eax, [b]
    call    bitcnt
    mov dl, al      ; dl = bitcht(b)
    mov eax, [c]
    call    bitcnt
    mov bl, al      ; bl = bitcht(c)
    pop eax
    cmp dl, dh
    cmova   eax, [b]        ; if(bitcht(b) >bitcht(a)) eax = b
    ja  @F              ; флаги не изменились
    xchg    dh, dl      ; а вот кол-во единичек придётся поменять вместе с eax
@@: cmp bl, dl
    cmova   eax, [c]
    ret
;
bitcnt: xor bx, bx
    mov cx, 32
@@: rcl eax, 1
    adc bl, 0
    loop    @B
    movzx   eax, bx     ; eax - кол-во единичек, которое было в eax
    ret
b:  dd  7
c:  dd  17
a:  dd  0Fh

Объяснение кода листинга программы

  1. Подключение необходимых библиотек и стандартных функций.
  2. Органайзер кода.
  3. Загрузка первых двух чисел в аккумулятор.
  4. Вызов функции bitcnt для подсчета количества единиц в числе.
  5. Передача результата в регистр dh.
  6. Загрузка третьего числа в аккумулятор.
  7. Вызов функции bitcnt для подсчета количества единиц в числе.
  8. Передача результата в регистр dl.
  9. Сравнение количества единиц в первом и втором числе.
  10. Если количество единиц в первом числе больше, то значение второго числа присваивается первому числу.
  11. Если количество единиц в первом и втором числе равны, то значение третьего числа присваивается первому числу.
  12. Вывод значения первого числа.
  13. Установка флага для использования в функции bitcnt.
  14. Функция bitcnt:
    1. Установка счётчика в 32.
    2. Последовательное сдвигание вправо с учётом старшего бита.
    3. Наращивание счётчика до тех пор, пока не встретится единица.
    4. Вычисление количества единиц в числе.
    5. Возврат результата.
  15. Заключительная часть кода:
    1. Вызов функции bitcnt для подсчета количества единиц в числе.
    2. Передача результата в регистр dh.
    3. Вызов функции bitcnt для подсчета количества единиц в числе.
    4. Передача результата в регистр dl.
    5. Сравнение количества единиц в числе.
    6. Если количество единиц в числе не изменилось, то второе число присваивается первому числу.
    7. Если количество единиц в числе изменилось, то первое число присваивается второму числу.
    8. Вывод значения первого числа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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