CS:APP第四章作业
CS:APP第四章作业
4.45
(a) 不正确,当REG 表示 %rsp 时,因为先执行了 subq $8, %rsp,相当于把 %rsp 的指针已经动掉了,无法访问到应该被复制的东西,指令错误。
(b)
1 | movq %rsp -8(%rsp) |
4.47

(a)
1 | void bubble_sort(long* data, long* right) { |
(b)
1 | bubble_sort: |
1 | Chapter4-YAS/sim/y86-code |
完整代码如下:
1 | .pos 0 |
4.51
| 阶段 | iaddq V, rB | 解释 |
|---|---|---|
| 取指 | icode:ifun ← M1[PC] rA:rB ← M1[PC+1] valC ← M8[PC+2] valP ← PC + 10 |
取出指令、寄存器ID和立即数,PC增加10字节。 |
| 译码 | valB ← R[rB] |
读出寄存器 rB 的旧值作为被加数。 |
| 执行 | valE ← valB + valC Set CC |
ALU 计算 rB的值 + 立即数,并更新条件码。 |
| 访存 | 无内存访问。 | |
| 写回 | R[rB] ← valE |
将加法结果写回寄存器 rB。 |
| 更新PC | PC ← valP |
更新程序计数器。 |