本文共 2539 字,大约阅读时间需要 8 分钟。
P67
- A 104 ±-----------------+ | | | | | | | | | | | | | | | | 64 ±-----------------+ <-- %rdi | | | | | | | | | | | | 32 ±-----------------+ | z | 24 ±-----------------+ | &z | 16 ±-----------------+ | y | 8 ±-----------------+ | x | 0 ±-----------------+ <-- %rsp
- B %rsp+64
- C %rsp+offset
- D eval 把地址%rsp+64传给进程,进程从该地址开始存储数据,最后返回该地址
- E 104 ±-----------------+ | | | | | | | | | | | | 88 ±-----------------+ | z | 80 ±-----------------+ | x | 72 ±-----------------+ | y | 64 ±-----------------+ <-- %rdi(eval pass in) | | | | – %rax(process pass out) | | | | | | | | 32 ±-----------------+ | z | 24 ±-----------------+ | &z | 16 ±-----------------+ | y | 8 ±-----------------+ | x | 0 ±-----------------+ <-- %rsp in eval | | -8 ±-----------------+ <-- %rsp in process (图转自github)
- F 调用者给被调用者传递地址和需要的空间大小,被调用者存储数据后,返回传入的地址值。
P68
4 < B <= 8
5 < A <= 10
44 < A*B <= 46
解得 A=9 B=5
P69
typedef struct { long idx, long x[4]} a_struct
P70
val | offset |
e1.p | 0 |
e1.y | 8 |
e2.x | 0 |
e2.next | 8 |
union ele{ struct{ long* p; long y; }e1; struct{ long x; union ele* next; }e2;};void proc(union ele* up){ up->e2.x = *(up->e2.next->e1.p) - up->e2.next->e1.y;}
P71
#include #define BUF_SIZE 114void good_echo(void){ char buf[BUF_SIZE]; while(1){ char* p = fgets(buf,BUF_SIZE,stdin); if(p==NULL){ break; } printf("%s",p); } return;}int main(){ good_echo(); return 0;}
P72
- A s 2 = s 1 − [ ( n ∗ 8 + 30 ) & 0 X f f f f f f f 0 ] s_2 = s_1 - [ (n * 8 + 30) \& 0Xfffffff0 ] s2=s1−[(n∗8+30)&0Xfffffff0] n为奇数: s 2 = s 1 − ( n ∗ 8 + 24 ) s_2 = s_1 - (n * 8 + 24) s2=s1−(n∗8+24) n为偶数: s 2 = s 1 − ( n ∗ 8 + 16 ) s_2 = s_1 - (n * 8 + 16) s2=s1−(n∗8+16)
- B p = ( s 2 + 15 ) & 0 X F F F F F F F 0 p = (s_2 + 15) \& 0XFFFFFFF0 p=(s2+15)&0XFFFFFFF0
- C
which | e1 | n | s1 |
least | 1 | even | n%16==1 |
greatest | 24 | odd | n%16==0 |
- D p=16,m是大于等于8n的最小的16的倍数。
P73
vxorps %xmm1, %xmm1, %xmm1 vucomiss %xmm1, %xmm0 jp .P ja .A jb .B je .E .A: movl $2, %eax jmp .Done .B: movl $0, %eax jmp .Done .E: movl $1, %eax jmp .Done P: movl $3, %eax .Done
我瞎写的,没经过验证,慎用。
P74
vxorps %xmm1, %xmm1, %xmm1 movq $1, %rax movq $2, %r8 movq $0, %r9 movq $3, %r10 vucomiss %xmm1, %xmm0 cmovaq %r8, %rax" cmovbq %r9, %rax cmovpq %r10, %rax
这也是瞎写的,慎用。
P75
n | 实部 | 虚部 |
1 | %xmm0 | %xmm1 |
2 | %xmm2 | %xmm3 |
3 | %xmm4 | %xmm5 |
n | … | … |
%xmm0是实部,%xmm1是虚部
第三章 完
转载地址:http://iywai.baihongyu.com/