博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《CSAPP》(第3版)答案(第三章)(二)
阅读量:4170 次
发布时间:2019-05-26

本文共 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

  • A
    CNT=7
  • B
typedef struct {
long idx, long x[4]} a_struct

P70

  • A
val offset
e1.p 0
e1.y 8
e2.x 0
e2.next 8
  • B
    16
  • C
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[(n8+30)&0Xfffffff0]
    n为奇数:
    s 2 = s 1 − ( n ∗ 8 + 24 ) s_2 = s_1 - (n * 8 + 24) s2=s1(n8+24)
    n为偶数:
    s 2 = s 1 − ( n ∗ 8 + 16 ) s_2 = s_1 - (n * 8 + 16) s2=s1(n8+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

  • A
n 实部 虚部
1 %xmm0 %xmm1
2 %xmm2 %xmm3
3 %xmm4 %xmm5
n
  • B

%xmm0是实部,%xmm1是虚部

第三章 完

转载地址:http://iywai.baihongyu.com/

你可能感兴趣的文章
深入了解php底层机制
查看>>
XHProf-php轻量级的性能分析工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
[转]C语言printf
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
vue项目打包后无法运行报错空白页面
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>