02.数据表示
BCD
8421
8421 只表示一位十进制数所以表示范围是 0~9, 如果>=10 则要+6
7 + 8
= 0111 + 1000
= 1111
但是 15 用 8421 表示是 0001 0101
, 这时候通过对1111
+6: 得到
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使用双符号位.