CSAPP第4章家庭作业参考答案
生活随笔
收集整理的這篇文章主要介紹了
CSAPP第4章家庭作业参考答案
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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; }測試結(jié)果:
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 retqY86-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 ret4.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]
執(zhí)行:
valE ←\leftarrow← valB + valC
Set CC
訪存:
寫回:
R[rB] ←\leftarrow← valE
更新PC:
PC ←\leftarrow← valP
4.55
總結(jié)
以上是生活随笔為你收集整理的CSAPP第4章家庭作业参考答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSAPP第7章家庭作业参考答案
- 下一篇: Eclipse中Git的使用与Junit