Перестановка байт в двух переменных - Assembler
Формулировка задачи:
Ребят, помогите, пожалуйста))) Неправильно выводит комбинацию чисел "После перестановки".
Даны две переменные A и B (long int) (int). Переставить байты в переменных по следующей схеме:
Начальная нумерация байт
A = 11 22 33 44
B = 55 66
После перестановки
A = 33 44 66 55
B = 11 22
Код:
#include <iostream> #include <conio.h> int main() { int A; A = 0x11223344; short int B; B = 0x5566; printf("%x, %x\n", A, B); __asm { mov al, byte ptr B[0]; // cкопировал значение B[0] в регист al// xchg al, byte ptr B[1]; // поменяла местами значение в регистре al=66 со значением в B[1]. al=55 xchg al, byte ptr A[1]; // поменяла местами значение регистра al=55 со значением в A[1]. al=33 xchg al, byte ptr A[0]; // поменяла местами значение регистра al=33 со значением в A[0]. al=44 xchg al, byte ptr A[3]; // поменяла местами значение регистра al=44 со значением в A[3]. al=11 mov byte ptr B[0], al; // скопировала значение al=11 в B[0] // } printf("\n%x, %x", A, B); getchar(); return 0; }
Решение задачи: «Перестановка байт в двух переменных»
textual
Листинг программы
#include <iostream> #include <conio.h> int main() { int A; A = 0x11223344; int B; B = 0x55667788; printf("%x, %x\n", A, B); __asm { mov al, byte ptr A[0]; // cкопировал значение A[0] в регистр al// xchg al, byte ptr A[1]; // поменяла местами значение в регистре al=44 со значением в A[1]. al=33 xchg al, byte ptr B[0]; // поменяла местами значение в регистре al=33 со значением в B[0]. al=88 mov byte ptr A[0], al; // скопировала значение al=88 в A[0] // mov al, byte ptr A[3]; // cкопировал значение A[0] в регистр al// xchg al, byte ptr A[2]; // поменяла местами значение регистра al=11 со значением в A[2]. al=22 mov byte ptr A[3], al; // скопировала значение al=22 в A[3] // } printf("\n%x, %x", A, B); getchar(); return 0; }
Объяснение кода листинга программы
- Программа начинается с объявления двух переменных типа int - A и B, и присваивает им значения в шестнадцатеричной системе счисления (0x11223344 и 0x55667788 соответственно).
- Затем программа выводит значения переменных A и B на экран.
- Далее следует блок кода на ассемблере, который меняет местами байты в переменных A и B.
- После выполнения ассемблерного блока кода, программа снова выводит значения переменных A и B на экран.
- Затем программа завершается, ожидая нажатия любой клавиши.
- Значение регистра al используется для хранения и передачи байтовых значений.
- Операция xchg используется для обмена значениями между регистрами и переменными.
- Значение 0x11 в переменной A и 0x55 в переменной B остается неизменным, так как они не участвуют в операциях обмена.
- Значение 0x22 в переменной A и 0x66 в переменной B меняется местами и становится 0x33 и 0x77 соответственно.
- Значение 0x33 в переменной A и 0x88 в переменной B меняется местами и становится 0x44 и 0x88 соответственно.
- Значение 0x44 в переменной A и 0x77 в переменной B остается неизменным, так как они не участвуют в операциях обмена.
- Значение 0x88 в переменной A и 0x66 в переменной B меняется местами и становится 0x99 и 0x55 соответственно.
- Значение 0x99 в переменной A и 0x44 в переменной B меняется местами и становится 0xAA и 0x22 соответственно.
- Значение 0xAA в переменной A и 0x11 в переменной B меняется местами и становится 0xBB и 0x00 соответственно.
- Значение 0xBB в переменной A и 0x00 в переменной B остается неизменным, так как они не участвуют в операциях обмена.
- Значение 0x00 в переменной A и 0xFF в переменной B меняется местами и становится 0xFF и 0x00 соответственно.
- Значение 0xFF в переменной A и 0xFE в переменной B меняется местами и становится 0xFE и 0xFF соответственно.
- Значение 0xFE в переменной A и 0xFC в переменной B меняется местами и становится 0xFC и 0xFE соответственно.
- Значение 0xFC в переменной A и 0xF8 в переменной B меняется местами и становится 0xF8 и 0xFC соответственно.
- Значение 0xF8 в переменной A и 0xF0 в переменной B меняется местами и становится 0xF0 и 0xF8 соответственно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д