运算器组成
Q: 运算器由哪些部件组成?
A: 运算器由 算术逻辑单元 (ALU)、移位器、状态寄存器 (PSW) 和 通用寄存器组 等组成。
补充细节:
- ALU:算术逻辑单元,是运算器的核心,负责算术和逻辑运算。
- 移位器:负责移位操作,包括逻辑移位和算术移位。
- 状态寄存器 (PSW):存储运算结果的标志位,比如进位标志 (CF)、溢出标志 (OF)、符号标志 (SF)、零标志 (ZF) 等。
- 通用寄存器组:存储操作数、中间结果和最终结果。
运算器功能
Q: 运算器有哪些基本功能?
A: 运算器的基本功能包括 加减乘除四则运算、与或非异或等逻辑运算、移位和求补操作。
补充细节:
- 加法运算:其他运算的基础,例如减法可以通过加减数的补码来实现。
- 逻辑运算:对数据进行逻辑操作,例如与、或、非、异或等。
- 移位运算:对数据进行位移操作,例如左移和右移,分为逻辑移位和算术移位。
- 求补运算:求一个数的补码,常用于补码加减运算。
ALU 概述
Q: 什么是 ALU?
A: 算术逻辑单元 (ALU) 是一种功能强大的组合逻辑电路,能进行多种算术和逻辑运算。
补充细节:
- ALU 通常由 加法器、逻辑门电路、多路选择器 等组成。
- ALU 既能执行算术运算 (加减乘除),也能执行逻辑运算 (与或非异或)。
- ALU 的操作由 操作控制信号 (ALUop) 控制,ALUop 的位数决定了 ALU 的操作种类。
带标志加法器
Q: 带标志加法器有什么作用?可以生成哪些标志信息?
A: 带标志加法器在无符号数加法器的基础上增加了逻辑门电路,不仅能计算和/差,还能生成以下标志信息:
补充细节:
- 溢出标志 (OF)
- 符号标志 (SF)
- 零标志 (ZF)
- 进位/借位标志 (CF)
- 这些标志信息可以帮助判断运算结果的性质,例如是否溢出、结果的符号、结果是否为零等。
定点数的移位运算
Q: 定点数的移位运算有哪些类型?它们分别有什么规则?
A: 定点数的移位运算分为 逻辑移位 和 算术移位 两种。
补充细节:
- 逻辑移位:将操作数视为无符号整数。
- 左移:高位移出,低位补 0。
- 右移:低位移出,高位补 0。
- 例如,对无符号数 101101 进行逻辑左移一位,结果为 011010;逻辑右移一位,结果为 010110。
- 算术移位:将操作数视为有符号整数,采用补码进行。
- 左移:高位移出,低位补 0,若移出的高位与符号位不同,则发生溢出。
- 右移:低位移出,高位补符号位,若移出低位的 1,则影响精度。
- 例如,对补码 110101(代表 -11)进行算术左移一位,结果为 101010(代表 -22);算术右移一位,结果为 111010(代表 -6)。
定点数的加减运算
补码加减运算
Q: 补码加减运算的公式是什么?
A: 设机器字长为 n+1 位,则:
- 加法:
[A + B]补 = [A]补 + [B]补 (mod 2^(n+1)) - 减法:
[A - B]补 = [A]补 + [-B]补 (mod 2^(n+1))
补充细节: - 补码加减运算在计算机中实现起来比较简单,所以被广泛采用。
- 补码运算的特点:
- 按二进制运算规则运算,逢二进一。
- 加法时,两个数的补码直接相加;减法时,将被减数与减数的负数补码相加。
- 符号位与数值位一起参与运算,结果的符号位也在运算中直接得出。
- 最终结果的高位丢弃,保留 n+1 位,结果也是补码形式。
Q: 补码运算有哪些特点?
A: 1) 按二进制运算规则运算,逢二进一。2) 若做加法,两个数的补码直接相加;若做减法,则将被减数与减数的负数补码相加。3) 符号位与数值位一起参与运算,加、减运算结果的符号位也在运算中直接得出。4) 最终运算结果的高位丢弃,保留 n+1 位,运算结果亦为补码。
补充细节:
- 这些特点使得补码运算在计算机中实现起来非常方便。
补码加减运算电路
Q: 补码加减运算电路是如何实现的?
A: 补码加减运算电路通过一个加法器和一个控制信号 Sub 来实现。
补充细节:
- 当 Sub 为 1 时,执行减法运算,将减数的补码加到被减数上。
- 当 Sub 为 0 时,执行加法运算。
定点数的乘除运算
乘法运算
Q: 原码乘法的特点是什么?
A: 原码乘法的特点是 符号位与数值位是分开求的,乘积的符号位由两个乘数的符号位 “异或” 得到,乘积的数值位是两个乘数的绝对值之积。
补充细节:
- 可以将乘法运算分解成一系列的加法和移位操作来实现。
- 两个 n 位无符号数相乘,需要进行 n 次加法和 n 次移位运算。
乘法运算电路
Q: 乘法运算电路通常由哪些部件组成?
A: 乘法运算电路通常由 加法器、移位器、乘积寄存器、控制逻辑 等组成。
补充细节:
- 控制逻辑负责控制循环次数、加法和移位操作。
除法运算
Q: 原码除法运算的步骤是什么?
A: 原码除法运算需要将 符号位和数值位分开处理,商的符号位是两个数的符号位的 “异或” 结果,商的数值位是两个数的绝对值之商。
补充细节:
- 可以将除法运算分解成一系列的减法和移位操作来实现。
- 通过被除数 (中间余数) 减去除数来得到每一位商,够减上商 1,不够减上商 0。
除法运算电路
Q: 除法运算电路通常由哪些部件组成?
A: 除法运算电路通常由 加法器、移位器、余数寄存器、商寄存器、控制逻辑 等组成。
补充细节:
- 控制逻辑负责控制循环次数、减法和移位操作。
运算器标志位
Q: 运算器有哪些常用的标志位?它们分别有什么作用?
A: 运算器常用的标志位包括 零标志 (ZF)、溢出标志 (OF)、符号标志 (SF)、进位/借位标志 (CF)。
补充细节:
- 零标志 (ZF):结果为 0 时,ZF = 1,否则 ZF = 0。用于判断运算结果是否为零,对无符号数和有符号数运算都有意义。
- 溢出标志 (OF):有符号数运算溢出时,OF = 1,否则 OF = 0。用于判断有符号数运算是否溢出,对于无符号数运算没有意义。
- 符号标志 (SF):结果为负数时,SF = 1,否则 SF = 0。用于表示运算结果的符号,对于无符号数运算没有意义。
- 进/借位标志 (CF):无符号数加法产生进位或减法产生借位时,CF = 1,否则 CF = 0。用于表示无符号数运算时的进位/借位,判断是否发生溢出,对于有符号数运算没有意义。
运算器溢出判断
Q: 什么是溢出?8 位有符号数的表示范围是多少?如果将两个 8 位有符号数 127 和 1 相加,会发生什么?
A: 运算结果超出了数据类型的表示范围,导致结果错误。8 位有符号数的表示范围是 -128 到 127。如果将两个 8 位有符号数 127 和 1 相加,会发生溢出。
补充细节:
- 例如,8 位有符号数的表示范围是 -128 到 127,如果运算结果超出了这个范围,就会发生溢出。
- 127 + 1 = 128,超出了 8 位有符号数的表示范围,所以会发生溢出。
- 溢出意味着运算结果不正确,需要进行特殊处理。
无符号数和有符号数乘法指令的溢出判断
Q: 假设有两个 4 位无符号数 15 和 3 相乘,如何判断结果是否溢出?假设有两个 4 位有符号数 7 和 2 相乘,如何判断结果是否溢出?
A: - 对于无符号数乘法,如果高 n 位全为 0,则不溢出,否则溢出。
- 例如,15 * 3 = 45,二进制表示为 101101,高 4 位不是全为 0,所以溢出。
- 对于有符号数乘法,如果高 n+1 位相同,则不溢出,否则溢出。
- 例如,7 * 2 = 14,二进制表示为 001110,高 5 位不相同,所以溢出。
无符号数大小的比较和有符号数大小的比较
Q: 如何比较无符号数 A 和 B 的大小?如何比较有符号数 A 和 B 的大小?
A: - 对于无符号数,可以通过比较进位标志 CF 来判断大小。
- 例如,假设 A = 10 (1010) B = 5 (0101),则 A - B = 5 (0101) ,ZF = 0,CF = 0,所以 A > B。
- 对于有符号数,需要综合考虑溢出标志 OF 和符号标志 SF 来判断大小。
- 例如,假设 A = 7 (0111) B = -2 (1110),则 A - B = 9 (1001) ,ZF = 0,OF = 1, SF = 1,所以 A > B。