2.4 计算机中的数据表示 (con’d)

2.4.6 数据的度量与存储

数据对齐:假设字的宽度为 32 位(4 字节),按字节编址,那么

  • 双字地址(如 double 8 字节):首地址放在 8 的倍数
  • 字地址(如 int 4 字节):首地址放在 4 的倍数
  • 半字地址(如 short 2 字节):首地址放在 2 的倍数
  • 字节地址(如 double 1 字节):地址可随意

对齐访问:访问一个 4 字节的字时,其首地址必须是 4 的倍数。

非对齐访问:其首地址不一定是 4 的倍数,但是速度较慢

如果数据不对齐时,读取多字节数据的时候,可能需要访存多次或者使用非对齐访问才能读取完整数据。

2.4.7 数据的检错 / 纠错

奇偶校验码

步骤:在源部件和目的部件求出奇偶校验位 $P, P’’$,检查 $P = P’'$

优缺点:

  • 只能发现奇数位出错,不能发现偶数位出错,而且也不能确定发生错误的位置,不具有纠错能力
  • 开销小,适用于校验一字节长的代码,故常被用于存储器读写检查或按字节传输过程中的数据校验

2.4.8 基本指令和指令类型

指令系统:数据传送、运算、输入输出、系统控制、程序控制

数据传送指令:参数有原地址 + 目的地址

原子操作(?):用一个内存单元存储一个锁的状态,在读写数据的时候,要先访问锁的状态是否为 $0$,才能继续访问内存单元,防止多个进程同时访问同一内存单元。

子程序调用和返回指令

  • 函数间转返:分为 CALLRETURN 两种指令。为了解决函数嵌套和递归的调用,使用堆栈来保存返回的地址。常使用 基址偏移寻址
  • 参数传递:约定寄存器、约定存储单元、参数赋值、堆栈法
  • 公用寄存器:…

子程序的运行步骤

  • 保存子程序运行时即将破坏的寄存器内容
  • 从特定位置取输入参数
  • 加工处理
  • 将结果送到特定位置
  • 恢复被破坏的寄存器内容
  • 返回主程序

2.5 程序的机器级表示

2.5.1 MIPS 指令系统介绍

MIPS 指令格式:都是32位宽,按字地址对齐

R-Typeop rs rt rd shamt funct

字段代号名称位长
op操作码6
rs第一个源操作数寄存器5
rt第二个源操作数寄存器5
rd存放目的结果的寄存器5
shamt位移量5
funct功能码,用于操作码拓展6

I-Typeop rs rt immediate

字段代号名称位长
op操作码6
rs第一个源操作数寄存器5
rt第二个源操作数寄存器5
immediate立即数或者偏移地址16

J-Typeop target-address

字段代号名称位长
op操作码6
target-addressJumpAddr = [PC[31:28], target-address, 00]
其中 PC 是当前指令地址 $+4$(下一条指令地址)
26