Задача на закрепление знаний логических и арифметических инструкций (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;
Объяснение кода листинга программы
shl a, 1
- сдвигает значение переменнойa
влево на 1 бит.shr b, 2
- сдвигает значение переменнойb
вправо на 2 бита.mov eax, a
- копирует значение переменнойa
в регистрeax
.and eax, b
- выполняет побитовое ИЛИ между значением в регистреeax
и переменнойb
.mov c, eax
- копирует значение из регистраeax
в переменнуюc
.mov eax, c
- копирует значение переменнойc
в регистрeax
.bswap eax
- меняет порядок байтов в регистреeax
.xchg ah, al
- меняет местами значения в регистреeax
:ah
становится равнымal
, аal
становится равнымah
.bswap eax
- меняет порядок байтов в регистреeax
.mov c, eax
- копирует значение из регистраeax
в переменнуюc
.std::cout << a <<
,<< b << std::endl;
- выводит значения переменныхa
иb
на экран.- И так далее, шаги 3-10 повторяются еще 2 раза.
- В результате выполнения кода в переменной
c
будет храниться исходное значение переменнойa
, но в обратном порядке байтов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д