Дано число в двоичном коде; все нечётные разряды числа обнулить, а чётные инвертировать - Assembler

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

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

Помогите пожалуйста. Дано число в двоичном виде. Все нечётные разряды числа обнулить, а чётные заменить на противоположные. Результат разделить на 4 и проинвертировать.

Решение задачи: «Дано число в двоичном коде; все нечётные разряды числа обнулить, а чётные инвертировать»

textual
Листинг программы
mov al,10010110b
xor bl,bl
mov cx,8
action:
shr al,1
rcl bl,1
loop action

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

  1. Дано число в двоичном коде 10010110b
  2. Переменная al содержит это число
  3. Чётные разряды числа инвертируются, для этого используется инструкция xor с регистром bl, который инициализируется как 0
  4. Переменная bl будет использоваться в цикле, поэтому инициализируется как 0
  5. Задаётся счётчик для цикла — 8, это максимальное количество разрядов числа, которые будут обработаны
  6. Устанавливается начальное значение переменной cx как 8
  7. Цикл начинается с метки action
  8. В каждой итерации цикла самый старший (1-й) бит числа (в данном случае это 1001) сдвигается вправо на 1 позицию с помощью инструкции shr al,1
  9. При этом самый младший (8-й) бит числа (в данном случае это 110) сдвигается влево на 1 позицию с помощью инструкции rcl bl,1
  10. Инструкция loop проверяет условие продолжения цикла — cx больше 0. Пока это условие истинно, цикл продолжается
  11. После завершения цикла результат будет содержаться в переменной al, а в переменной bl будет содержаться инверсия исходного числа без младшего бита
  12. Результат можно прочитать как десятичное число, используя таблицу соответствия для каждого возможного значения регистра al

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

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