Cześć,

byłbym wdzięczny, gdyby ktoś wytłumaczył mi, co się dzieje w kodzie assemblerowym. Zależy mi szczególnie na linijkach: 05-08 i 09-16.

Z tego, co rozkminiłem:

  1. linijka 08 - zawartość EAX to: 0000 0000 0000 0000 0000 0000 ???0 1011 (?, bo nie znamy, co było w lokacji RBP - 11), zawartość RBP - 11 to: ???0 1011
  2. linijka 12 - zawartość EAX to: 0000 0000 0000 0000 0000 0000 0010 1011, zawartość RBP - 11 to: 0010 1011
  3. linijka 16 - zawartość EAX to: 0000 0000 0000 0000 0000 0000 0000 0010, zawartość RBP - 10 to: 0000 0010

Czy jest do dobrze zrobione? Z góry dzięki za pomoc.

// Type your code here, or load an example.
void func(void) 
{
    struct xxx { char a; int b:5, c:11, :0, d:8; struct { int ee:8; } e; };

    struct xxx yyy;

    yyy.a = 'c';
    yyy.b = 11;
    yyy.c = 17;
    yyy.d = 56;
    yyy.e.ee = 123;
}

Kod assemblerowy:

func:
  push rbp
  mov rbp, rsp
  mov BYTE PTR [rbp-12], 99
  movzx eax, BYTE PTR [rbp-11]
  and eax, -32
  or eax, 11
  mov BYTE PTR [rbp-11], al
  movzx eax, BYTE PTR [rbp-11]
  and eax, 31
  or eax, 32
  mov BYTE PTR [rbp-11], al
  movzx eax, BYTE PTR [rbp-10]
  and eax, 0
  or eax, 2
  mov BYTE PTR [rbp-10], al
  mov BYTE PTR [rbp-8], 56
  mov BYTE PTR [rbp-4], 123
  nop
  pop rbp
  ret