🏷️ 知识点:补码

共 30 道相关题目

2024 年第 12 题 组成原理 选择题

C 语言代码如下:

int i = 32777;

short si = i;

int j =si;

执行上述代码段后,j 的 值 为 ( ) 。

A.-32777

B.-32759

C.32759

D.32777

[tag_link]

正确答案:B

int i=32777 ,赋值给 short 后,由于 short 只有 16 位,则只会保留 i 的低 16 位,同时,short 的上限为 2 15 − 1 即 32767,所以 32777 在 short 类型的变量中会出现数据溢出问题,32777=32767+9,则溢出后的二进制补码为 1000000000001001。再将此数转为 int,此时将进行符号扩展,补高 16 位的时候取决于当前 short 的符号位,若符号位为 1,则高 16 位补 16 个 1,若符号位为 0,则高 16 位补 16 个 0,所以本题补 16 个 1,结果为补码 1111 …. 1000 0000 0000 1001,换算成原码再计算,选 B。或者使用排除法,最终通过补码的最高位 1 可以断定该数为负数,A、B 里面选,32777 对于 short 已经溢出,转为 short 再符号扩展,并不只是单纯地改变子符号,故排除 A,选 B。


模拟卷 年第 13 题 组成原理 选择题

如果某单精度浮点数、某原码、某补码、某移码的 32 位机器数均为 0xF0000000,这些数从大到小的顺序是( )。

A. 浮点数>原码>补码>移码 B. 浮点数>移码>补码>原码 C. 移码>原码>补码>浮点数 D. 移码>补码>原码>浮点数

补码

[tag_link]

正确答案:D

首先,将32位机器数0xF0000000转换为二进制:1111 0000 0000 0000 0000 0000 0000 0000。 然后分别计算四种表示法对应的真值。

对于单精度浮点数(IEEE 754格式),符号位s=1,指数e=11100000(二进制,即224),尾数f全为0。 实际指数E=e-127=97,故浮点数值为(-1)^1×1.0×2^97 = -2^97,这是一个非常大的负数。

对于原码表示,符号位为1表示负数,数值位为后31位(111000…000),其绝对值为2^30+2^29+2^28=7×2^28,故原码值为-7×2^28。

对于补码表示,最高位为1表示负数,其值计算公式为-2^31+(其他位数值)。 其他位数值同样为7×2^28,故补码值为-2^31+7×2^28 = -2^28。

对于移码表示,通常偏移量为2^31,机器数作为无符号整数时值为2^31+2^30+2^29+2^28=15×2^28,真值为无符号值减2^31,即15×2^28-2^31=7×2^28,这是一个正数。

比较四个值:移码值7×2^28为正数最大; 补码值-2^28为负数但大于原码值-7×2^28(因为-2^28 > -7×2^28); 浮点数值-2^97是绝对值最大的负数,故最小。 因此从大到小顺序为移码>补码>原码>浮点数,对应选项D。


模拟卷 年第 13 题 组成原理 选择题

一个 8 位的二进制整数,若采用补码表示,且由 3 个“1”和 5 个“0”组成,则最小值为( )。

A. -127 B. -32 C. -125 D. -3

补码

[tag_link]

正确答案:C

在 8 位补码表示中,最高位是符号位:0 表示正数,1 表示负数。

由于要求最小值,该数必为负数,因此符号位必须为 1。 已知该数由 3 个“1”和 5 个“0”组成,因此符号位占用一个“1”,剩余 7 位由 2 个“1”和 5 个“0”组成。

补码表示中,负数的值计算公式为:

要使得数值最小,需要剩余 7 位的无符号值尽可能小。

剩余 7 位中,无符号值最小的情况是将两个“1”放在最低位(即第 0 位和第 1 位),此时剩余 7 位二进制为 `0000011`,对应的无符号值为 3。 因此整个 8 位二进制数为 `10000011`。

计算数值:

即选项 C。

验证其他选项:

  • `-127` 的补码为 `10000001`,只有 2 个“1”,不符合条件; >
  • `-32` 的补码为 `11100000`,虽符合 3 个“1”和 5 个“0”,但值为 `-32`,大于 `-125`; >
  • `-3` 的补码为 `11111101`,有 7 个“1”,不符合条件。 >

因此,最小值为 `-125`。 >


模拟卷 年第 13 题 组成原理 选择题

在补码表示的机器中,若寄存器 R 中原来存的数为 9EH,执行一条指令后现存的数为 CFH,则表明该指令不可能是( )。

A. XOR 异或运算指令 B. IMUL 有符号数乘法指令 C. SAR 算术右移指令 D. ADD 加法指令

补码 标志寄存器

[tag_link]

正确答案:B

寄存器 R 原存 9EH(二进制 1001 1110,补码表示有符号数 -98),执行后变为 CFH(二进制 1100 1111,补码表示有符号数 -49)。 分析各指令的可能性:

  • A. XOR 异或运算指令:存在操作数 51H(0101 0001),使得 9EH XOR 51H = CFH,因此该指令可能。 >
  • B. IMUL 有符号数乘法指令:若将寄存器值视为有符号数,从 -98 变为 -49,需满足 -98 × Y = -49,但 Y = 0.5 不是整数; > 若考虑乘法后取低 8 位(模 256),需解同余方程 158Y ≡ 207 (mod 256),由于 gcd(158,256)=2 而 207 是奇数,方程无解,故该指令不可能。 >
  • C. SAR 算术右移指令:算术右移一位时,9EH(1001 1110)右移后符号位填充 1,得到 CFH(1100 1111),且 -98 算术右移一位等价于除以 2 得 -49,因此该指令可能。 >
  • D. ADD 加法指令:存在操作数 31H,使得 9EH + 31H = CFH(-98 + 49 = -49),因此该指令可能。 >

综上,指令不可能是 IMUL 有符号数乘法指令。 >


模拟卷 年第 13 题 组成原理 选择题

已知 C 程序中,某类型为 int 的变量 x 的值为 -1088。程序执行时,x 先被存放在 16 位寄存器 R1 中,然后被进行算术右移 4 位的操作。则此时 R1 中的内容(以十六进制表示)是( )。

A. FBCOH B. FFBCH C. 0FBCH D. 87BCH

补码 寄存器类型

[tag_link]

正确答案:B

首先,变量 x 的值为 -1088,在 16 位寄存器中采用二进制补码表示。 1088 的十六进制表示为 0x0440,对其取反加一得到 -1088 的表示:0xFFFF - 0x0440 + 1 = 0xFBBF + 1 = 0xFBC0。 因此,寄存器 R1 初始内容为 0xFBC0。

执行算术右移 4 位时,由于符号位为 1,左移空出的高位补 4 个 1。 原始值 0xFBC0(二进制 1111 1011 1100 0000)右移 4 位后,低 4 位丢弃,高 4 位补 1,得到 1111 1111 1011 1100,即十六进制 0xFFBC。

另一种验证方式:算术右移 4 位等价于除以 16。 计算 -1088 / 16 = -68,而 -68 的 16 位二进制补码表示为 0xFFBC(68 为 0x0044,取反加一得 0xFFBC)。 因此,移位后 R1 的内容为 0xFFBC。

选项 A 为原始值,选项 C 和 D 均为正数表示,与结果不符,故正确答案为 B。


模拟卷 年第 13 题 组成原理 选择题

已知 ,计算机的机器字长为 8 位二进制编码,则 为(  )。

A. 8CH B. 18H C. E3H D. F1H

补码

[tag_link]

正确答案:C

已知 ,机器字长为 8 位,8CH 对应的二进制为 1000 1100。 由于最高位为 1,因此 为负数。 在补码运算中,除以 4 可通过算术右移两位实现。 对于负数,算术右移时高位补 1。 将 1000 1100 算术右移一位得 1100 0110,再右移一位得 1110 0011,即十六进制 E3H。 因此, 为 E3H。 题目中虽写为 ,但根据选项和计算,实际应为 ,故正确答案为 E3H。


2010 年第 13 题 组成原理 选择题

假定有4个整数用8位补码分别表示 r1=FEH,r2=F2H,r3=90H,r4=F8H, 若将运算结果存放在 一个8位寄存器中,则下列运算中会发生溢出的是()。

A.r1×r2 B.r2×r3 C.r1×r4 D.r2×r4

[tag_link]

正确答案:B

本题的真正意图是考查 补码表示 的表示范围,而不是补码的乘法运算。

若采用补码乘法规则计算出 4 个选项,是费力不讨好的做法,而且极容易出错。

8 位补码所能表示的整数范围为 -128~+127。

将 4 个数全部转换为十进制:r1=-2,r2=-14,r3=-112,r4=-8,得 r2×r3=1568,远超出了表示范围,发生溢出。


2014 年第 13 题 组成原理 选择题

若 x=103,y=-25, 则下列表达式采用8位定点补码运算实现时,会发生溢出的是()。

A.x+y

B.-x+y

C.x-y

D.-x-y

[tag_link]

正确答案:C

8 位 定点补码 表示的数据范围为 -128~127,若运算结果超出这个范围则会溢出,A 选项 x+y=103-25=78,符合范围,A 排除;B 选项-x+y=-103-25=-128,符合范围,B 排除;D 选项-x-y=-103+25=-78,符合范围,D 排除;C 选项 x-y=103+25=128,超过了 127,选 C.


2018 年第 13 题 组成原理 选择题

假定带符号整数采用补码表示,若int 型变量x 和y 的机器数分别是FFFF FFDFH和00000041H, 则 x、y的值以及X-y的机器数分别是()。

A.x=-65,y=41, x-y的机器数溢出

B.x=-33,y=65,x -y 的机器数为FFFFFF9DH

C.x=-33,y=65, x-y的机器数为FFFFFF9EH

D.x=-65,y=41, x-y的机器数为FFFFFF96H

[tag_link]

正确答案:C

利用 补码转换成原码的规则 :负数符号位不变数值位取反加 1;正数补码等于原码。两个机器数对应的原码是 [x]原 = 80000021H,对应的数值是 -33,[y]原=[y]补=00000041H=65。排除 A、D 选项。x-y 直接利用补码减法准则,[x]补-[y]补 =[x]补+[-y]补,-y 的补码是连同符号位取反加 1,最终减法变成加法,得出结果为 FFFFFF9EH。


2019 年第 13 题 组成原理 选择题

考虑以下C 语言代码:

unsigned short usi = 65535; short si =usi;

执行上述程序段后,si 的 值 是 ( ) 。

A. -1 B. -32767 C. -32768 D. -65535

[tag_link]

正确答案:A

unsigned short 类型为 无符号 短整型,长度为 2 字节,因此 unsigned short usi 转换为二进制代码即 1111 1111 1111 1111。short 类型为短整型,长度为 2 字节,在采用 补码 的机器上 short si 的二进制代码为 1111 1111 1111 1111,因此 si 的值为 -1,所以选 A。


2020 年第 13 题 组成原理 选择题

已知带符号整数用补码表示,float 型数据用 IEEE 754 标准表示,假定变量 x 的类型只能是 int 或 float 。 当 x 的机器数为 C8000000H 时 ,x 的值可能是()。

A.-7×227; B.-216; C.217; D.25×2²7;

[tag_link]

正确答案:A

C800 0000H = 1100 1000 0000 0000 0000 0000 0000 0000 将其转换为对应的 float 或 int: 为 float 型时,尾数隐藏最高位 1 ,数符为 1 表示负数,阶码 10010000 = 2 7 + 2 4 = 128 + 16 , 再减去偏置值 127 得到 17 ,算出 x 值为 − 2 17 。为 int 型时,带符号补码,为负数,数值部分取反加 1 ,得 011 1000 0000 0000 0000 0000 0000 0000 ,算出 x 值为 − 7 × 2 27 。


2021 年第 13 题 组成原理 选择题

已知带符号整数用补码表示,变量x,y,z 的机器数分别为FFFDH,FFDFH,7FFCH, 下列结论中, 正确的是()。

A. 若x 、y和z 为无符号整数,则z<x<y

B. 若x 、y和z 为无符号整数,则x<y<z

C. 若x 、y 和 z 为带符号整数,则x<y<

D. 若x 、y和z 为带符号整数,则y<x<Z

[tag_link]

正确答案:D

若 x, y 和 z 均为 无符号整数 ,则 x > y > z,A 和 B 错误。若 x, y 和 z 均为带符号整数,补码的最高位是符号位,0 表示正数,1 表示负数,因此 z 为正数,而 x 和 y 为负数。对于 x 和 y 的比较,数值位取反加一,可知 x = -3H,y = -21H,故 x > y。


2022 年第 13 题 组成原理 选择题

32位补码所能表示的整数范围是()。

A.-2³²~2³¹-1

B.-2³¹~2³¹-1

C.-2³²~2³²-1

D.-2³¹~2³²-1

[tag_link]

正确答案:B

32 位 补码 的最大值为 0x7fffffff = 2 31 − 1 (最高位为 0,其他位为 1),最小值为 0x80000000 = − 2 31 (最高位为 1,其他位为 0)。


2023 年第 13 题 组成原理 选择题

若 short 型变量x=-8190, 则 x 的机器数为()。

A.E002H

B.E001H

C.9FFFH

D.9FFEH

[tag_link]

正确答案:A

机器数是计算机内部用来表示和存储数值的二进制形式。对于有符号的 short 型变量, 通常采用 16 位 补码 表示法。对于给定的 short 型变量 x=-8190,我们需要将其转换为二进制的补码表示。首先,将数值 8190 转换为二进制形式:8190 = 0001 1111 1111 1110B,然后取其二 进制补码(负数取反后加 1),补码为 1110 0000 0000 0010B,转化为 16 进制为 E002H。因此 正确选项为 A。


模拟卷 年第 14 题 组成原理 选择题

单精度 IEEE754 标准规格化的 float 类型所能表示的最接近 0 的负数是( )。

A. B. C. D.

补码

[tag_link]

正确答案:A

单精度 IEEE754 浮点数采用 32 位表示,包含 1 位符号位、8 位指数位和 23 位尾数位。

规格化数的指数位不全为 0 也不全为 1,实际指数 (其中 为指数位的无符号值),范围在 之间; 尾数部分隐含最高位 1,即实际尾数 为尾数位表示的小数)。 规格化负数的值为:

最接近 0 的负数需绝对值最小,因此应取最小指数 (对应 )和最小尾数 (对应 )。

代入公式得:

即选项 A。

选项 B 和 C 涉及因子

,对应于非规格化数(指数 时尾数无隐含 1),不符合本题要求的规格化数条件;

选项 D 的指数 低于规格化指数最小值 ,不符合规格化规则。 因此,只有 A 正确。


模拟卷 年第 14 题 组成原理 选择题

下列叙述中正确的是( )。 Ⅰ. 定点补码运算时,其符号位不参加运算 Ⅱ. 浮点运算可由阶码运算和尾数运算两部分组成 Ⅲ. 阶码部件在乘除运算时只进行加、减操作 Ⅳ. 浮点数的正负由阶码的正负符号决定 Ⅴ. 尾数部件只进行乘除运算

A. Ⅰ、Ⅱ和Ⅲ B. Ⅰ、Ⅱ和Ⅴ C. Ⅱ、Ⅲ和Ⅳ D. Ⅱ和Ⅲ

补码

[tag_link]

正确答案:D

叙述Ⅰ错误:定点补码运算时,符号位参与运算。 > 补码表示法允许符号位与数值位一同进行算术运算,无需单独处理符号,这是补码的优势之一。 >

叙述Ⅱ正确:浮点运算通常包括阶码运算和尾数运算两部分。 > 例如浮点加法需要对阶(调整阶码)、尾数相加和规范化等步骤,涉及这两部分的协调操作。 >

叙述Ⅲ正确:在浮点乘除运算中,阶码部件执行加减操作。 > 乘法时阶码相加,除法时阶码相减,因此阶码运算仅限于加减。 >

叙述Ⅳ错误:浮点数的正负由尾数的符号位决定,而非阶码。 > 阶码表示指数,常用移码表示,其符号不影响整个数的正负。 >

叙述Ⅴ错误:尾数部件不仅进行乘除运算,还进行加减运算。 > 例如浮点加减法需对尾数进行加减操作,因此尾数部件功能不限于乘除。 >

综上,仅叙述Ⅱ和Ⅲ正确,对应选项 D。 >


模拟卷 年第 14 题 组成原理 选择题

设浮点数的基数为 4,尾数用原码表示,则以下( )是规格化的数。

A. 1.001101 B. 0.001101 C. 1.011011 D. 0.000010

补码

[tag_link]

正确答案:C

对于基数为 4 的浮点数,规格化要求尾数的绝对值满足 1/4 ≤ |m| < 1。

尾数用原码表示,选项中第一位为符号位(1 表示负,0 表示正),数值部分为小数点后的二进制序列。

首先检查各选项数值部分的绝对值或基 4 表示。 基数为 4 时,每个基 4 数字对应两个二进制位,规格化要求第一个基 4 数字不为零,即数值部分的前两个二进制位不能全为 0。

  • A 选项:数值部分 .001101,前两位为 00,对应基 4 数字 0,绝对值约为 0.203125 < 1/4,不规格化。
  • B 选项:数值部分 .001101,前两位为 00,对应基 4 数字 0,绝对值约为 0.203125 < 1/4,不规格化。
  • C 选项:数值部分 .011011,前两位为 01,对应基 4 数字 1,绝对值约为 0.421875 ≥ 1/4,且小于 1,满足规格化条件。
  • D 选项:数值部分 .000010,前两位为 00,对应基 4 数字 0,绝对值约为 0.03125 < 1/4,不规格化。

因此,只有 C 选项是规格化的数。


模拟卷 年第 14 题 组成原理 选择题

按 IEEE754 标准规定的 32 位浮点数(单精度浮点数)41A4C000H 对应的十进制数是( )。

A. 4.59375 B. -20.59375 C. -4.59375 D. 20.59375

补码

[tag_link]

正确答案:D

首先,将十六进制数 `41A4C000H` 转换为二进制:

0100 0001 1010 0100 1100 0000 0000 0000

按照 IEEE754 单精度浮点数格式:

  • 第 1 位为符号位 ; >
  • 第 2–9 位为指数位 (8 位); >
  • 第 10–32 位为尾数位 (23 位)。 >

具体分析如下:

  • 符号位 ,表示正数。 >
  • 指数位 ,转换为十进制为 。 > IEEE754 中指数采用偏置表示,偏置量为 ,因此实际指数
  • 尾数位 ,表示小数部分。 > 计算 的十进制值:对应二进制小数位中, 为 1,其余为 0,求和得 IEEE754 中尾数包含隐含的 1,因此实际尾数

浮点数的值为

因此,对应的十进制数为 ,选项 D 正确。


模拟卷 年第 14 题 组成原理 选择题

下列关于浮点数的说法中,正确的是( )。

A. II、III 和 V B. II 和 III C. I、II 和 III D. II、III 和 IV

补码

[tag_link]

正确答案:B

本题考查浮点数的运算。 最简单的舍入处理方法是直接截断,不进行任何其他处理(截断法),Ⅰ错误。 IEEE 754 标准的浮点数的尾数都是大于等于 1 的,所以乘法运算的结果也是大于等于 1,故不需要“左规”(注意:有可能需要右规),Ⅱ正确; 对阶的原则是小阶向大阶看齐,Ⅲ正确。 当补码表示的尾数的最高位与尾数的符号位(数符)相异时表示规格化,Ⅳ错误。 浮点运算过程中,尾数出现溢出并不表示真正的溢出,只有将此数右归后,再根据阶码判断是否溢出,Ⅴ错误。

注意:浮点数运算的过程分为对阶、尾数求和、规格化、舍入和溢出判断,每个过程的细节均需掌握,本题的 5 个选项涉及到了这 5 个过程。


模拟卷 年第 14 题 组成原理 选择题

下列关于机器零的说法,正确的是( )。

A. 发生“下溢”时,浮点数被当做机器零,机器将暂停运行,转去处理“下溢” B. 只有以移码表示阶码时,才能用全 0 表示机器零的阶码 C. 机器零属于规格化的浮点数 D. 定点数中的零也是机器零

补码

[tag_link]

正确答案:B

【解析】本题考查机器零。 只有当数据发生“上溢”时,机器才会终止运算操作,转去进行溢出处理,A 错误。 规格后化可以判断运算结果是否上溢出(超过表示范围),但和机器零没有关联,规格化规定尾数的绝对值应大于或等于 1/R(R 为基数),并小于或等于 1,机器零显然不符合这个定义,C 错误。 定点数中所表示的 0,是实实在在的 0(坐标轴上的),而不是趋近 0 的机器零,D 错误。 在各种数码的表示法中,移码相当于真值在坐标轴上整体右移至正区间内,当移码表示的阶码全 0 时,为阶码表示的最小负数,此时直接认为浮点数是机器零,B 正确。

注意:当浮点运算结果在 0 到最小正数之间(正下溢)或最大负数到 0 之间(负下溢)时,浮点数值趋于 0,计算机将其当做机器零处理。


模拟卷 年第 14 题 组成原理 选择题

在 C 语言中,若有如下定义:

A. 7.500000 B. 7 C. 7.000000 D. 8

补码

[tag_link]

正确答案:A

首先计算表达式各部分:a + b 的值为 13,经过 (float) 强制转换为 13.0,然后除以 2 得到 6.5。 接着,(int)x 将 4.2 截断为 4,(int)y 将 3.4 截断为 3,4 % 3 的结果为整数 1。 最后执行加法 6.5 + 1,由于 6.5 是浮点类型,整数 1 自动提升为浮点数,得到 7.5。 在 C 语言中,以浮点数格式输出时通常显示为 7.500000,因此选项 A 正确。


2013 年第 14 题 组成原理 选择题

某字长为8位的计算机中,已知整型变量x 、v的机器数分别为 Ixla=11110100,[yl=10110000 。 若 整型变量z=2x+y/2, 则z 的机器数为()。

A.11000000

B.00100100

C.10101010

D.溢出

[tag_link]

正确答案:A

x*2,将 x 算术左移一位为 1 1101000;y/2,将 y 算术右移一位为 1 1011000, 均无溢出或丢失精度。补码相加为 1 1101000 + 1 1011000 = 1 1000000, 亦无溢出。


2013 年第 14 题 组成原理 选择题

某字长为 8 位的计算机中,已知整型变量 x、y 的机器数分别为 [x]补=11110100 , [y]补=10110000 。若整型变量 z=2x+y/2,则 z 的机器数为( )。

补码

A.11000000

B.00100100

C.10101010

D.溢出

[tag_link] 正确答案:A x*2,将 x 算术左移一位为 1 1101000;y/2,将 y 算术右移一位为 1 1011000, 均无溢出或丢失精度。补码相加为 1 1101000 + 1 1011000 = 1 1000000, 亦无溢出。


2024 年第 14 题 组成原理 选择题

某科学实验中,需要使用大量的整型参数,为了在保证表数精度的基础上提高运算速度,需要选择合 理的数据表示方法。若整型参数a 和β的取值范围分别为-2²⁰20、-24⁰240,则下列选项中,α和β最适 宜采用的数据表示方法分别是()。

A.32 位整数、32 位整数

B. 单精度浮点数、单精度浮点数 C.32 位整数、双精度浮点数

D. 单精度浮点数、双精度浮点数

[tag_link]

正确答案:C

a 最适宜采用 32 位整数,32 位整数可以表示 − 2 31 ∼ 2 31 − 1 的范围,对于 a 的取值范围,可以用 32 位整数表示,不会发生溢出或者精度损失,而且整数运算比浮点数运算更快,更省空间,所以优先使用 32 位整数而不是单精度浮点数。排除 B、D,根据 B 的取值范围,可以使用双精度浮点数存储,双精度浮点数存储范围为 − 2 1023 ∼ 2 1024 ,不会发生溢出问题,双精度浮点的小数精度为 15-16 位,比起单精度浮点,基本上不会发生精度损失。


2025 年第 14 题 组成原理 选择题

假设8位字长的计算机中,两个带符号整数x 和 y 的补码表示分别时x 补=A3H,yx=75H, 则通过 补码加减运算器得到的 x-y 的值及 OF 标志分别为()。

A.24,0

B.24,1

C.46,0

D.46,1

[tag_link]

正确答案:D

x 的补码二进制表示为 1010 0011。y 的补码二进制表示为 0111 0101。x-y = x+(-y) = 1010 0011 + 1000 1011 = 0010 1110 = 32 + 8 + 4 + 2 = 46. 二进制加法时最高位有进位,所以 OF = 1。


模拟卷 年第 21 题 组成原理 选择题

当有中断源发出请求时,CPU 可执行相应的中断服务程序,以下可以提出中断的是( )。 I. 外部事件 II. Cache III. 虚拟存储器失效 IV. 浮点运算下溢 V. 浮点运算上溢

A. I、III 和 IV B. I 和 V C. I、II 和 III D. I、III 和 V

补码

[tag_link]

正确答案:D

中断源可以分为外部中断和内部中断(异常)。 外部事件如 I/O 设备请求属于典型的外部中断,能够提出中断请求。 虚拟存储器失效(如页面错误)是内部异常,会触发缺页中断,由 CPU 执行中断服务程序处理。 浮点运算上溢属于算术异常,通常作为中断源,CPU 可响应并处理。 Cache 缺失一般由硬件透明处理,不直接向 CPU 提出中断; 浮点运算下溢虽然也是浮点异常,但在许多系统中常被屏蔽或默认处理为零,一般不视为直接中断源。 因此,可以提出中断的是 I、III 和 V。


模拟卷 年第 43 题 组成原理 综合题

(12 分)已知 32 位寄存器中存放的变量 x 的机器码为 C000004H,请问:

(1)当 x 是无符号整数时:

(2)当 x 是带符号整数(补码)时:

(3)当 xfloat 型浮点数时:

补码 指令格式

[tag_link]

**【解析】** (1) `x` 是无符号整数,所有的二进制位均为数值位,`C000 0004H` 的真值为 。 `x/2` 是由逻辑右移一位得到的,即 ,其真值为 ,存放在 `R1` 中的机器码是 `6000 0002H`。 `2x` 是由 `x` 逻辑左移一位得到的,真值发生溢出,存放在 `R1` 中的机器码是 `8000 0008H`。

(2) 机器码 `C000 0004H = 1100 0000 0000 0000 0000 0000 0000 0100B`,表示这是一个负数,数值位取反末位加 1,得到的二进制原码为 `1011 1111 1111 1111 1111 1111 1111 1100`,即二进制真值为 `-0011 1111 1111 1111 1111 1111 1111 1100`,对应的十进制真值为 。 `x/2` 是由 `x` 算术右移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `E000 0002H`。 `2x` 是由 `x` 算术左移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `8000 0008H`。

(3) 在 IEEE754 单精度浮点数中,最高位为数符位;其后是 8 位阶码,以 2 为底,用移码表示,阶码的偏置值为 127;其后 23 位是尾数数值位,隐藏数值的最高位 “1”。 转换为二进制 `1 100 0000 0 000 0000 0000 0000 0000 0100`,可知,`x` 为负数,阶码为 1,尾数为 ,故真值为 。 `x/2` 的真值是 ,存放在 `R1` 中的机器码为 `1 011 1111 1 000 0000 0000 0000 0000 0100`,即 `BF80 0004H`。 `2x` 的真值是 ,存放在 `R1` 中的机器码为 `1 100 0000 1 000 0000 0000 0000 0000 0100`,即 `C080 0004H`。


模拟卷 年第 43 题 组成原理 综合题

(11 分)已知两个实数 ,它们在 C 语言中定义为 float 型变量,分别存放在寄存器 A 和 B 中。另外,还有两个寄存器 C 和 D。A、B、C、D 都是 32 位的寄存器。请问下列问题(要求用十六进制表示二进制序列): (1)寄存器 A 和 B 中的内容分别是什么? (2) 相加后的结果存放在 C 寄存器中,寄存器 C 中的内容是什么? (3) 相减后的结果存放在 D 寄存器中,寄存器 D 中的内容是什么?

寄存器类型 补码

[tag_link]

**【答案】** (1)寄存器 A 中的内容为 0xC2880000,寄存器 B 中的内容为 0xC1040000。 (2)寄存器 C 中的内容为 0xC2988000。 (3)寄存器 D 中的内容为 0xC26F0000。

**【解析】** 对于浮点数采用 IEEE 754 单精度格式(32 位),其中包含 1 位符号位、8 位指数位(偏移量 127)和 23 位尾数位。

**(1)对于 :**

  • 符号位 (负数)。
  • 绝对值 的二进制为 ,科学计数法表示为 ,指数 ,二进制为
  • 尾数 为隐藏最高位 1 后的小数部分 ,扩展至 23 位得到
  • 组合得到二进制 ,十六进制为

**对于 :**

  • 符号位 (负数)。
  • 绝对值 的二进制为 ,科学计数法表示为 ,指数 ,二进制为
  • 尾数 ,扩展至 23 位得到
  • 组合得到二进制 ,十六进制为

**(2) :**

  • 符号位 (负数)。
  • 绝对值 的二进制为 ,科学计数法表示为 ,指数 ,二进制为
  • 尾数 ,扩展至 23 位得到
  • 组合得到二进制 ,十六进制为

**(3) :**

  • 符号位 (负数)。
  • 绝对值 的二进制为 ,科学计数法表示为 ,指数 ,二进制为
  • 尾数 ,扩展至 23 位得到
  • 组合得到二进制 ,十六进制为

2011 年第 43 题 组成原理 综合题

假定在一个 8 位字长的计算机中运行如下 C 程序段:

unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;

若编译器编译时将 8 个 8 位寄存器 R1~R8 分别分配给变量 x、y、m、n、z1、z2、k1 和 k2。请回答下列问题。(提示:带符号整数用补码表示)

(1) 执行上述程序段后,寄存器 R1、R5 和 R6 的内容分别是什么(用十六进制表示)?

(2) 执行上述程序段后,变量 m 和 k1 的值分别是多少(用十进制表示)?

(3) 上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。

(4) 计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?

补码 类型转换

[tag_link]

1)134 = 128 + 6 = 1000 0110B,所以 x 的机器数为 1000 0110B,故 R1 的内容为 86H。246 = 255 - 9 = 1111 0110B,所以 y 的机器数为 1111 0110B。x-y: 1000 0110 + 0000 1010 = (0)1001 0000,括弧中为加法器的进位,故 R5 的内容为 90H。x+y: 1000 0110 + 1111 0110 = (1)0111 1100,括弧中为加法器的进位,故 R6 的内容为 7CH。

2)m 的机器数与 x 的机器数相同,皆为 86H=1000 0110B,解释为带符号整数 m(用补码表示)时,其值为 -1111010B = -122。m-n 的机器数与 x-y 的机器数相同,皆为 90H=1001 0000B,解释为带符号整数 k1(用补码表示)时,其值为 -1110000B = -112。

3)能。n 位加法器实现的是模2n无符号整数加法运算。对于无符号整数 a 和 b,a + b 可以直接用加法器实现,而 a - b 可以通过 a 加上 b 的补数来实现,即 a - b 等价于 a 加上 -b 的补码,结果对 2 的 n 次方取模。因此,n 位无符号整数的加法和减法运算都可以通过 n 位加法器实现。由于带符号整数使用补码表示,其加减法遵循的公式是:a + b 的补码等于 a 的补码加上 b 的补码,结果对 2 的 n 次方取模;同样,a - b 的补码等于 a 的补码加上 -b 的补码,结果也对 2 的 n 次方取模。因此,n 位带符号整数的加减运算也都可以通过 n 位加法器完成。

4)带符号整数加/减运算的溢出判断规则为:若加法器的两个输入端(加法)的符号相同,且不同于输出端(和)的符号,则结果溢出,或加法器完成加法操作时,若次高位的进位和最高位的进位不同,则结果溢出。最后一条语句执行时会发生溢出。因为 10000110+11110110=(1)01111100,括弧中为加法器的进位,根据上述溢出判断规则,可知结果溢出。或因为 2 个带符号整数均为负数,它们相加之后,结果小于 8 位二进制所能表示的最小负数。


2017 年第 43 题 组成原理 综合题

已知f(n)=∑i=0n 2i=2n+1−1=11⋯1 B,计算f(n)的 C 语言函数 f1 如下:

int f1(unsigned n) {
    int sum=1, power=1;
    for(unsigned i=0; i<= n -1; i ++) {
        power * = 2;
        sum += power;
    }
    return sum ;
}

将 f1 中的 int 都改为 float,可得到计算 f(n) 的另一个函数 f2。假设 unsigned 和 int 型数据都占 32 位,float 采用 IEEE754 单精度标准。请回答下列问题。

(1) 当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的变量 i 和 n 都定义为 int 型,则 f1 是否还会出现死循环?为什么?

(2) f1(23) 和 f2(23) 的返回值是否相等?机器数各是什么(用十六进制表示)?

(3) f1(24) 和 f2(24) 的返回值分别为 33554431 和 33554432.0,为什么不相等?

(4) f(31)=232−1,而 f1(31) 的返回值却为 -1,为什么?若使 f1(n) 的返回值与 f(n) 相等,则最大的 n 是多少?

(5) f2(127) 的机器数为 7F80 0000H,对应的值是什么?若使 f2(n) 的结果不溢出,则最大的 n 是多少?若使 f2(n) 的结果精确(无舍入),则最大的 n 是多少?

补码 IEEE浮点数表示

[tag_link]

1)由于i和n是 unsigned 型,故i≤n−l是无符号数比较,n=0时,n−1的机器数为全1,值是232−1,为 unsigned 型可表示的最大数,条件i≤n−1永真,因此出现死循环。(2 分)若i和n改为 int 类型则不会出现死循环。(1 分)因为i≤n−1是带符号整数比较,n=0时,n−1的值是−1,当i=0时条件i≤n−1不成立,此时退出 for 循环。(1 分)

2)f1(23) 与 f2(23) 的返回值相等。(1 分)f(23) =223+1−1=224−1,它的二进制形式是24个1。int 占32位,没有溢出。float 有1个符号位,8个指数位,23个底数位,23个底数位可以表示24位的底数。所以两者返回值相等。f1(23) 的机器数是 00FF FFFFH。(1 分)f2(23) 的机器数是 4B7F FFFFH。(1 分)显而易见前者是24个1,即00000000111111111111111111111111(2),后者符号位是0,指数位为23+12710 =100101102,底数位是111111111111111111111112。

3)当 n=24 时,f(24) = 1 1111 1111 1111 1111 1111 1111 B,而 float 型数只有 24 位有效位,舍入后数值增大,所以 f2(24) 比 f1(24) 大 1。(1 分)【评分说明】只要说明 f2(24) 需舍入处理即可给分。

4)显然 f(31) 已超出了 int 型数据的表示范围,用 f1(31) 实现时得到的机器数为 32 个 1,作为 int 型数解释时其值为 -1,即 f1(31) 的返回值为 -1。(1 分)因为 int 型最大可表示数是 0 后面加 31 个 1,故使 f1(n) 的返回值与 f(n) 相等的最大 n 值是 30。(1 分)【评分说明】对于第二问,只要给出 n=30 即可给分。

5)IEEE754 标准用“阶码全 1、尾数全 0”表示 无穷大。2 返回值为 f1oat 型,机器数 7F800000H 对应的值是+∞。(1 分)当 n=126 时,f(126) =2127−1=1.1…1×2126,对应阶码为 127+126=253,尾数部分舍入后阶码加 1,最终阶码为 254,是 IEEE754 单精度格式表示的最大阶码。故使 2 结果不溢出的最大 n 值为 126。(1 分)当 n=23 时,f(23) 为 24 位 1,f1oat 型数有 24 位有效位,所以不需舍入,结果精确。故使 f2 获得精确结果的最大 n 值为 23。(1 分)【评分说明】对于第二问,只要给出 n=23,即可给分。对于第三问,只要给出 n=126,即可给分。