计算机组成原理

大二上学期计算机组成原理的复习笔记,目前已完结。

一、数据

1. 基本概念

  1. 字长:指针数据的标称大小,32 位系统为 4 字节
  2. 对象的地址为低地址(最小地址),最低有效字节在低地址(67 45 23 01)
  3. 逻辑运算符 && 和 || 有短路性,位运算符没有
  4. 加减法的优先级高于移位运算
  5. 整数运算有交换结合分配律没有单调性;浮点运算有单调性、只有交换律

2. 整数

  1. 逻辑右移补零,算术右移补符号位
  2. %d,%u,%x 分别输出有符号十进制、无符号十进制、十六进制
  3. 有符号和无符号运算时,有符号被转为无符号
  4. short 转 unsigned:先扩展(补符号位),再转为无符号
  5. 加法溢出:无符号 $s<x$;有符号 $x,y$ 同号且结果异号
  6. TMin 的逆元为 TMin,其余为相反数
  7. 有无符号右移为向下取整,但有符号除法要向零:x<0 ? x+(1<<k)-1 : x) >> k
  8. ~x+1 等价于 -x

3. 浮点数

  1. 32 位:1+8+23,64 位:1+11+52
  2. $V=(-1)^s\times M\times 2^E,E=e-Bias=e-2^{k-1}-1$
  3. 规格化数 $M=1+f$;非规格化数 $M=f,e=1$
  4. 向偶数舍入,最低有效位为 0 为偶数(只对 X.Y100 有效)
  5. $NaN+x=NaN$

二、汇编

1. 基本概念

  1. movq 不支持内存到内存
  2. leaq 仅做地址计算,不访问内存,不设置条件码
  3. sarq 算术右移,shrq 逻辑右移
  4. ZF:零;SF:负;CF/OF:无符号/有符号溢出
  5. cmp,test 设置条件码,不保存结果
  6. ja/jb 无符号大于/小于;jl=(SF^OF)
  7. setX 只支持低地址单字节,配合 movzbl(32 位)
  8. 条件移动 cmovX:不用于复杂计算、风险引用和副作用计算

2. 过程调用

  1. 栈:向低地址生长,%rsp 指向当前栈顶
  2. call 将下一条指令地址入栈,属于调用者栈帧
  3. 参数顺序:%rdi,%rsi,%rdx,%rcx,%r8,%r9,Arg7 在低地址
  4. 调用者保存:%rax,%r10,%r11 和六个参数
  5. 存储空间:text 代码,data 全局变量,heap 动态分配,stack 局部变量
  6. 栈攻击防护:检查输入长度、安全函数、栈随机化、栈不可执行、金丝雀

三、处理器

1. Y86-64 指令集

  1. 无 %r15,无 CF(只有 opq 设置),小端法
  2. 寄存器:%rax,%rcx,%rdx,%rbx,%rsp,%rbp,%rsi,%rdi
  3. icode:halt,nop,cmov,irmovq,rmmovq,mrmovq,opq,jxx,call,ret,pushq,popq
  4. irmovq 寄存器 F,rB;mrmovq D(rB),rA
  5. ifun:le,l,e,ne,ge,g;add,sub,and,xor
  6. 状态:AOK,HLT,ADR,INS=1,2,3,4
  7. 程序结构:从零地址开始,需初始化栈指针和数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
init:
irmovq Stack, %rsp
call Main
halt

.align 8
Array:
.quad ...
.quad 0

Main:
...

.pos 0x100
Stack:

2. 顺序处理器

  1. HCL:小写 bool 大写 words,&&/||/!;in {}
  2. 阶段:Fetch,Decode,Execute,Memory,WriteBack,PC
    1. Fetch:icode,ifun;rA,rB;valC;valP
    2. Decode:valA,srcA;valB,srcB
    3. Execute:valB/0 OP/ALUADD valA/valC/8;0xF
    4. Memory:valM
    5. WriteBack:valE,dstE;valM,dstM
    6. PC:Cnd? (Cnd $\leftarrow$ Cond(CC,ifun))
  3. 控制流
    1. int icode=[imem_error:INOP;1:mem_icode;];
    2. int ifun=[imem_error:FNONE;1:mem_ifun;];
    3. int Stat=[imem_error||dmem_error:SADR;!instr_valid:SINS;icode==IHALT:SHLT;1:SAOK;];
    4. need_regids;mem_addr;mem_read;new_pc

四、存储

1. 缓存

  1. Miss:cold(compulsory),capacity,conflict
  2. S=2^s sets, E=2^e lines/set, B=2^b bytes/block
  3. Address:m=t+s+b,(S,E,B,m)
  4. Write-through/back;Write-allocate/no-write-allocate
  5. 存储器山:时间局部性脊,空间局部性斜坡,硬件预取脊

2. 程序优化

  1. 矩阵乘法:A[i][k]*B[k][*]=C[i][*];分块 $3B^2<C$
  2. 通用方法:代码移动(减少函数调用)、临时变量
  3. 循环展开:减少数据依赖,展开、重组、并行

计算机组成原理
https://sqzr2319.github.io/25Fall/CSAPP/
作者
sqzr2319
发布于
2026年1月9日
许可协议