Даны две переменные A и B. Переставить байты в переменных по следующей схеме: - Assembler
Формулировка задачи:
Даны две переменные A и B. Переставить байты в переменных по следующей схеме:
Начальная нумерация байт
A = 11 22 33 44
B = 55 66
После перестановки
A = 44 22 55 33
B = 66 11
не могу разобраться с byte ptr.
делаю в visual studio
Листинг программы
- long int a;
- a=11223344;
- int b =5566;
Листинг программы
- mov AL, byte ptr b[0];
- xchg AL, byte ptr b[1] ;
- mov byte ptr b[0], AL ;
- mov AL, byte ptr b[1] ;
- xchg AL, byte ptr a[3] ;
- mov byte ptr b[1], AL ;
- mov AL, byte ptr a[2] ;
- xchg AL, byte ptr a[3];
- mov byte ptr a[2], AL;
- mov AL, byte ptr a[0];
- xchg AL, byte ptr b[1] ;
- mov byte ptr a[0], AL;
Решение задачи: «Даны две переменные A и B. Переставить байты в переменных по следующей схеме:»
textual
Листинг программы
- // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include "locale.h"
- #include "stdio.h"
- #include "stdlib.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]; /* копируем значение 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;
- }
Объяснение кода листинга программы
- Объявлены две переменные: A и B
- Значение переменной A устанавливается на 0x11223344
- Значение переменной B устанавливается на 0x5566
- Выводится текущее значение переменных A и B (должно вывести 0x11223344, 0x5566)
- В блоке ассемблера выполняются операции по перестановке байтов в переменных A и B
- После выполнения ассемблерного блока, выводится новое значение переменных A и B (должно вывести 0x44332211, 0x6655)
- Программа завершается, ожидая нажатия любой клавиши
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д