首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >计算机组织结构(二) 定点运算

计算机组织结构(二) 定点运算

作者头像
Rikka
发布2022-01-11 09:41:09
发布2022-01-11 09:41:09
6870
举报
文章被收录于专栏:rikkarikka

📚 文档目录 合集-数的二进制表示-定点运算-BCD 码-浮点数四则运算-内置存储器-Cache-外存-纠错-RAID-内存管理-总线-指令集: 特征- 指令集:寻址方式和指令格式

1. 移位运算

1.算数移位

  • 符号位不变, 左移相当于乘以 2, 右移相当于除以 2(左侧全补符号位).

2. 逻辑移位

  • 无符号数的移位, 右移时永远在高位填 0.

2. 加法运算

1. 全加器

  • 𝑆_𝑖=𝑋_𝑖⊕𝑌_𝑖⊕𝐶_{𝑖−1}
  • 𝐶_𝑖=𝑋_𝑖𝐶_{𝑖−1}+𝑌_𝑖𝐶_{𝑖−1}+𝑋_𝑖𝑌_𝑖

2. Serial Carry Adder

  • 缺点: 速度慢.
  • 延时(OR AND 1ty, XOR 3ty)
    • Cn: 2n ty
    • Sn: 2n+1 ty

3. Carry Look Ahead Adder

注意:这里的+均为“或”

可见,Ci 仅与最初的X Y和 C_0有关.令𝑃_𝑖=𝑋_𝑖+𝑌_𝑖, 𝐺_𝑖=𝑋_𝑖𝑌_i则:

总结得:C_{i+1} = G_{i+1}+P_{i+1}C_i, 超前进位加法器采用的是将低一位的逻辑代数代入高一位, 依此类推最终每一个进位输出仅考虑 C_0, X_i, Y_i几个信号, 于是所有的进位都能同时计算.

  • 缺点:复杂
  • 延时: 1 ty+ 2ty + 3 ty = 6 ty

4. Partial Carry Look Ahead Adder

结合两者

5. 溢出判断

  • C_n\oplus C_{n-1} =1, 即符号位进位与最高有效位进位不同时,发生溢出.
  • 𝑋_𝑛 𝑌_𝑛 \overline{𝑆_𝑛}+\overline{𝑋_𝑛𝑌_𝑛}𝑆_𝑛=1,则溢出,与上面等价.

3. 减法运算

减法运算大致与加法相同,只需要将减数取反加一然后按加法算即可, 注意加一的操作是令 C_0 = 1.

4. 乘法运算

1. 无符号整数乘法

通过加法和移位实现,与竖式乘法极其类似,但是计算机很难像人类那样一次性把各位乘的结果一次性相加,因此采用部分积的方式:例:0111\times0110

部分积

乘数

得到当前行的操作

0000

0110

部分积+乘数末位$\times 0111$

0000

0011

右移

0111

0011

部分积+乘数末位$\times 0111$

0011

1001

右移

1010

1001

部分积+乘数末位$\times 0111$

0101

0100

右移

0101

0100

部分积+乘数末位$\times 0111$

0010

1010

右移

  • 乘数末位决定被乘数是否加到部分积,然后部分积和乘数均右移,部分积低位保存到乘数高位.
  • 被乘数只与部分积高位相加

原理:

2. 补码整数乘法

根据上面无符号整数的原理, 可以将二进制补码整数相乘变形如下:

形式上还原了,只是每次乘的不是乘数的末位数, 且注意是算数右移,需要补符号位,例: -7\times-6 = 42,即 1001\times1010=00101010

部分积

乘数

得到当前行的操作

0000

10100

部分积+$(Y_0-Y_1)\times 1001$

0000

01010

右移

0111

01010

部分积+$(Y_1-Y_2)\times 1001$

0011

10101

右移

1100

10101

部分积+$(Y_2-Y_3)\times 1001$

1110

01010

右移

0101

01010

部分积+$(Y_3-Y_4)\times 1001$

0010

10101

右移

5. 除法运算

1. unsigned

1.人的计算:除数右移, 2n位

  • 竖式计算:

余数

除数

00000111

00110000

0000

00000111

00011000

0000

00000111

00011000

0000

00000111

00001100

0000

00000111

00001100

0000

00000111

00000110

0000

00000001

00000110

0001

00000001

00000011

0001

00000001

00000011

0010

  1. 计算机的计算: 余数左移, n位

余数

除数

0000

0111

0011

0000

111

0011

0000

1110

0011

0001

110

0011

0001

1100

0011

0011

100

0011

0000

1001

0011

0001

001

0011

0001

0010

0011

2. 带有符号的除法
  • 如何判断余数(的绝对值)是否大于除数(的绝对值)?
    • 同号则减, 异号则加. 与结果符号相同的那个数绝对值大

remaindersign

Divisorsign

Subtraction

Addition

0

1

0

1

0

0

Enough

Not enough

----

----

0

1

----

----

Enough

Not enough

1

0

----

----

Not enough

Enough

1

1

Not enough

Enough

----

----

  1. 恢复余数法 在下面的步骤中,余数和除数的和是存储在余数寄存器里面的,判断完成后,还要恢复原来的余数(即减去余数).之前的不带符号位除法也都是恢复余数法,只是没有表示出来.

最后,结果取 0010 的补码整数 1110 为最终结果.

  • 缺点:Problem: recover remainder is high cost
  • 解决方案:使用不恢复余数法(加减相消法)

2 .加减相消法

规则

将被除数符号拓展 n 位后存储在余数和商寄存器.

如果被除数与除数符号相同, 作减法; 若符号位不同, 作加法.

若新的余数与除数符号相同, 上商 1; 否则上商 0.

新的余数(指左移前的余数)与除数符号位相同, 则

Ri+1=2Ri−Y, 即余数=余数<<1-除数;否则

Ri+1=2Ri+Y

商的修正:

商左移一位. 若被除数和除数异号(即商为负), 商加一

若余数与被除数符号不同:

若被除数和除数同号,余数加除数

若被除数和除数异号,余数减除数

注意:若做完如上修正后,余数为除数相反数,需要将余数置为0,同时商减一

示例:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 移位运算
    • 1.算数移位
    • 2. 逻辑移位
  • 2. 加法运算
    • 1. 全加器
    • 2. Serial Carry Adder
    • 3. Carry Look Ahead Adder
    • 4. Partial Carry Look Ahead Adder
    • 5. 溢出判断
    • 3. 减法运算
    • 4. 乘法运算
      • 1. 无符号整数乘法
      • 2. 补码整数乘法
    • 5. 除法运算
      • 1. unsigned
      • 2. 带有符号的除法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档