Даны две переменные 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)
- Программа завершается, ожидая нажатия любой клавиши