Даны две переменные 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;
}

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

  1. Объявлены две переменные: A и B
  2. Значение переменной A устанавливается на 0x11223344
  3. Значение переменной B устанавливается на 0x5566
  4. Выводится текущее значение переменных A и B (должно вывести 0x11223344, 0x5566)
  5. В блоке ассемблера выполняются операции по перестановке байтов в переменных A и B
  6. После выполнения ассемблерного блока, выводится новое значение переменных A и B (должно вывести 0x44332211, 0x6655)
  7. Программа завершается, ожидая нажатия любой клавиши

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

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