数的机器码表示

原码表示法

0或1 二进制的绝对值

纯小数原码表示定义

  • 零的原码有正零和负零两种形式:

纯整数原码表示定义

补码表示法

纯小数补码表示定义

  • 例如

若x1=+0.1011 x2=-0.1011, 字长为8b,则其原码分别为:

[x1]补=0.1011000

[x2]补=2 - 0.1011000 =1.0101000

即最后一个1不变,前面全部相反。

  • 补码的零只有一个,即0.0000000。

  • 补码1.0000000表示负1

纯整数补码表示定义

也是和小数一样,最后一个1不变,前面全部相反。

反码表示法

对于正数来说,反码=原码=补码

对于负数来说,

符号位:与原码、补码的符号位定义相同。

数值:将原码的数值位按位变反。

  • 例如

若x1=+0.1011 x2=-0.1011, 字长为8b。

[x1]反=0.1011000= [x1]原= [x1]补

[x2]原=1.1011000

[x2]反=1.0100111

  • 反码的零有两个0.0000和1.11111

移码表示法

若纯整数X为n位(包括符号位),则其移码定义为:

  • 方法:补码将符号位求反可得移码

设字长为8b,若x1=+1000(2), x2=-1000(2),

[x1]补=00001000 [x1]移=10001000

[x2]补=11111000 [x2]移=01111000

数的定点表示法

小数:符号位之后就是小数点

整数:小数点固定在数的最低位之后

正零:$(0.0000000)_原$

负零:$(1.0000000)_原$

数的浮点表示法

第一种浮点格式

阶符+阶码值 数符+尾数值
补码定点整数形式 补码定点小数表示形式

比如00001001,1.01111111110000000000000

第二种浮点格式

数符 阶符+阶码值 尾数值
移码定点整数形式

比如1,1,0001001,01111111110000000000000

定点加、减运算

定点补码加、减法与溢出

加法公式:

$[x]_补+[y]_补=[x+y]_补$

减法公式:

$[x]_补-[y]_补=[x]_补+[-y]_补=[x+(-y)]_补$

溢出判断法

定点小数,数的表示范围为|x|<1。

在运算过程中如出现大于1的现象,称为“溢出”。

定点整数,取决于位长,比如8b,数的表示范围为-128~127,超出这个范围则称为“溢出”。

在定点机中,正常情况下溢出是不允许的。

为了判断“溢出”是否发生,可采用两种检测的方法。

双符号位法、进位判断法

  1. 双符号法(变形补码法)

用两个相同的符号位$S_{f1} S_{f2}$表示一个数的符号。

左边第一位为第一符号位$S_{f1}$,相邻的为第二符号位$S_{f2}$。

00表示正号;

11表示负号;

01表示产生正向溢出;

10表示产生负向溢出。

可以这样表示:

V=$S_{f1} \oplus S_{f2}$ ,此逻辑表达式可用异或门实现。

$(a \oplus b = (\neg a \wedge b) \vee (a \wedge \neg b))$

若V=0,则无溢出;V=1,则有溢出。

  1. 进位判断法

设C为最高数值位向符号位的进位值产生的进位, S为符号位产生的进位。当两补码进行加减运算(减法转化为加法进行)时,

如果两个进位值CS相同,则没有溢出发生

如果两个进位值不同,则有溢出发生。

若C=1, S=0时,则发生正溢

若C=0, S=1时,则发生负溢

即V=$S \oplus C$

定点乘法运算

原码一位乘法

  1. 被乘数和乘数均取绝对值参加运算,符号位单独考虑。

  2. 被乘数取双符号,部分积的长度与被乘数的长度相同,部分积的初值为0。

  3. 从乘数的最低位的yn位开始对乘数进行判断,

若$y_n=1$,则部分积加上被乘数|x|,然后右移一位;

若$y_n=0$,则部分积加上0,然后右移一位。

  1. 重复(3)判断n次。

补码一位乘法

  1. 符号位参与运算,运算的数均以补码表示。

  2. 被乘数一般取双符号位参加运算,部分积初值为0。

  3. 乘数可取单符号位,以决定最后一步是否需要校正,即是否要加[-x]补。

  4. 乘数末位增设附加位$y_{n+1}$,且初值为0。

  5. 按表进行操作。

  6. 按照上述算法进行n+1步操作,但第n+1步不再移位,仅根据$y_0与y_1$的比较结果作相应的运算即可。

  • 补码移位规则:部分积为正,右移时有效位最高位补0;为负时最高位补1。
$y_n(高位)$ $y_{n+1}(低位)$ 操 作
0 0 部分积右移一位
0 1 部分积加 $x_补$,右移一位
1 0 部分积加$[-x]_补$,右移一位
1 1 部分积右移一位

原码两位乘法

  1. 符号位不参加运算,最后的符号$P_f= x_f \oplus y_f$。

  2. 部分积与被乘数均采用三位符号,乘数末位增加一位C,其初值为0。

  3. 按表操作。

  4. 若乘数末尾数n为偶数,则乘数用双符号,最后一步不移位。

    若乘数末尾数n为奇数,则乘数用单符号,最后一步移一位。

$y_{n-1}$ $y_n$ C 操作
0 0 0 加0,右移两位,0$\rightarrow$C
0 0 1 加x,右移两位,0$\rightarrow$C
0 1 0 加x,右移两位,0$\rightarrow$C
0 1 1 加2x,右移两位,0$\rightarrow$C
1 0 0 加2x,右移两位,0$\rightarrow$C
1 0 1 减x,右移两位,1$\rightarrow$C
1 1 0 减x,右移两位,1$\rightarrow$C
1 1 1 加0,右移两位,1$\rightarrow$C

补码两位乘法

  1. 符号位参加运算,两数均用补码表示。
  2. 部分积与被乘数均采用三位符号表示,乘数末位增加一位$y_{n+1}$,其初值为0。
  3. 按表操作。
  4. 若乘数末尾数n为偶数,则乘数用双符号,最后一步不移位。

    若乘数末尾数n为奇数,则乘数用单符号,最后一步移一位。

$y_{n-1}$ $y_n$ $y_{n+1}$ 操作
0 0 0 加0,右移两位
0 0 1 加$[x ]_补$,右移两位
0 1 0 加$[x ]_补$,右移两位
0 1 1 加$2[x ]_补$,右移两位
1 0 0 加$2[ -x ]_补$,右移两位
1 0 1 加$[ -x ]_补$,右移两位
1 1 0 加$[ -x ]_补$,右移两位
1 1 1 加0,右移两位

定点除法运算

原码一位除法

符号单求。

(x为被除数,y为除数)

  1. 符号位不参加运算,并要求:|x|<|y|.

  2. 先用被除数减去除数:

当余数为正时,商上1,余数左移一位,再减去除数。

当余数为负时,商上0,余数左移一位,再加上除数。

  1. 当第n+1步余数为负时,需加上|y|得到第n+1步正确的余数。最后余数为$r_n×2^{-n}$(余数与被除数同号)。

补码一位除法

  1. 符号位参加运算,除数与被除数均用双符号补码表示。

  2. 被除数与除数同号时,被除数减去除数。被除数与除数异号时,被除数加上除数。商符号位的取值见第3步。

  3. 余数与除数同号时,商上1,余数左移一位减去除数;余数与除数异号时,商上0,余数左移一位加上除数。

  • 注意:余数左移加上或减去除数后就得到了新余数。
  1. 采用校正法包括符号位在内,应重复规则第三步(n+1)次。

商的校正原则:

当刚好能除尽 (即运算过程其中任一步余数为0) 时,如果除数为正,则商不必校正;若除数为负,则商需要校正,即加$2^{-n}$进行修正。

当不能除尽时,如果商为正,则不必校正;若商为负,则商需要加$2^{-n}$进行修正。

余数的处理:

若商为正,则当余数与被除数异号时,应将余数加上除数进行修正才能获得正确的余数。

若商为负,则当余数与被除数异号时,余数需要减去除数进行校正。

定点运算器的组成与结构

多功能算术逻辑运算单元

半加器:

$x_i$ $y_i$ $S_i$ $C_i$
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

$S_i=x_i \oplus y_i$

$C_i=x_i * y_i$

半加器

全加器:

输入:$x_i$、$y_i$、$C_{I-1}$(上一位的进位)

输出:$S_i$、$C_i$(进位)

$S_i=x_i \oplus y_i \oplus C_{i-1}$

$C_i=x_iy_i+(x_i \oplus y_i)C_{i-1}$

全加器

并行加法器及其进位链

  1. 串行进位的并行加法器

串行进位的并行加法器

通常把$x_i \oplus y_i$称为进位传递函数或进位传递条件,以$P_i$表示。将$x_iy_i$称为进位产生函数或本地进位,以$G_i$表示。所以,进位表达式又常表示为

$C_i=x_iy_i+(x_i \oplus y_i)C_{i-1}=G_i+P_iC_{i-1}$

并行进位的并行加法器

所以

$C_1=G_1+P_1C_0$

$C_2=G_2+P_1C_1$

$C_3=G_3+P_1C_2$

$C_4=G_4+P_1C_3$

上式可以改写成如下形式:

  1. 组间并行电路

一重进位方式的ALU

组内并行,组间串行

顾名思义

组内并行、组间并行

组间并行电路

二重进位方式的ALU

三重进位方式的ALU

浮点运算方法和浮点运算器

浮点算术运算

加减法

  1. 0操作数的检查;

  2. 比较阶码大小并完成对阶;

  3. 尾数进行加或减运算;

  4. 结果规格化并进行舍入处理。(0舍1入或末位恒置1)

乘法

设$x=2^mM_x$,$y=2^nM_y$,则$xy=2^{m+n}(M_xM_y)$