4.45
不正确
push %rsp的指令会将rsp减8之前的old value压栈
应该是如下代码:
movq REG, -8(%rsp)
sub $8, %rsp

4.46
不正确
应该改为
add $8, %rsp
movq -8(%rsp), REG

4.47

#include<stdio.h>
long int a[100] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};void bubble_b(long *data, long count){long i, last;long *p0; //data[i]long *p1; //data[i+1]for(last = count-1; last > 0; last--){p0 = data;p1 = data + 1;for(i = 0; i < last; i++){if(*p1 < *p0){long t = *p1;*p1 = *p0;*p0 = t;}p0++;p1++;}}
}int main(){printf("Before sorting:");for(int i = 0; i < 10; i++){printf("%ld ", a[i]);}printf("\n");bubble_b(a, 10);printf("After sorting:");for(int i = 0; i < 10; i++){printf("%ld ", a[i]);}printf("\n");return 0;
}

测试结果:

x86-64汇编程序:

0000000000001169 <bubble_b>:1169:  f3 0f 1e fa             endbr64 116d:   55                      push   %rbp116e:    48 89 e5                mov    %rsp,%rbp1171:   48 89 7d c8             mov    %rdi,-0x38(%rbp)1175:    48 89 75 c0             mov    %rsi,-0x40(%rbp)1179:    48 8b 45 c0             mov    -0x40(%rbp),%rax117d:    48 83 e8 01             sub    $0x1,%rax1181:   48 89 45 e0             mov    %rax,-0x20(%rbp)1185:    eb 73                   jmp    11fa <bubble_b+0x91>1187: 48 8b 45 c8             mov    -0x38(%rbp),%rax118b:    48 89 45 e8             mov    %rax,-0x18(%rbp)118f:    48 8b 45 c8             mov    -0x38(%rbp),%rax1193:    48 83 c0 08             add    $0x8,%rax1197:   48 89 45 f0             mov    %rax,-0x10(%rbp)119b:    48 c7 45 d8 00 00 00    movq   $0x0,-0x28(%rbp)11a2:    00 11a3:    eb 46                   jmp    11eb <bubble_b+0x82>11a5: 48 8b 45 f0             mov    -0x10(%rbp),%rax11a9:    48 8b 10                mov    (%rax),%rdx11ac: 48 8b 45 e8             mov    -0x18(%rbp),%rax11b0:    48 8b 00                mov    (%rax),%rax11b3: 48 39 c2                cmp    %rax,%rdx11b6:   7d 24                   jge    11dc <bubble_b+0x73>11b8: 48 8b 45 f0             mov    -0x10(%rbp),%rax11bc:    48 8b 00                mov    (%rax),%rax11bf: 48 89 45 f8             mov    %rax,-0x8(%rbp)11c3: 48 8b 45 e8             mov    -0x18(%rbp),%rax11c7:    48 8b 10                mov    (%rax),%rdx11ca: 48 8b 45 f0             mov    -0x10(%rbp),%rax11ce:    48 89 10                mov    %rdx,(%rax)11d1: 48 8b 45 e8             mov    -0x18(%rbp),%rax11d5:    48 8b 55 f8             mov    -0x8(%rbp),%rdx11d9: 48 89 10                mov    %rdx,(%rax)11dc: 48 83 45 e8 08          addq   $0x8,-0x18(%rbp)11e1:    48 83 45 f0 08          addq   $0x8,-0x10(%rbp)11e6:    48 83 45 d8 01          addq   $0x1,-0x28(%rbp)11eb:    48 8b 45 d8             mov    -0x28(%rbp),%rax11ef:    48 3b 45 e0             cmp    -0x20(%rbp),%rax11f3:    7c b0                   jl     11a5 <bubble_b+0x3c>11f5: 48 83 6d e0 01          subq   $0x1,-0x20(%rbp)11fa:    48 83 7d e0 00          cmpq   $0x0,-0x20(%rbp)11ff:    7f 86                   jg     1187 <bubble_b+0x1e>1201: 90                      nop1202:    90                      nop1203:    5d                      pop    %rbp1204:    c3                      retq

Y86-64汇编:

pushq %rbp
rrmovq %rsp, %rbp
rmmovq %rdi,-0x38(%rbp)
rmmovq %rsi,-0x40(%rbp)
mrmovq -0x40(%rbp),%rax
irmovq $0x1, %r8
subq %r8, %rax
rmmovq %rax,-0x20(%rbp)
jmp L1
.L5:
mrmovq -0x38(%rbp),%rax
rmmovq %rax,-0x18(%rbp)
mrmovq -0x38(%rbp),%rax
irmovq $0x8, %r8
addq %r8, %rax
rmmovq %rax,-0x10(%rbp)
irmovq $0x0, %r8
rmmovq %r8, -0x28(%rbp)
jmp L2
.L4:
mrmovq -0x10(%rbp),%rax
mrmovq (%rax),%rdx
mrmovq -0x18(%rbp),%rax
mrmovq (%rax),%rax
rrmovq %rdx, %r8
subq %rax,%r8
jge L3
mrmovq -0x10(%rbp),%rax
mrmovq (%rax),%rax
rmmovq %rax,-0x8(%rbp)
mrmovq -0x18(%rbp),%rax
mrmovq (%rax),%rdx
mrmovq -0x10(%rbp),%rax
rmmovq %rdx,(%rax)
mrmovq -0x18(%rbp),%rax
mrmovq -0x8(%rbp),%rdx
rmmovq %rdx,(%rax)
.L3:
irmovq $0x8, %r8
mrmovq -0x18(%rbp), %r9
addq %r8, %r9
rmmovq %r9 -0x18(%rbp)
irmovq $0x8, %r8
mrmovq -0x10(%rbp), %r9
addq %r8, %r9
rmmovq %r9, -0x10(%rbp)
irmovq $0x1, %r8
mrmovq -0x28(%rbp), %r9
addq %r8, %r9
rmmovq %r9, -0x28(%rbp)
.L2:
mrmovq -0x28(%rbp),%rax
mrmovq -0x20(%rbp), %r8
rrmovq %rax, %r9
subq %r8, %r9
jl L4
irmovq $0x1, %r8
mrmovq -0x20(%rbp), %r9
subq %r8, %r9
rmmovq %r9, -0x20(%rbp)
.L1:
mrmovq -0x20(%rbp), %r9
irmovq $0x0, %r8
subq %r8, %r9
jg L5
popq %rbp
ret

4.51
iaddq V, rB c 0 F rB V
取指:
icode:ifun ←\leftarrow← M1[PC]
rA:rB ←\leftarrow← M1[PC+1]
valC ←\leftarrow← M8[PC+2]
valP ←\leftarrow← PC + 10

译码:
valB ←\leftarrow← R[rB]

执行:
valE ←\leftarrow← valB + valC
Set CC

访存:
写回:
R[rB] ←\leftarrow← valE
更新PC:
PC ←\leftarrow← valP

4.55

CSAPP第4章家庭作业参考答案相关推荐

  1. CSAPP第7章家庭作业参考答案

    7.6 buf 有 m.o 外部 .data bufp0 有 swap.o 全局 .data bufp1 有 swap.o 局部 .bss incr 有 swap.o 局部 .text count 有 ...

  2. CSAPP第五章家庭作业参考答案

    (CSAPP第三版系列)导航篇传送门 5.14编写5.13的6*1循环展开版本 代码如下: /* Inner product. Accumulate in temporary */ void inne ...

  3. CSAPP第二章家庭作业参考答案

    (CSAPP第三版系列)导航篇传送门 2.56 用不同的示例值运行show_bytes的代码. #include <stdio.h>typedef unsigned char *byte_ ...

  4. [第三章] 深入理解计算机系统第三版 家庭作业参考答案

    人非圣贤孰能无过,欢迎大家提问与纠错 3.58 long decode2(long x, long y, long z) {y -= z;x *= y;return ((y << 63) ...

  5. [第五章] 深入理解计算机系统第三版 家庭作业参考答案

    5.13 A. 画图: 关键路径为第三幅图加粗部分 B. 下界为浮点加法的延迟界限,CPE 为 3.00 C. 整数加法的延迟界限,CPE 为 1.00 D. 关键路径上只有浮点加法 5.14 voi ...

  6. [第六章] 深入理解计算机系统第三版 家庭作业参考答案

    6.22 磁道数 d 与 r - x * r 成正比 设 d = k(r - x * r) = kr(1 - x) 总容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^ ...

  7. CSAPP第89章家庭作业(部分)

    画出进程图: 原则如下: (1) 遇到fork函数就分支,每个水平的箭头对应于从 左到右执行指令的进程,而每个垂直的箭头对应于 fork 函数的执行 (2) 分支的时候专注于父进程执行完,再处理另一个 ...

  8. CSAPP第七章家庭作业(原书第二版)

    7.6 buf前加了extern是外部符号,由main.c定义,故定义符号的模块是main.o,是int型变量,属于.data节:bufp0和swap函数前未加extern和static,故是全局符号 ...

  9. 第二章计算机网络答案,计算机网络第二章作业参考答案

    计算机网络第二章作业参考答案 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 2. A noiseless 8-kHz channel ...

最新文章

  1. Java 8 - Optional实战
  2. maven不能拉取私服的原因
  3. hive的新分区和旧分区的概念问题
  4. 还有人不知道什么是AndroidX的吗?文末领取面试资料
  5. Atitit.js this错误指向window的解决方案
  6. npm和angular_如何开发,使用和发布Angular库到NPM
  7. 显示器接口VGA、DVI、HDMI、DP
  8. Ubuntu创建python虚拟环境
  9. centos6.5 最小化安装无法上网
  10. Bailian2994 拼装模型【哈夫曼树】
  11. linux恢复表数据,Linux恢复误删的数据
  12. VUE 下载文件流 文件无法打开,缺失数据
  13. 编译器设计(二)——上下文无关文法及推导
  14. 河南职称计算机考试多少分通过,2019年河南职称计算机考试报名通知
  15. 【kubernetes/k8s源码分析】calico node felix源码分析之一
  16. ORAN C平面 Section Type 0
  17. 国内外最顶级的12大看板工具
  18. stm32+W5500+阿里物联网平台
  19. 细思极恐-你真的会写java吗?
  20. cast from pointer to smaller type ‘int‘ loses information —— NDK 开发

热门文章

  1. Microsoft Azure云服务停机!系水泵未知原因关闭导致
  2. 爆料!亦庄地区数据中心将面临史上最长群体”限电“
  3. 数据中心空调故障案例集(第二季)
  4. 成功解决''g++' 不是内部或外部命令,也不是可运行的程序 或批处理文件
  5. 成功解决WARNING:tensorflow:Variable += will be deprecated. Use variable.assign_add if you want assignmen
  6. 成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a
  7. Excel:解决Excel表格每一行所有字段在一个单元格的情况
  8. DP:Sumsets(POJ 2229)
  9. 淘宝内部大量使用的开源系统监控工具
  10. centos FTP服务器的架设和配置