olgierd

ASK_ZAD9(UNIA a.bits.c = a.bits.a; a.bits.b = a.bits.a;)

Dec 10th, 2018
104
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Zadanie 9: Napisz kod w asemblerze odpowiadający poniższemu fragmentowi kodu w C.
  2. // UNIA UNIA
  3. typedef union {
  4.         unsigned char  BYTE;
  5.         struct {
  6.             unsigned char a : 2;
  7.             unsigned char b : 3;
  8.             unsigned char c : 3;
  9.             unsigned char d : 1;
  10.         }bits;
  11.     }un_X;
  12.  
  13.     un_X x;
  14.     x.BYTE = 0xAF; // 175(dec)
  15.     ///UNIE
  16.     //x.bits.c = x.bits.a
  17.     //x.bits.b = x.bits.a
  18.     bitset<8> wynik(x.BYTE);
  19.     cout << wynik<<endl;
  20.     unsigned char wynik2;
  21.     _asm {
  22.  
  23.         mov al, x.BYTE // przypisuje cala sekwencje do al
  24.         and al,3 // uzyskuje ostatnie 3 bity z al
  25.         mov bl,al // przypisuje ostatnie bity z al do bl
  26.         shl bl,5 // przesuwam w lewo o 5 miejsc
  27.         mov cl,al //przypisuje ostatnie 3 bity z al do cl
  28.         shl cl,2 //
  29.         or al,bl
  30.         or al,cl
  31.         mov wynik2,al
  32.     }
  33.     bitset<8> eldo(wynik2);
  34.     cout << eldo<< endl;
  35.    
  36.    
  37.     printf("BYTE: %d\n x.bits.a: %d\n x.bits.b: %d\n x.bits.c: %d\n", x.BYTE, x.bits.a, x.bits.b, x.bits.c);
RAW Paste Data