Advertisement
KrimsN

Untitled

Oct 14th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. // #include <iostream>
  2. //
  3. /* int main() {
  4.  volatile uint32_t A = 0x11223344; // начальная инициализация
  5.  volatile uint16_t B = 0x5566;
  6.  
  7.  // ассемблерная вставка
  8.  asm volatile (
  9.  "mov al, byte ptr[rbp-0x5];" // копируем в al 0x55
  10.  "xchg al, byte ptr[rbp-0x3];" // меняем местами 0x33 и 0x55
  11.  "xchg al, byte ptr[rbp-0x4];" // меняем местами 0x44 и 0x33
  12.  "xchg al, byte ptr[rbp-0x1];" // меняем местами 0x44 и 0x11
  13.  "xchg al, byte ptr[rbp-0x6];" // меняем местами 0x11 и 0x66
  14.  "mov byte ptr[rbp-0x5], al;" // записываем в начало B значение 0x66
  15.  );
  16.  
  17.  // вывод
  18.  std::cout << std::hex << std::showbase;
  19.  std::cout << "A = " << A << "\nB = " << B << std::endl;
  20.  
  21.  return 0;
  22. }*/
  23.  
  24. #include "locale.h"
  25. #include "stdio.h"
  26. #include "stdlib.h"
  27. #include "stdint.h"
  28.  
  29.  
  30. int main()
  31. {
  32.     volatile uint32_t A = 0x11223344;
  33.     volatile uint16_t B = 0x5566;
  34.  
  35.     printf("%x, %x\n", A, B);
  36.  
  37.     __asm volatile(
  38.         "mov al, byte ptr B[0];"   /* копируем значение B[0] в регист al*/
  39.         "xchg al, byte ptr B[1];" /* меняем местами значение в регистре al=66 со значением в B[1]. al=55*/
  40.         "xchg al, byte ptr A[1];"/*меняем местами значение регистра al=55 со значением в A[1]. al=33 */
  41.         "xchg al, byte ptr A[0];"/*меняем местами значение регистра al=33 со значением в A[0]. al=44 */
  42.         "xchg al, byte ptr A[3];"/* меняем местами значение регистра al=44 со значением в A[3]. al=11*/
  43.         "mov byte ptr B[0], al;"/* копируем значение al=11 в B[0]*/
  44.     );
  45.  
  46.     printf("\n%x, %x", A, B);
  47.  
  48.     getchar();
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement