计算机组成原理-数据的表示和运算

考纲

(一)数制与编码
进位计数制及其相互转换;定点数的编码表示
(二)运算方法和运算电路
基本运算部件:加法器;算术逻辑单元(ALU)
加/减运算:补码加/减运算器;标志位的生成
乘/除运算:乘/除法运算的基本原理;乘法电路和除法电路的基本结构
(三)整数的表示和运算
无符号整数的表示和运算;有符号整数的表示和运算
(四)浮点数的表示和运算
浮点数的表示:IEEE 754标准;浮点数的加/减运算

数制与编码

进制转换

原码 补码 反码 移码

原码

最高位符号位,后面实际数值,
如 0110 为 +6 ,1110 为 -6
n位原码表示带符号数的范围为 $-2^{n-1}+1 到 2^{n-1}-1$

反码

最高位符号位,正数与原码一致,负数数值位全部取反
0110 是+6
1001 是 -6

补码

最高位符号位,正数与原码一致,符号位为1时,后面数值需要取反加一
0110是+6
1010是-6
n位补码表示带符号数的范围为 $-2^{n-1}$到$2^{n-1}-1$

移码

408中移码只有IEEE754中有涉及,到下面再讲

补码和原码理解

我们可以用一个时钟来进行理解这个。
首先需要明确,对于计算机来说,所有数都是机器数,各种码的定义是人类加上的
以4位举例,首先是无符号数,也就是能从0表示到15

二进制 (Binary) 十进制 (Decimal) 十六进制 (Hexadecimal)
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F

这时,我们需要表示负数,我们天然能想到的是将后半部分对应到负数去,一半给正数,一半给负数。

00000111 (0 到 7) 作为正数部分。
10001111 (8 到 15) 作为负数部分。
那么10001111 (8 到 15) 应该如何对应呢?

  1. 直接将1作为符号位,后面当作数值,这个也就是原码
    • 0001+1,那么我们就让 1001 表示 -1。(符号位变了,数值位一样)
    • 0010+2,那么我们就让 1010 表示 -2
    • ...·
    • 0111+7,那么我们就让 1111 表示 -7
      image.png
      这个想法产生了原码 (Sign-Magnitude)。它非常易于人类阅读。
      但是机器直接使用原码计算是会出错的
      比如2-1,也就是2+(-1)
    • +2 的原码是 0010
    • -1 的原码是 1001
    • 0010 + 1001 = 1011
    • 1011 在原码里表示什么?是 -3
      结果 2 - 1 = -3,这显然是错误的。所以,原码虽然直观,但不能用于计算机的直接运算。
  2. 我们要让机器去能真的直接正确作对这个计算,我们回到时钟,在十二小时的时钟上,-2也就是倒着转两格,+10也就是正着转十格,最终的效果实际上一致的,回到我们上面的划分为十六格的时钟,

    • 想表示 -1:从 0000 后退一步是什么?是 1111。好,那我们就规定 1111 代表 -1

    • 想表示 -2:从 0000 后退两步是什么?是 1110。好,那我们就规定 1110 代表 -2

    • ...

    • 想表示 -8:从 0000 后退八步是什么?是 1000。好,那我们就规定 1000 代表 -8
      现在就将0000到1111分配给了-8到 7,如下图所示,这其实就是补码,补码在计算机中可以统一加减法
      image.png
      现在,我们用补码再来算一遍 2 - 1,也就是 2 + (-1)

    • +2 的补码是 0010

    • -1 的补码是 1111

    • 0010 + 1111 = 10001

    • 因为是4位系统,最高位的进位 1 会自然溢出被丢掉,剩下 0001

    • 0001 在补码里表示什么?是 +1

运算方法和运算电路

基本运算部件:加法器;算术逻辑单元(ALU) 加/减运算:补码加/减运算器;标志位的生成

  1. 一位全加器
    和表达式:$S_i=A_i \oplus Bi \oplus C{i-1}$(当$A_i$、$Bi$、$C{i-1}$中有奇数个1时,$S_i=1$,否则$S_i=0$)
    进位表达式:$C_i=A_i B_i+(A_i \oplus Bi)C{i-1}$
    一位全加器主要的作用是将$A_{i}$和$Bi$和来自低位传入的进位$C{i-1}$ ,将这三个进行异或,得到本位的结果,将AB异或再与低位进位,在和AB或运算得到本次的进位
    image.png

  2. 串行进位加法器
    将一位全加器的进位接入下一位的$C_{i-1}$中组成串行进位,由于需要一位一位计算进位,会有较大延迟所以有下方并行进位加法器

  3. 并行进位加法器
    只需知道并行进位会比串行加法器算的更快

  4. 带标志加法器
    OF(OVERFLOW)溢出标志位用来表示带符号加减法,是否溢出,OF=1代表溢出,计算机中的实际的计算方式是$Cn \oplus C{n-1}$也就是最高位的进位和次高位的进位进行异或
    CF(CRAAYFLOW)进位/借位标志位用来表示无符号数加减法是否溢出,计算机中的实际计算方式是$C{in} \oplus C{out}$
    ZF(ZEROFLOW)零标志位,ZF=1时表示结果F等于0
    SF(SIGNFLOW)符号标志位 SF=1为负

    在计算机中,加法器不知道你运行的到底是带符号加法还是无符号加减法,标志位只是根据硬件电路去产生,所以我们做题的时候直接按给出的表达式手算,直接根据这个数合理的表示范围去判断溢出,而不是通过二进制去异或计算到底溢出没有

  5. ALU
    ALU中需要知道的是ALUop的位数决定ALU能进行的操作数,3位ALUop能进行8种操作

    乘法运算的基本原理和电路实现

版权声明:除特殊说明,博客文章均为栋dong原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
如有需要,请在留言板留言,或者添加我的QQ或者微信
我只是一个学生,如有错误或者侵权,请联系我,谢!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇