Дано 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
Объяснение кода листинга программы
- Подключение необходимых библиотек и стандартных функций.
- Органайзер кода.
- Загрузка первых двух чисел в аккумулятор.
- Вызов функции bitcnt для подсчета количества единиц в числе.
- Передача результата в регистр dh.
- Загрузка третьего числа в аккумулятор.
- Вызов функции bitcnt для подсчета количества единиц в числе.
- Передача результата в регистр dl.
- Сравнение количества единиц в первом и втором числе.
- Если количество единиц в первом числе больше, то значение второго числа присваивается первому числу.
- Если количество единиц в первом и втором числе равны, то значение третьего числа присваивается первому числу.
- Вывод значения первого числа.
- Установка флага для использования в функции bitcnt.
- Функция bitcnt:
- Установка счётчика в 32.
- Последовательное сдвигание вправо с учётом старшего бита.
- Наращивание счётчика до тех пор, пока не встретится единица.
- Вычисление количества единиц в числе.
- Возврат результата.
- Заключительная часть кода:
- Вызов функции bitcnt для подсчета количества единиц в числе.
- Передача результата в регистр dh.
- Вызов функции bitcnt для подсчета количества единиц в числе.
- Передача результата в регистр dl.
- Сравнение количества единиц в числе.
- Если количество единиц в числе не изменилось, то второе число присваивается первому числу.
- Если количество единиц в числе изменилось, то первое число присваивается второму числу.
- Вывод значения первого числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д