CSAPP第4章家庭作业参考答案
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章家庭作业参考答案相关推荐
- CSAPP第7章家庭作业参考答案
7.6 buf 有 m.o 外部 .data bufp0 有 swap.o 全局 .data bufp1 有 swap.o 局部 .bss incr 有 swap.o 局部 .text count 有 ...
- CSAPP第五章家庭作业参考答案
(CSAPP第三版系列)导航篇传送门 5.14编写5.13的6*1循环展开版本 代码如下: /* Inner product. Accumulate in temporary */ void inne ...
- CSAPP第二章家庭作业参考答案
(CSAPP第三版系列)导航篇传送门 2.56 用不同的示例值运行show_bytes的代码. #include <stdio.h>typedef unsigned char *byte_ ...
- [第三章] 深入理解计算机系统第三版 家庭作业参考答案
人非圣贤孰能无过,欢迎大家提问与纠错 3.58 long decode2(long x, long y, long z) {y -= z;x *= y;return ((y << 63) ...
- [第五章] 深入理解计算机系统第三版 家庭作业参考答案
5.13 A. 画图: 关键路径为第三幅图加粗部分 B. 下界为浮点加法的延迟界限,CPE 为 3.00 C. 整数加法的延迟界限,CPE 为 1.00 D. 关键路径上只有浮点加法 5.14 voi ...
- [第六章] 深入理解计算机系统第三版 家庭作业参考答案
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^ ...
- CSAPP第89章家庭作业(部分)
画出进程图: 原则如下: (1) 遇到fork函数就分支,每个水平的箭头对应于从 左到右执行指令的进程,而每个垂直的箭头对应于 fork 函数的执行 (2) 分支的时候专注于父进程执行完,再处理另一个 ...
- CSAPP第七章家庭作业(原书第二版)
7.6 buf前加了extern是外部符号,由main.c定义,故定义符号的模块是main.o,是int型变量,属于.data节:bufp0和swap函数前未加extern和static,故是全局符号 ...
- 第二章计算机网络答案,计算机网络第二章作业参考答案
计算机网络第二章作业参考答案 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 2. A noiseless 8-kHz channel ...
最新文章
- Java 8 - Optional实战
- maven不能拉取私服的原因
- hive的新分区和旧分区的概念问题
- 还有人不知道什么是AndroidX的吗?文末领取面试资料
- Atitit.js this错误指向window的解决方案
- npm和angular_如何开发,使用和发布Angular库到NPM
- 显示器接口VGA、DVI、HDMI、DP
- Ubuntu创建python虚拟环境
- centos6.5 最小化安装无法上网
- Bailian2994 拼装模型【哈夫曼树】
- linux恢复表数据,Linux恢复误删的数据
- VUE 下载文件流 文件无法打开,缺失数据
- 编译器设计(二)——上下文无关文法及推导
- 河南职称计算机考试多少分通过,2019年河南职称计算机考试报名通知
- 【kubernetes/k8s源码分析】calico node felix源码分析之一
- ORAN C平面 Section Type 0
- 国内外最顶级的12大看板工具
- stm32+W5500+阿里物联网平台
- 细思极恐-你真的会写java吗?
- cast from pointer to smaller type ‘int‘ loses information —— NDK 开发
热门文章
- Microsoft Azure云服务停机!系水泵未知原因关闭导致
- 爆料!亦庄地区数据中心将面临史上最长群体”限电“
- 数据中心空调故障案例集(第二季)
- 成功解决''g++' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- 成功解决WARNING:tensorflow:Variable += will be deprecated. Use variable.assign_add if you want assignmen
- 成功解决pandas\core\indexing.py:179: SettingWithCopyWarning: A value is trying to be set on a copy of a
- Excel:解决Excel表格每一行所有字段在一个单元格的情况
- DP:Sumsets(POJ 2229)
- 淘宝内部大量使用的开源系统监控工具
- centos FTP服务器的架设和配置