Задача на закрепление знаний логических и арифметических инструкций (Visual Studio с ассемблерной вставкой) - Assembler

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

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

Задача такова: Даны два числа в двоичном виде (134). Первое число умножить на 2, второе разделить на 4. результаты логически перемножить и старшую часть поменять местами с младшей. Результаты всех команд выводить на экран.

Решение задачи: «Задача на закрепление знаний логических и арифметических инструкций (Visual Studio с ассемблерной вставкой)»

textual
Листинг программы
    __asm
    {
        shl a, 1
        shr b, 2
    }
    std::cout << a << ", " << b << std::endl;
    __asm
    {
        mov eax, a
        and eax, b
        mov c, eax
    }
    std::cout << c << std::endl;
    __asm
    {
        mov eax, c
        bswap eax
        xchg ah, al
        bswap eax
        xchg ah, al
        bswap eax
        mov c, eax
    }
    std::cout << c << std::endl;

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

  1. shl a, 1 - сдвигает значение переменной a влево на 1 бит.
  2. shr b, 2 - сдвигает значение переменной b вправо на 2 бита.
  3. mov eax, a - копирует значение переменной a в регистр eax.
  4. and eax, b - выполняет побитовое ИЛИ между значением в регистре eax и переменной b.
  5. mov c, eax - копирует значение из регистра eax в переменную c.
  6. mov eax, c - копирует значение переменной c в регистр eax.
  7. bswap eax - меняет порядок байтов в регистре eax.
  8. xchg ah, al - меняет местами значения в регистре eax: ah становится равным al, а al становится равным ah.
  9. bswap eax - меняет порядок байтов в регистре eax.
  10. mov c, eax - копирует значение из регистра eax в переменную c.
  11. std::cout << a <<, << b << std::endl; - выводит значения переменных a и b на экран.
  12. И так далее, шаги 3-10 повторяются еще 2 раза.
  13. В результате выполнения кода в переменной c будет храниться исходное значение переменной a, но в обратном порядке байтов.

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

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