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:
- 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
- linijka 12 - zawartość EAX to: 0000 0000 0000 0000 0000 0000 0010 1011, zawartość RBP - 11 to: 0010 1011
- 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