[NASM] Определить, в каком из трёх чисел единиц больше единиц в двоичной записи - Assembler
Формулировка задачи:
Дано 3 числа в двоичной системе счисления. Определить, в каком числе число единиц больше. NASM Ассемблер
Решение задачи: «[NASM] Определить, в каком из трёх чисел единиц больше единиц в двоичной записи»
textual
Листинг программы
SECTION .text global main main: ; точка старта программы mov eax,[dat] mov cx,32 xor ebx,ebx @@: rcr eax,1 adc bl,0 loop @B ;теперь ebx содержит кол-во битов-единичек в eax SECTION .data dat dd 1000000011111111b
Объяснение кода листинга программы
- Определяем точку старта программы - main.
- Перемещаем значение переменной dat в eax - mov eax,[dat].
- Перемещаем 32 в переменную cx - mov cx,32.
- Устанавливаем ebx в 0 - xor ebx,ebx.
- Начинаем цикл, который будет выполняться до тех пор, пока eax больше или равно 2 - loop @B.
- Внутри цикла выполняем операцию rcr eax,1, т.е. сдвигаем значение eax вправо на 1 позицию и сдвигаем в ebx единицу влево на 1 позицию (adc bl,0).
- Цикл выполняется до тех пор, пока все биты не будут обработаны.
- После выполнения цикла, в ebx будет количество единиц в двоичной записи числа, которое хранится в eax.
- Значение переменной dat в двоичной форме - 1000000011111111b.