导图社区 第二章 数据的表示与运算
这是一篇关于408考研,期末考试,计算机组成原理数据表示与运算思维导图,专为计算机专业学生、考研 / 软考备考者、计算机基础课程学习者打造,是系统梳理计算机数据表示与运算核心知识的高效学习工具。思维导图的结构化呈现方式,将数制与编码、定点数、浮点数、运算器与 ALU 四大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入关键公式标注、运算流程示意图,帮助使用者快速构建数据表示与运算的知识体系,精准攻克数制转换、补码运算、浮点数标准、ALU 设计等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将无符号数与有符号数、原 / 反 / 补 / 移码表示、定点数加减乘除运算、IEEE754 浮点数标准、ALU 运算器原理等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机基础课程学习者,模板清晰呈现了数据在计算机中的表示方式、运算规则与硬件实现逻辑,可用于入门学习、知识框架搭建,快速建立对计算机底层数据处理机制的整体认知。模板完整覆盖数据的表示与运算核心考点:从进位计数制转换、机器数与真值的概念,到定点数的编码方式与加减运算;从浮点数的 IEEE754 标准、规格化与加减运算,到 ALU 的硬件实现与运算器设计,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。该模板借助万兴脑图软件绘制,助力计算机学习者高效掌握计算机组成原理数据运算知识。
编辑于2026-05-07 15:53:39这是一篇关于408考研,期末考试,计算机组成原理,输入输出系统思维导图,专为计算机专业学生、考研(如 408 统考)/ 软考备考者、计算机硬件底层原理学习者打造,是系统梳理 I/O 系统核心知识的高效学习工具。思维导图的结构化呈现方式,将 I/O 系统的基本概念、I/O 接口、I/O 控制方式、中断处理流程四大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入高频考点标注、原理示意图与对比表格,帮助使用者快速构建输入 / 输出系统的知识体系,精准攻克 I/O 控制方式对比、DMA 传输原理、中断处理流程、磁盘调度算法等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将 I/O 接口的软硬件构成、程序查询 / 中断 / DMA 控制方式的差异、中断响应与处理全过程、磁盘调度计算等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了主机与外设数据交互的完整逻辑,可用于入门学习、硬件原理学习的知识框架搭建,快速建立对计算机输入输出系统的整体认知。模板完整覆盖输入 / 输出系统核心考点:从 I/O 系统的基本概念、接口的分类与工作原理,到程序查询、中断、DMA 三种核心 I/O 控制方式的对比;从中断响应与完整处理流程,到磁盘调度算法、DMA 传输原理等计算类高频考点,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。该模板借助万兴脑图软件绘制,助力计算机学习者高效掌握输入 / 输出系统核心知识。
这是一篇关于408考研,期末考试,计算机组成原理,总线的思维导图,专为计算机专业学生、考研 / 软考备考者、计算机底层原理学习者打造,是系统梳理总线系统核心知识的高效学习工具。思维导图的结构化呈现方式,将总线概述、总线仲裁、总线操作和定时、总线标准四大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入关键原理示意图、性能计算要点与对比说明,帮助使用者快速构建总线系统的知识体系,精准攻克总线分类、仲裁方式、传输定时与性能分析等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将总线的特性与分类、集中式 / 分布式仲裁方式、同步 / 异步传输定时、总线性能指标计算等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了计算机系统中各部件通过总线进行数据传输的完整逻辑,可用于入门学习、硬件原理学习的知识框架搭建,快速建立对计算机系统互连机制的整体认知。模板完整覆盖总线系统核心考点:从总线的基本概念、分类与特性,到总线仲裁的集中式与分布式实现;从总线操作的同步 / 异步 / 半同步定时方式,到总线标准与性能指标计算,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。
这是一篇关于408考研,期末考试,计算机组成原理,中央处理器的思维导图,专为计算机专业学生、考研 / 软考备考者、计算机底层原理学习者打造,是系统梳理 CPU 核心知识的高效学习工具。思维导图的结构化呈现方式,将 CPU 的功能和基本结构、指令执行过程、数据通路、控制器、指令流水线、多处理器系统六大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入高频考点标注、关键概念对比与计算要点,帮助使用者快速构建 CPU 工作原理的知识体系,精准攻克数据通路设计、流水线性能分析、中断处理流程等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将 CPU 结构、指令执行周期、数据通路设计、硬布线 / 微程序控制器对比、流水线冲突处理、多处理器系统分类等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了 CPU 从指令取指到执行的完整工作流程,可用于入门学习、底层原理学习的知识框架搭建,快速建立对计算机核心部件的整体认知。模板完整覆盖中央处理器核心考点:从 CPU 的功能与基本结构、指令执行的完整过程,到数据通路的设计原理与分类;从硬布线与微程序控制器的工作原理与对比,到指令流水线的性能指标、冲突处理与多发技术;再到多处理器系统的基本概念与硬件多线程技术,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。
社区模板帮助中心,点此进入>>
这是一篇关于408考研,期末考试,计算机组成原理,输入输出系统思维导图,专为计算机专业学生、考研(如 408 统考)/ 软考备考者、计算机硬件底层原理学习者打造,是系统梳理 I/O 系统核心知识的高效学习工具。思维导图的结构化呈现方式,将 I/O 系统的基本概念、I/O 接口、I/O 控制方式、中断处理流程四大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入高频考点标注、原理示意图与对比表格,帮助使用者快速构建输入 / 输出系统的知识体系,精准攻克 I/O 控制方式对比、DMA 传输原理、中断处理流程、磁盘调度算法等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将 I/O 接口的软硬件构成、程序查询 / 中断 / DMA 控制方式的差异、中断响应与处理全过程、磁盘调度计算等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了主机与外设数据交互的完整逻辑,可用于入门学习、硬件原理学习的知识框架搭建,快速建立对计算机输入输出系统的整体认知。模板完整覆盖输入 / 输出系统核心考点:从 I/O 系统的基本概念、接口的分类与工作原理,到程序查询、中断、DMA 三种核心 I/O 控制方式的对比;从中断响应与完整处理流程,到磁盘调度算法、DMA 传输原理等计算类高频考点,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。该模板借助万兴脑图软件绘制,助力计算机学习者高效掌握输入 / 输出系统核心知识。
这是一篇关于408考研,期末考试,计算机组成原理,总线的思维导图,专为计算机专业学生、考研 / 软考备考者、计算机底层原理学习者打造,是系统梳理总线系统核心知识的高效学习工具。思维导图的结构化呈现方式,将总线概述、总线仲裁、总线操作和定时、总线标准四大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入关键原理示意图、性能计算要点与对比说明,帮助使用者快速构建总线系统的知识体系,精准攻克总线分类、仲裁方式、传输定时与性能分析等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将总线的特性与分类、集中式 / 分布式仲裁方式、同步 / 异步传输定时、总线性能指标计算等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了计算机系统中各部件通过总线进行数据传输的完整逻辑,可用于入门学习、硬件原理学习的知识框架搭建,快速建立对计算机系统互连机制的整体认知。模板完整覆盖总线系统核心考点:从总线的基本概念、分类与特性,到总线仲裁的集中式与分布式实现;从总线操作的同步 / 异步 / 半同步定时方式,到总线标准与性能指标计算,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。
这是一篇关于408考研,期末考试,计算机组成原理,中央处理器的思维导图,专为计算机专业学生、考研 / 软考备考者、计算机底层原理学习者打造,是系统梳理 CPU 核心知识的高效学习工具。思维导图的结构化呈现方式,将 CPU 的功能和基本结构、指令执行过程、数据通路、控制器、指令流水线、多处理器系统六大核心模块拆解为层级清晰、逻辑连贯的分支框架,同时融入高频考点标注、关键概念对比与计算要点,帮助使用者快速构建 CPU 工作原理的知识体系,精准攻克数据通路设计、流水线性能分析、中断处理流程等重难点与高频考点。对于计算机专业学生与考研 / 软考备考者而言,这份思维导图模板可直接用于课堂笔记整理、期末复习、考点梳理,将 CPU 结构、指令执行周期、数据通路设计、硬布线 / 微程序控制器对比、流水线冲突处理、多处理器系统分类等零散知识点系统化,降低理解与记忆难度,提升备考效率;对于计算机底层原理学习者,模板清晰呈现了 CPU 从指令取指到执行的完整工作流程,可用于入门学习、底层原理学习的知识框架搭建,快速建立对计算机核心部件的整体认知。模板完整覆盖中央处理器核心考点:从 CPU 的功能与基本结构、指令执行的完整过程,到数据通路的设计原理与分类;从硬布线与微程序控制器的工作原理与对比,到指令流水线的性能指标、冲突处理与多发技术;再到多处理器系统的基本概念与硬件多线程技术,均以思维导图形式清晰呈现,层级分明,便于快速查阅、重点标记与按需编辑修改,适配备考笔记、课程复习提纲、学习课件等多种场景。
第二章 数据的表示与运算
2.1数制与编码
计算机只能表示和处理离散的信息
输入设备必须具有“离散化”和“编码”两方面的功能
计算机内部数值数据表示方法有两种
二进制数直接表示
二进制编码的十进制数
定点小数
小数点位置约定在固定位置的数
小数点总固定在数的最左侧
一般用来表示浮点数的尾数部分
浮点数
小数点位置约定为可浮动的数
进位计数制及其相互转换
进位计数法
R进制
逢R进一
R进制直接加
eg,十六进制E+2就会产生一个进位
+1变成F
二进制
可使用两个稳定状态的物理器件表示
0,1正好对应逻辑值假、真。方便实现逻辑运算
可很方便地使用逻辑门电路实现算术运算
不同进制之间的转换
二进制转换为八进制和十六进制
转八进制
三个二进制为一组,每一组转换成对应的八进制符号0-7
转十六进制
每四位一组
十六进制
10-15 A-F
整数部分补0补在头部,小数部分补0补在尾部
任意进制转换为十进制

数码位和位权相乘,乘积相加
基数:
每个数码位所用到的不同符号的个数,r进制的基数为r
十进制转换为任意进制
整数部分
除基取余法

先取得的“余”是整数的低位
任何整数可以用二进制表示
小数部分
乘基取余法

先取得的“整“是小数的高位
注意:有的十进制小数无法用二进制精确表示,如: 0.3

相同位数二进制补码小数和十进制小数,能表示的个数

任何一个二进制小数都可以用十进制小数表示
直到乘积的小数部分为0时(或满足精度(位数)时结束)
各种进制的常见书写方式


O表示八进制
真值与机器数
真值
实际的带正负号的数值(人类习惯的样子)
补码和真值的表示是一一对应的
机器数:
数字实际存到机器里的形式,正负号需要被“数字化“变成0或1
字符与字符串
字符编码ASCII码
共128个字符 —> 7位二进制编码
大写字母
65-90
小写字母
97-122
汉字的表示与编码
GB 2312-80 : 汉字+各种符号共7445个
区位码
国际码
汉字内码
校验码
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数
进行偶校验(所有位进行异或,若结果为1说明出错)
检测不出偶数个位错误
偶校验的硬件实现:
各信息进行异或(模2加)运算,得到的结果即为偶校验位
异或⊕
模2加
相同为0,不同为1
海明校验码
纠错理论
L-1=D+C(D>=C)
编码的码距L越大,检测错误的位数D越大,纠正错误的位数C越大
求解步骤
1. 确定海明码的位数: 2^k ≥ n + k + 1(k为要检验数的位数,n为应该设置的检验位数,若检测两位错误k+1
2. 确定校验位的分布
3. 求检验位的值
4. 纠错
若为全为0,则没有错误,否则出错,并且错误的值为对应的位数
循环冗余检验码
检验步骤
1. 确定K、R以及生成多项式对应的二进制码
2. 移位
3. 相除
4. 检错和纠错
生成多项式选取的条件
任何一位发生错误时,应使余数不为0
不同位发生错误时,余数应该不同
对余数作模2除时,应使余数循环
基本符号的种类和组合规则是信息编码的两大要素
无符号整数
无符号整数的表示有范围
只保留更低的位数
溢出会导致数据信息的丢失

主存地址
采用无符号数表示
都是正数,不需要符号位
补充
指令执行过程中的所有操作都有先后顺序,需要定时信号进行定时
定时信号的宽度就是时钟周期
当一个乘数是常数时,编译器可将乘运算优化为若干移位和加/减运算指令
加减
加法:
从最低位开始,按位相加,并往更高位进位
减法:
"被减数”不变,“减数”全部位按位取反、末位+1 ,减法变加法
溢出判断
手算
n bit无符号整数表示范围0~2^n-1,超出此范围则溢出
代入十进制的值
机算
加法的溢出判断
最高位产生的进位=1时,发生溢出,否则未溢出
减法的溢出判断
最高位产生的进位=0时,发生溢出,否则未溢出
利用模来达到减法变加法的目的,如果不进位实际上未取模
乘法
原理
两个nbit无符号数的乘法运算可拆解为n轮加法运算
根据乘数的各个bit,决定每一轮加法运算“+被乘数“或“+全0”
每一轮加法运算需要与上一轮加法运算的结果“错位相加”
手算
机算
部件
乘积寄存器P,Y
支持移位功能的寄存器
寄存器
移位器
步骤
开始
1. 将被乘数、乘数分别放入寄存器X、Y
2. 乘积寄存器P 置为0
3. .计数器Cn的初始值置为 n(n 为乘数的位数)
判断
控制逻辑检测被乘数和乘数是否一个为全0
有一个为全0时,结果直接得0,不需要再进行后续的运算步骤
否则重复 n 轮加法、移位运算,直到计数器Cn=0
过程
1. 将乘数寄存器Y的最低位,送入“控制逻辑”进行判断
2.
1||| 若Y的最低位为1,则执行加法,运算结果写回P
加法产生的进位需保存至进位触发器C
(P)+(X)→P
2||| 若Y的最低位为0,则什么也不做
3. 将【C,P ,Y】视为整体,逻辑右移一位
4. 计数器Cn减1
结束
计数器Cn=0
乘法运算的结果用 2n 位暂存(寄存器P、寄存器Y)
两个n位数相乘,乘积的位数不会超过2n位
在很多计算机架构中,通常仅保留低 n位作为乘积结果
溢出判断
若高n位(乘积寄存器P)不全为0,说明发生溢出
此时可将 0F标志位(溢出标志位)置为1
CF标志位通常记录无符号加减法是否溢出
OF被置为1时,CF也会被置为1
溢出处理
在乘法指令之后执行一条溢出自陷指令
该指令会检查 OF标志位,若OF==1,就执行操作系统的”异常处理程序“
注
该电路也支持有符号数的原码计算
原码
符号位单独处理
异或
数值位
取绝对值进行乘法计算
符号位不参与运算,最后用异或结果修改符号位
乘法运算可以通过以下两种方式实现
多次移位及加法指令循环
如果使用ALU实现加法、移位器实现移位
用 ALU 和移位器实现的乘运算通常采用串行的乘法算法
循环实现时每次都使用相同的总线,因此需要经过多个时钟周期实现
乘法器
乘法器是实现乘法运算的组合逻辑元件
可以把他看作一个算得更慢的 ALU
在数据通路中每个组合元件只是一个中间点,每个时钟周期内会经过多个元件,因此乘法器的计算需要在一个时钟周期内完成。
两种方式的时钟周期可能不同
提升乘法电路运算速度
1.
由ALU、移位器、寄存器、控制逻辑组成的乘法电路
该电路实现nbit无符号数相乘,至少需要n个时钟
改进:实现“两位乘法”
每轮处理乘积寄存器Y末尾2bit
n/2个时钟即可完成运算
2.
阵列乘法器
特点
可以在一个时钟内完成乘法运算
快速乘法器的一种
大多数快速乘法器都可以在一个时钟内完成乘法运算
带符号整数
注
n位二进制有符号定点整数,数值位只有n-1位,最高位为符号位
原码、补码、反码,同一个含义,不同编码方式表示
原码
特点
符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值
若机器字长n+1位,带符号整数的原码表示范围:
真值0有两种形式:
+0和-0
[+0]原=0,0000000:[-0]原 =1,0000000
原码的缺点:
符号位不能参与运算,需要设计复杂的硬件电路才能处理
反码
取反的结果等于(2^n - 1) - A
按位取反的数学本质就是:用最大值(全1)减去当前值
对于任意一个n位二进制数A,每一位取反,得到B
n位二进制数能表示的最大无符号整数是2^n-1(所有位都是1)
A与B的和在每一位都是1
补码
Tips:计算机内部,所有带符号整数的加、减法都要先转化为补码
实现加减运算统一
原理
位运算(取反+加1)和硬件行为(溢出截断)
利用模运算将负数表示为“模的补数”
减法 A−B被转换为 A+(2^n−B)mod 2^n

A、B各除以M后的余数相同,——B和A为模M同余
对于某一确定的模,某数A减去小于模的另一数B,可以用A加上一B的补码来代替
补码可以借助加法运算来实现减法运算
溢出
舍弃高位而保留低n位
本质:模运算
将一个多余n位的数除以2的n次方,保留其余数做结果的操作
如何求补码
正数
原码,反码,补码不变
负数
机算
原码↔反码
符号位不变,数值位取反
反码→补码
末位+1
手算
原码↔补码
从右往左找到第一个1,这个1左边的所有“数值位”按位取反
逆向转换方法一样
注
符号位不变
补码加法
从最低位开始,按位相加(符号位参与运算),并往更高位进位
补码减法
[A]补-[B]补=[A]补+[-B]补
已知数的补码,求其负值的补码
机算
[B]补↔[-B]补
全部位按位取反,末位+1
手算
从右往左找到第一个1,这个1左边的所有位(包括符号位)按位取反
注
包含符号位
计算机硬件如何做带符号数补码的减法
“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往更高位进位
注
补码的数值位不能解读为“位权“
计算机存储整数时通常以补码形式存储
补码表示唯一
设x为真值,x*为其绝对值,满足[-x*]补=[-x]补,
当x为0或为正数时,满足[-x*]补 =[-x]补
十六进制求补操作(二进制按位取反再+1)
1.从十六进制进制数的最低位向左找到第一个非0的数字。
2.该位右侧的 0 保持不变。
3.对于找到的非 0数字,该位结果为 16 减去该数字。
4.该位左侧的所有位的结果都为 15 减去这些位对应的数字
例
00008009H
FFFF7FF7H
80000000H
80000000H
123FF000H
EDC01000H
移码
定义
将每一个数组加上偏置常数,一般来说,当编码位数为n时,偏置取值2^(n-1)
[x]移=x+偏
真值加偏置
移码特点
真值0只有一种表现形式

移码和补码仅第一位不同
在补码的基础上将符号位取反
数值部分相同
补码↔移码
符号位取反
移码优点
主要用来表示浮点数的阶码,便于浮点数加减运算时的对阶操作
移码只能用于表示整数
表示范围(与补码相同)
若机器字长n+1位,移码整数的表示范围
特点
真值增大
移码表示的整数很方便用硬件电路对比大小
原反补码的特性对比

原码和反码的合法表示范围完全相同,都有两种方法表示真值0
补码、移码的合法表示范围比原码多一个负数,只有一种方法表示真值0
常见考点:
两个数A和B进行某种运算后,是否发生溢出?
手算做题可以带入十进制验证,是否超出合法范围
注
硬件负责计算,软件负责解释
计算机根本不知道什么是符号位!它眼里只有n位二进制数
当执行“取反加1”指令时,就是简单地对所有bit翻转再最低位+1。至于结果是正是负?那是人类解读规则的事。比如1111在无符号是15,在补码是-1——同一串01,解释权在人。

补码一位乘法
又被称为布斯(Booth)乘法
带符号数(补码)乘法,符号位参与运算
辅助位
初始值设为0
:黄色部分
开始
1. 将被乘数、乘数 分别放入寄存器X、Y
2. 乘积寄存器P 置为0,“辅助位”置为0
3. 计数器Cn的初始值置为 n(n 为乘数的位数)
判断
被乘数和乘数是否为全0
步骤
1. 将乘数寄存器Y的最低位、辅助位,2bit 送入“控制逻辑”进行判断
2. 根据寄存器Y的最低位、辅助位,决定是“+[x]补”“-[x]补”“+0”
辅助电路实现-[x]补的转换
3. 将【P Y, 辅助位】视为整体,算数右移一位
4. 计数器Cn减1
结束
溢出判断
若高 n+1 位不完全相同,说明发生溢出
此时可将 0F置为1
2.2定点数
定点数的表示
定点整数
符号位后用”,“
定点小数
定点小数的编码表示无移码
符号位后用”.“
定点数的运算
定点小数和定点整数区别

位权不同
位数扩展时,扩展位置不一样
定点小数
[x]原= 1.110 [x]原= 1.1100000
定点整数
[x]原= 1,110 [x]原= 1,0000110
定点数的移位运算
移位:
通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权
可用移位运算实现乘法、除法
算数移位
算数移位的对象是有符号数
移位操作的规则
特殊:原码
符号和数值分离
符号位 (0表示正,1表示负) 完全独立于数值位(真值的绝对值)
移位操作(作为算术运算)不应该改变数的符号
数值部分本质是无符号数
符号位不动,数值位逻辑右移/左移。
算数左移
实现X2
可能会产生溢出
原码、补码
负数补码=反码末位+1导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。
高位移出丢弃,低位补0
反码
负数是正数按位取反(包括符号位)
移位时需要保持这种取反关系的延续性
左移:
低位补1,高位舍弃
算数右移
实现/2
可能会丢失精度
反码,补码
符号位本身会向右移动一位
低位丢弃,高位补符号位
原码
符号位不动,高位补0,低位丢弃
移位后结果的溢出判断
主要针对算术左移
补码、反码
判断方法
移位后,新的符号位与移位前原符号位是否相同。
不同:发生了溢出,结果错误
特殊:原码
溢出判断方法
检查数值位左移时移出的最高位
移出的最高数值位 = 1
发生溢出。有效数字丢失,结果错误。
如果移出的最高数值位 = 0
没有溢出。结果正确(只要数值位本身不溢出
逻辑移位
将操作数视为无符号数,对“无符号数”算数移位
左移右移都添0
逻辑右移:高位补0, 低位舍弃。
若舍弃的位=0,则相当于➗2;
若舍弃的位≠0,则会丢失精度
逻辑左移:低位补0,高位舍弃。
若舍弃的位=0,则相当于X2;
若舍弃的位≠0,则会出现溢出
循环移位
不带进位位
用移出的位补上空缺
带进位位
移出的位放到进位位,原进位位补,上空缺


CF进位位

不带进位位的循环左移将最高位进入最低位和标志寄存器CF位。
适合用于把一个数据的高字节和低字节进行一个调换
注意:由于原、反、补码位数有限,因此某些时候算数移位不能精确等效乘法、除法
移位电路
触发器
补码定点数的加减法运算
[A+B]补=[A]补+[B]补(MOD M) [A-B]补=[A]补+[-B]补(MOD M) 为小数时M=2,为整数时M=2^(n+1)
符号拓展
正数
原有的符号位移到新的符号位,其他位补0
负数
原码与正数相同
补码
对于整数,原有符号位移到新符号位,附加位用1填充
对于小数,原有符号位移到新符号位,附加位用0填充
反码
原有符号位移到新符号位,附加位用1填充
零扩展
用0位扩展高位
适用于无符号整数
短数据--->长数据
溢出判断
溢出只有两种情况,上溢和下溢
采用一位符号位
设A的符号为As,B的符号为Bs,运算结果的符号为Ss,溢出逻辑表达式为
若V=0,表示无溢出
若V=1,表示有溢出
输入的符号相同
负溢出
两个负数相加(As=1,Bs=1),结果为正(Ss=0)
正溢出
两个正数相加(As=0,Bs=0),结果为负(Ss=1)
输入的符号不同
不同符号运算结果一定在 [最小负数, 最大正数] 之间,不会溢出
采用一位符号位,根据数据位进位情况判断溢出
根据数据位进位情况判断溢出
当最高有效位进位和符号位进位的值不相同时才产生溢出。
溢出逻辑表达式
符号位的进位Cs、最高数位的进位C1
V=Cs⊕C1
V=0,无溢出
V=1,有溢出
采用双符号位
采用双符号位时
第一符号位表示最终结果的符号
第二符号位表示运算结果是否溢出
记两个符号位为SS1⊕SS2
V=SS1⊕SS2
若V=0,表示无溢出
若V=1,表示有溢出
若发生正溢出(上溢),则双符号位为01
若发生负溢出(下溢),则双符号位为10
两个符号位是否相同
实际存储一个符号位,运算时会复制一个符号位
注:采用“双符号位”,当溢出发生时,可以挽救。更高的符号位是正确的符号位
三种溢出判别方法,均须有溢出判别电路,可用“异或”门来实现。
补充
双符号位补码
模4补码
模4补码具有模2补码的全部优点且更易检查加减运算中的溢出问题
存储模4补码仅需一个符号位
不会增加存储所需要的空间
任何一个正确的数值,模4补码的两个符号位总是相同的
只在ALU中采用双符号位
只在把两个模4补码的数送往ALU完成加减运算时,才把每个数的符号位的值同时送到ALU的双符号位中
单符号位补码
模2补码
原码除法运算
原码恢复除法运算
符号位单独处理
异或
数值位
取绝对值进行除法计算
思路:
上商0/1,得到余数,余数末尾补0
核心思想
通过 余数符号判断是否够减 (正数→够减,负数→不够减需恢复)。
寄存器变化
商寄存器(Q)的移位方向(左移)、余数寄存器(R)的修正逻辑。
ACC
被除数、余数
MQ
商
通用寄存器
除数
步骤
默认商1
求余数
余数减去除数
(ACC)-(除数)→ACC
-[Y补]
余数为负
改上商0
余数需修正
需加除数恢复余数
恢复余数
ACC、MQ整体“逻辑左移”
高位丢弃,低位补0
注:最后一步商余数为负,也需要恢复余数并商0
左移n次,上商n+1次
原码不恢复除法运算/原码加减交替除法运算


被除数减去除数,即 |x|+ [−|y|]补, 若结果为正,商1,左移,再减去除数; 若结果为负,商0,左移,加上除数。
只在最终余数为负时,才需要恢复余数
核心思想
通过 余数符号判断是否够减 (正数→够减,负数→不够减需恢复)。
寄存器变化
商寄存器(Q)的移位方向(左移)、余数寄存器(R)的修正逻辑。
在定点运算器中,无论是采用双符号位还是采用单符号位,必须有溢出判断电路,一般用异或门来实现
译码电路,编码电路不由运算器实现
并没有要求所有定点运算器都要有移位功能
小技巧:乘除法不用管过程,自己按十进制算然后再还原成补码就行了注意一下是否溢出就行了
强制类型转换
只要类型相同的才可以参与运算
无符号数和有符号数一起参与运算时
计算机按无符号数来解释最终结果
短类型向长类型转换
对阶
注
所有转化由系统自动进行的,这种转换通常称为隐式转换
定点整数的不同类型转换(考虑机器数)
位数相同
保证机器数不变
无符号数和有符号数转换
不改变数据内容,改变解释方式
注
负数存补码,解释补码
长→短
长整数变短整数
高位截取,低位保留
去掉高位,保留低位
b:0xffff7751→d:0x7751
去掉高位,保留低位
短→长
短整数变长整数
符号拓展
真值不变
根据短的类型判断
有符号数
符号扩展,高位补符号
无符号数
零扩展,高位补零
4 种类型数据的转换规律
char→int→long→double
float→double
精度、范围问题
精度
float→int→double
范围
int→float→double
范围、精度从小到大,转换过程没有损失
int → float:可能损失精度
不会发生溢出
但因尾数位数的关系,可能有数据舍入
double 型转换为 foat 型时亦是如此
int转换为 double 型则能保留精度
float →int:可能溢出及损失精度
小数部分被截断
1.5转化为int,要么1,要么2,取决于不同舍入方式
发生精度丢失
不属于溢出,因为在数据表示范围内
且由于 int 型的表示范围更小,还可能发生溢出。
double 1+11+52位 实际有效数值位53位(隐含1)
float 1+8+23
实际24位
int 1+31

例子
short i=si;
长---短
高位截取
j-1
有符号的-1(32个全1)解释为无符号数
i<=j-1
无符号数的比较,CF标志判断溢出
x和z为int型,y为short型
执行赋值语句z=x+y
x为int 型,y为short 型
需将y的类型强制转换为 int
执行赋值语句不改变x和y的值
判断关系表达式真假
结果是否发生溢出
精度是否发生丢失
注: C语言中定点整数是用“补码”存储的
数据的存储与排列
多字节数据在内存里一定是占连续的几个字节
数据的大端方式和小端方式
MSB最高有效字节
LSB最低有效字节
大端方式
MSB放在前面
低地址存放高位字节
便于人类阅读
小端方式
LSB放在前面
将最低有效字节存储在最小位置
便于机器处理
例
eg:4字节 int: 01 23 45 67 H
MSB 01
LSB 67
大端方式
地址从低到高:01 23 45 67 H
小端方式
地址从低到高:67 45 23 01 H
注
大小端是一个数据存储的方式
二维数组按照行优先,小端存放,a[0][0],a[0][1]……顺序
a[0][0]中数据以小端方式存放
数据按“边界对齐方式”存储
按边界存储
保证对一个字长数据的读/写只需要一次存储器访问即可完成
提高了访问效率
有时会导致存储空间的浪费
一种以空间换时间的方法
按边界对齐方式的存储要求
数据的存储地址是自身大小的整数倍
若字长32位,则半字长16位,双字长64位。
双字数据起始地址的最末三位为000(8字节的整数倍);
单字数据起始地址的最末二位为00(4字节的整数倍);
半字数据的起始地址的最末一位为0(2字节的整数倍)
2.3浮点数的表示与运算
IEEE 754标准
定义的浮点数格式
C语言float型
C语言double型
float单精度浮点型的存储
符号的存储
0正1负
尾数的存储
用原码表示
规定小数点位置在23bit之前
默认存储规格化尾数,小数点前的1省略(隐含)
规格化小数点前一定非0,二进制除了0就是1,因此可以隐含
增加尾数的实际精度
其他表述
尾数的保存
用原码定点小数
阶码的存储
用移码表示,规定偏置值为 127
2^(n-1)-1
补充
如何将十进制真值转换为偏置值为M的移码?
将十进制真值+偏置值
按“无符号整数”规则转换为指定位数
例:2+127=129→10000001
基数
不用专门存储,规定基数为2即可
double双精度浮点型的存储
尾数的存储
规定小数点位置在52bit之前
阶码的存储
用移码表示,规定偏置值为 1023
补充
如何将十进制真值转换为偏置值为M的移码?
将十进制真值+偏置值
按“无符号整数”规则转换为指定位数
2+1023=1025 →10000000001
规格化浮点数
特点
阶码
不全为0,也不全为1
规格化浮点数解读方法
符号:
0正1负
阶码
真值=按无符号整数解读阶码-偏置值
阶码的真值取指范围为-126~127
按照无符号数来解读阶码,取值为1——254,减掉偏置值127
阶码全为0、全为1留作特殊用途,需要按照特殊的方式去解读真值
尾数
小数点前面隐含一个1
溢出
溢出/上溢
正上溢
运算结果大于最大规格化正数时称为正上溢
负上溢
小于绝对值最大的规格化负数时称为负上溢
浮点数上溢(溢出)的处理
浮点数运算部件将运算结果设为设置为+∞或-∞
设置浮点数溢出异常标志位
例如X86会将浮点运算单元FPU的OE标志位置为1
浮点数下溢的处理
若结果落入非规格化区间
用非规格化浮点数存储
若结果太小(真值逼近于0)
按机器零存储
若下溢至机器零
设置浮点数下溢异常标志位
例如:x86会将FPU的UE标志位 Underflow Exception 置1
注意:下溢到机器零才是浮点数下溢异常,下溢到非规格化不会引起下溢异常
注
IEE754规定,默认不响应浮点数溢出异常,不中断程序,除非程序员手动开启此类异常响应
单双精度表示范围
真值0的表示
特点
阶码、尾数全为0
有+0,-0之分
非规格化浮点数
特点
阶码全为0,尾数不全为0
解读
阶码:固定解读为阶码的最小真值-126
阶码真值=1-偏置值
尾数:小数点前默认隐含的是0
非规格化正数的表示范围
绝对值最小的float非规格化正数
绝对值最大的float非规格化正数
注
负数将符号位改为1
非数NaN的表示
注
NaN代表“不是一个数”
运算结果为NaN的典型例子
0除以0
0.0f/0.0f
负数开根号
sqrt(-1.0f)
无穷减无穷
∞-∞
注
非零数值除以0
1.0f/0.0f
结果为+∞
-1.0f/0.0f
结果为-∞
IEEE754规定,非零数值除以0,结果为无穷,0除以0结果是NAN
规定
一些规定(短浮点数为例): 1. E=0且M=0,则真值为0 2. E=0且M≠0,为非规格化数,真值 = (−1)^s×0.M×2^−126 3. 1≤E≤254时,真值= (−1)s×1.M×2^(E−127) 4. E=255且M≠0时,真值为‘NaN’(非数值) 5. E=255且M=0时,真值为正无穷或负无穷(看符号位)
范围
float
double
浮点数的表示
浮点数的格式

S
取值为0或1
用来决定数X的符号
决定数值的正负性
M
M是一个二进制定点小数
称为数X的尾数
影响数值的精度
有效位数越多,表示精度就越高
在基数R一定的情况下,尾数M的位数反映数X的有效位数
E
二进制整数
数x的阶或指数
指数E的位数决定数X的表示范围,其值确定了小数点的位置
R
基数
K进制默认基数为K
可以的取值2,4,16等
规格化
确保尾数的最高位非0数位刚好在小数点之前
便于计算机存储
在浮点数总位数不变的情况下
阶码位数越多,尾数位数越少
表示的数的范围越大,精度越差(数变稀疏)
基数越大可表示范围大,但精度低
浮点数的规格化
规格化
尾数的最高数位必须是一个有效值。
左规
当浮点数运算的结果为非规格化时(数值位最高位无效时)要进行规格化处理
将尾数左移一位,阶码减1(基数为2时)
右规
若采用双符号位表示尾数,当运算结果尾数出现溢出(双符号位为01或10)时
将尾数右移一位,阶码加1(基数为2时)
原码规格化
尾数的最高数值位必须是1
小数点后一位有效
基数为2,后一位为1
基数为4时是后两位为不全为0的小数
正数的规格化形式为 0.1x...x
其最大值表示为0.11…1;最小值表示为0.10…0
尾数的表示范围为1/2≤M≤(1−2^ −n)
负数的规格化形式为 1.1x...x
最大值表示为1.10…0;最小值表示为1.11…1
尾数的表示范围为−(1−2^ −n)≤M≤−1/2
规格化浮点数的尾数M的绝对值应满足:1/r≤|M|≤1 如果r=2,则有1/2≤|M|≤1
补码的规格化
小数点后一位与符号位不同
规格化
补码算数左移,低位补0;补码算数右移,高位补1
浮点数的加减运算
浮点数运算
不仅要进行尾数的运算还要进行阶码的运算,并且运算还要进行规格化
浮点数加减运算步骤:
真值到机器数的转换
注意阶码、尾数采用什么码表示;注意符号扩展凑足规定位数
对阶
小阶向大阶看齐,尾数算数右移一位,阶码加1,直到阶码相同
对阶不存在阶码减小、尾数左移
注:
对阶可能导致丢失末位精度
不会导致阶码上溢或下溢(向一个合法的大阶看齐)
尾数加减
通常采用双符号位表示尾数, 这样可以挽救尾数溢出
规格化
左规
尾数最高数值位为无效位时,尾数左移,阶码减1
右规
尾数双符号位不同时,尾数右移,阶码加1
舍入
尾数的位数有限导致的问题,常用方法: 0舍1入、恒置1
浮点数舍入的情况有两种:
对阶
右规格化
注
舍入不一定产生误差,如向下舍入 11.00 到11.0时是没有误差的
溢出判断
阶码上溢
抛出异常(中断)
右规和尾数舍入过程,阶码加1而可能上溢
阶码下溢
按机器0处理
舍入方法
“0”舍“1”入法
尾数右移时
被移去的最高数值位为0,则舍去
被移去的最高数值位为1,则在尾数的末位加1
可能会使尾数又溢出,需再做一次右规
恒置“1”法
尾数右移时
不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1"
有使尾数变大和变小的两种可能
浮点数与定点数的区别
溢出
定点运算
当运算结果超出数的表示范围时,就发生溢出
浮点运算
判断浮点数运算是否溢出,取决于阶码是否上溢
运算结果超出尾数表示范围不一定溢出
尾数溢出时可能仅产生误差,结果不一定溢出
采用双符号位,可拯救尾数溢出
尾数上溢或下溢,可以通过左移或右移进行调整
规格化后阶码超出所能表示的范围时才发生溢出
阶码下溢可以通过非规格化数来表示
舍入
舍入是浮点数的概念,定点数没有舍入的概念
浮点数的密度问题
浮点数分布是不等距且稀疏的,越远离原点越稀疏
2.4算术逻辑单元ALU
ALU是运算器的核心
加法器是ALU的核心
加减乘除运算都是基于加法实现的
ALU
由组合逻辑电路构成
最基本的部件
并行加法器
往往将ALU和寄存器或暂存器相连
单纯的ALU不能够存储运算结果和中间变量
功能
算术运算:加、减、乘、除等
逻辑运算:与、或、非、异或等
辅助功能:移位、求补码、直送等

控制信号由控制单元CU发出的
Cin 是进位输入信号、Cout 是进位输出信号(类似于带标志位的加法器)
如果ALU支持k种功能,则控制信号位数
ALU的运算数、运算结果位数与计算机的机器字长相同
计算机的机器字长由ALU的运算位数决定
机器字长:计算机能够同时处理多少个比特的整数运算,ALU算术逻辑单元里面,可以支持同时输入多少个比特的信息

CU来解析指令的含义(加法、乘法、逻辑运算……)
解析完指令后会根据指令的含义发出一些控制信号
M来指明当前ALU要执行的是逻辑运算(M=1)还是算术运算(M=0)
S3~S0指明具体的运算
加法器
一位全加器
实现1bit的加法

串行加法器

如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器
效率低
一位全加器+进位触发器,只能一位一位地加
只有一个全加器,数据逐位串行送入加法器中进行运算
进位触发器保存”进位位“
寄存进位信号,参与下一次运算。
并行加法器
串行进位的并行加法器

串行进位
又称为行波进位
每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的
把n个全加器串接起来,就可进行两个n位数的相加
多个全加器简单串联,可多位同时加器
不足
进位信息串行产生
计算速度取决于进位产生和传递的速度
位数越多,运算速度越慢
进位信息产生速度会有延迟
电信号到达稳态需要一定时间
在串行进位的并行加法器中,影响加法器运算速度的关键因素——进位传递延迟
也有其他影响因素
串行进位的并行加法器
并行加法器
两个输入端允许并行输入nbit
串行进位加法器
进位信息串行产生的
并行进位的并行加法器
特点
运算速度比“串行进位的并行加法器,更快。
提高加法器的运算速度
各级进位信号同时形成,几乎没有延迟。
又称为先行进位、同时进位
并行加法器的优化
将电路复杂程度控制在4位
4位CLA加法器
由4个FA和一些新的线路、运算逻辑组成
单级先行进位方式

多级先行进位方式

在二进制加法(任意进制都是类似的)中,本位运算的结果不仅与参与运算的两数数值位有关,还和低位送来的进位有关。
在设计多位加法器时,为了加快运算速度而采用了快速进位链
快速进位链
对加法器的每位都生成两个信号
进位信号g
g=XiYi
进位传递信号p
p=Xi⊕Yi
补码加减运算器
注
运算结果只保留低位,最高位进位丢弃
为什么会有Cin/sub
[B]补到[-B]补
全部位按位取反、末位+1
但多路选择器MUX只是进行取反,还需要末位加一
加一由进位信息控制
多路选择器
实现转为补码
非门:全部按位取反
转为反码
Sub=1
Cin=1
进位信息1
该电路可实现
补码加减运算
无符号数加减运算
但二者的判断溢出的方式有所不同
标志位的生产来判断溢出
标志位的生成
ALU生成标志位时只负责计算,而不管运算对象是有符号数还是无符号数
当作无符号数时符号位读作数值位
CF=1表示当作无符号数运算时溢出,OF=1表示当作有符号数运算时溢出
标志位
用于表示本次运算结果的特征
这些标志信息通常会被送入 PSW 程序状态字寄存器
OF
含义:
用于判断带符号数的加减运算是否发生了溢出。
OF=1时,说明发生了溢出
硬件的计算方法:
OF=最高位产生的进位⊕(异或)次高位产生的进位
异或:相同为0,相异为1
注意: OF位对无符号数的加减法无意义
SF
含义:
有符号数加减运算结果的正负性
SF=0表示运算结果为正数
SF=1表示运算结果为负数
硬件的计算方法: SF =最高位的本位和
注意: SF位对无符号数的加减法无意义
仅对有符号数加减法有意义
ZF
含义:
表示运算结果是否为0。
ZF=1表示运算结果为0
ZF=0表示运算结果非0
硬件的计算方法:
两个数的运算结果为n bit, 只有n bit全为0时,ZF =1
或非门
即可判断有符号数,又可判断无符号数
CF
含义:
进位/借位标志,表示无符号数的加减法是否发生了进位或借位。
当CF=1时,说明无符号数的加减运算发生了进位或借位,发生了溢出
硬件的计算方法:
CF=最高位产生的进位⊕sub
sub=1表示减法
sub=0表示加法
最高位进位信息和输入加法器的进位信息异或
注: CF位对有符号数的加减法无意义
仅对无符号数加减法有意义
补充
逻辑门电路
基本逻辑运算
与或非
与 AND
表达式
Y=A·B
也可以简写为Y=AB
真值表
全为1才为1
门电路图形符号
输入端直线
或 OR
表达式
Y=A+B
真值表
全为0,才为0
门电路图形符号
输入端弧线
非NOT
表达式
真值表
0变1,1变0
门电路图形符号
圆圈在输入输出端均可
复合逻辑运算
与非、或非、异或、同或
与非 NAND(NOT-AND)
表达式
真值表
全1才为0
门电路图形符号
或非 NOR (NOT-OR)
表达式
真值表
全为0才为1
门电路图形符号
异或 XOR(exclusive OR)
表达式
真值表
相同为0,相异为1
两个输入相“异”时,输出为1
看有奇数/偶数个1
门电路图形符号
实质
用途
实现二进制加法
奇偶校验
用门电路求偶校验位
同或 XNOR(exclusive NOT-OR)
表达式
真值表
两个输入相“同”时,输出为1
门电路图形符号
对比
门电路的变形画法
逻辑运算的优先级
非>与>或
括号优先级更高
常见公式
逻辑表达式本质是对电路的数学化描述
多路选择器&三态门
多路选择器(MUX)
电路图
通常用“梯形”表示,有多个输入、一个输出、一个控制信号(梯形的更长的一边是输入端、更短的一边是输出端)
控制信号常用英文缩写“XXXop ”表示,图形常用“虚线箭头”
作用
在多个输入数据中,只允许其中一个数据通过MUX。
能对所有输入信号编码
有的多路选择器可能会预留一个控制信号,用于拦截所有输入
三态门
电路图
小三角,有一个输入、一输出、一个控制信号
三态门的控制信号通常只需要1bit
op=1表示允许数据通过
op=0表示不允许数据通过
高阻态
作用
根据控制信号决定是否让输入的数据通过
与非门区别
有无控制信号