杭杭州紫金港培训学校(紫金港专升本)
在职研究生计算机学科专业基础考前辅导第二章 计算机组成原理第 13 节 / 共 32 节约 30 分钟报名学员看全文

运算方法、运算电路与浮点数

掌握全加器、串行与先行进位加法器和 ALU,补码加减运算器与 ZF、SF、CF、OF 标志位的生成和溢出判断,乘除运算的基本原理与电路结构,C 语言整数运算的溢出;掌握 IEEE 754 单精度与双精度格式和浮点数加减运算的步骤。

本节考点:加法器与ALU补码加减运算标志位乘除运算IEEE754标准浮点数加减运算

本节导读

接着上一节,这一节讲「数据的表示和运算」的后半部分:运算方法和运算电路(加法器、ALU、补码加减运算器、标志位、乘除运算),整数和浮点数的运算,IEEE 754 标准。

这一节的题目分两类:一类是「给两个数,算结果和标志位」,一类是「给一个 32 位浮点数的机器码,求真值」或反过来。学完你应该能判断加减法的溢出、写出四个标志位,并能在十六进制机器码与浮点数真值之间互相转换。

加法器与 ALU

一位全加器的和与进位:

Si=Ai⊕Bi⊕CiS_i = A_i \oplus B_i \oplus C_iSi​=Ai​⊕Bi​⊕Ci​ Ci+1=AiBi+(Ai⊕Bi)CiC_{i+1} = A_iB_i + (A_i \oplus B_i)C_iCi+1​=Ai​Bi​+(Ai​⊕Bi​)Ci​

把 n 个全加器串起来,低位的进位依次传到高位,叫串行(行波)进位加法器,结构简单但慢,延迟与位数成正比。先行进位(并行进位)加法器设进位生成函数 Gi=AiBiG_i = A_iB_iGi​=Ai​Bi​、进位传递函数 Pi=Ai⊕BiP_i = A_i \oplus B_iPi​=Ai​⊕Bi​,则 Ci+1=Gi+PiCiC_{i+1} = G_i + P_iC_iCi+1​=Gi​+Pi​Ci​,逐级展开:

C1=G0+P0C0C_1 = G_0 + P_0C_0C1​=G0​+P0​C0​ C2=G1+P1G0+P1P0C0C_2 = G_1 + P_1G_0 + P_1P_0C_0C2​=G1​+P1​G0​+P1​P0​C0​

每个进位都只依赖 G、P 和 C0C_0C0​,可以同时算出,速度快。算术逻辑单元 ALU 以加法器为核心,再加上逻辑运算电路,由功能选择信号决定做哪种运算,它是组合逻辑电路,本身不能存储结果。

补码加减运算与标志位

补码运算的规则:[A+B]补=[A]补+[B]补[A + B]_{\text{补}} = [A]_{\text{补}} + [B]_{\text{补}}[A+B]补​=[A]补​+[B]补​,[A−B]补=[A]补+[−B]补[A - B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}}[A−B]补​=[A]补​+[−B]补​。补码加减运算器只用一个加法器:减法时控制信号 Sub = 1,B 的每一位经异或门取反,同时 Sub 作为最低位的进位输入,正好完成「取反加 1」。

运算后生成的标志位:

标志含义生成方法
ZF 零标志结果为 0结果各位全 0 时为 1
SF 符号标志结果为负(按带符号数看)等于结果的最高位
CF 进位/借位标志按无符号数运算是否越界CF = 最高位进位 ⊕\oplus⊕ Sub
OF 溢出标志按带符号数运算是否溢出OF = 最高位进位 ⊕\oplus⊕ 次高位进位

带符号数溢出的三种判断方法:两个同号数相加(或异号数相减)结果符号与之相反;最高位的进位与次高位的进位不同;用双符号位(变形补码)时,两个符号位为 01 表示正溢出、10 表示负溢出。异号数相加、同号数相减不会溢出。

乘除运算

原码一位乘法:符号位单独由两数符号异或得到,数值部分像手算一样「看乘数的一位,加被乘数或加 0,部分积右移一位」,共 n 步。补码一位乘法(Booth 算法)让符号位直接参加运算,每步看乘数相邻两位 yiyi+1y_iy_{i+1}yi​yi+1​(最低位后面附加一位 0):

yiyi+1y_iy_{i+1}yi​yi+1​操作
00 或 11部分积直接算术右移一位
01部分积加 [x]补[x]_{\text{补}}[x]补​,再算术右移一位
10部分积加 [−x]补[-x]_{\text{补}}[−x]补​,再算术右移一位

乘法电路的基本结构是:部分积寄存器、乘数寄存器(可右移)、被乘数寄存器、加法器和计数器,用加法和移位循环实现;速度要求高时用阵列乘法器。除法的基本原理是「上商、移位、减除数」:原码恢复余数法在余数为负时要先加回除数;不恢复余数法(加减交替法)余数为正时上商 1、左移后减除数,为负时上商 0、左移后加除数。除法电路由余数寄存器、商寄存器(可左移)、除数寄存器、加法器和计数器组成。

C 语言的整数运算按位数取模:32 位 int 的乘法结果超出范围时只保留低 32 位,不报错;无符号数做 2n2^{n}2n 取模的运算。整数除以 2k2^{k}2k 可以用移位实现,但负数算术右移是向下取整,C 语言的除法是向 0 取整,编译器会先加一个偏置再移位。

IEEE 754 浮点数

浮点数写成 (−1)s×1.f×2e−偏置(-1)^{s} \times 1.f \times 2^{e - \text{偏置}}(−1)s×1.f×2e−偏置:

格式符号 s阶码 e尾数 f偏置
单精度 float1 位8 位23 位127
双精度 double1 位11 位52 位1023

本节后面还有约 1637 字:报名学员看全文

每门课前 10 节免费看全文;从第 11 节起,完整教程要报名后由顾问在后台为你的账号开通才能看。

题库账号可以直接登录,但第 11 节起的完整教程要报名后由后台开通才能看。

学完练一练

按本节考点从本课的课后练习里抽题(每次 10 道以内),做完看解析、错题自动进错题本。第 11 节起的课后练习报名学员才能练。

本节内容由 AI 辅助编写,配图由 AI 生成,仅供备考参考;考试要求以《全国各类成人高等学校招生考试大纲(2024 年版)》及浙江省教育考试院当年公布为准。

我要提问免费报名咨询