一、题目描述
二、分析求解
- union 联合体知识:
所有成员共用内存
互相影响
目的是节省内存
union data{ // 内存结构图 int n; |__| c 1B char c; |__| m 2Bshort m; |__| } |__| n 4B
- e1 和 e2 共享内存,所以答案为
0 8 0 8
- 逐条分析汇编指令
mov 8(%rdi), %rax // rax = up->e2.nextmov (%rax), %rdx // rdx = up->e2.next->e1.pmov (%rdx), %rdx // rdx = *(up->e2.next->e1.p)subq 8(%rax), %rdx // rdx -= up->e2.next->e1.ymov %rdx, (%rdi) // up->e2.x = *(up->e2.next->e1.p) - up->e2.next->e1.y
- 易错:(%rax) 表示rax存放的是
内存地址-指针
(%rax) = *(rax) = M[rax]一次间接寻址-指针解引用
union参考链接
习题参考链接1
习题参考链接2