秋逸

02.数据表示

BCD

8421

8421 只表示一位十进制数所以表示范围是 0~9, 如果>=10 则要+6

    7  +  8
= 0111 + 1000
= 1111

但是 15 用 8421 表示是 0001 0101, 这时候通过对1111+6: 1111 + 0110 得到0001 0101, 恰好是 15

余三码

那为了解决上述 +6 的问题, 出现了余三码, 对 0-9 范围内的数以 8421 码表示之后全都+3,这样后期进行加减运算之后就不需要考虑数字是否落在 0-9 范围内, 然后为大于 9 的数单独+6 了.

余三码不具有有权性, 属于无权码, 而 8421 属于有权码.

2421 码

每一个 2421 码只要与自身按位取反,便可得到该数按 9 的补数的 2421 码,比如 4 的 2421 码 0100 自身取反后就变为了 1011,即 5 的 2421 码。2421 码可以给运算带来方便,因为可以利用·其对 9 的补数将减法运算转变为加法运算

数据范围

数据范围

移码就是对补码的符号位取反, 只能表示整数. 所以移码数据范围和补码一样

移码 移码刚好是 0x00~0xff, 适合在电路中对比大小, 常用于表示浮点数的阶码.

定点小数1

定点小数的转码规则:

加减规则也一样, 先转成补码然后 运算.

符号位也参与运算

数据范围: 范围

定点小数拓展位数的时候 0 是追加在末尾, 定点整数拓展时 0 插入在符号位与数值位中间.

奇偶校验码

偶较验位的计算: 对有效信息位按位 xor

校验过程: 对奇偶校验码安位 xor, 是 1 则出错

算术逻辑单元(ALU)

PS: 同或是对 xor 进行取反

一位全加器

电路图

并行加法器

串行进位(行波进位)的并行加法器: 计算速度很大程度取决于进位计算的速度

串行的

并行进位加法器:

逻辑表达式 电路

因为逻辑越来越复杂, 一般只实现 4 位的并行加法器.

补码加/减法器

标志位生成

真简单, 不做讲解.

移位运算

算术移位

改变各个数码位和小数点的相对位置, 从而改变各个数码位的位权(相当于乘除2). 可用于实现乘除法.

  • 原码: 直接整体左右移动, 舍弃的如果==0, 则相当于除以2, 如果!=0, 则会丢失精度.
  • 反码: 正数和原码相同, 负数: 右移高位补1, 左移低位补1.
  • 补码: 正数和原码相同, 负数复杂. 因此左部分适用于反码算术移位的规则, 右部分使用原码的算术移位规则.

逻辑移位

对无符号数的算术移位.

循环移位

带进位位的循环左移: CF放到最低位, 最高位放到CF

右移同理…

定点数乘法运算

原码一位乘法

数值位取绝对值进行乘法计算

ACC = 0
MQ = abs(乘数)
X = abs(被乘数)
loop {
    if MQ最低位 == 0:
        ACC += X
    else:
        ACC += 0
    MQ >>= 1
    AC >>= 1, 被舍弃的最低位补到MQ的最高位
}

补码一位乘法

由于MQ增加一位辅助位, ACC和X寄存器也各增加一位(做为双符号位), 乘数MQ使用单符号位, 被乘数X使用双符号位.

Footnotes

  1. 【王道计算机考研 计算机组成原理】 https://www.bilibili.com/video/BV1ps4y1d73V/?p=14&share_source=copy_web&vd_source=0a7e9572278635efd730c0077f8e7b45

02.数据表示
: 杨秋逸
https://yangqiuyi.com/blog/计组/02数据表示/
© 2025 杨秋逸 . All rights reserved.