2011 · 主观题 · 第 107 题
计算机学科专业基础(408) · 第 107 题
(11 分)假定在一个 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)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
参考答案
(1)134=128+6=1000 0110B,所以 x 的机器数为 1000 0110B,故 R1 的内容为 86H。(1 分)246=255-9=1111 0110B,所以 y 的机器数为 1111 0110B。x-y=1000 0110+0000 1010=(0)1001 0000,括弧中的 0 为加法器的进位,故 R5 的内容为 90H。(1 分) x+y=1000 0110+1111 0110=(1)0111 1100,括弧中的 1 为加法器的进位,故 R6 的内容为 7CH。(1 分)【评分说明】“R1 的内容”也可表示为“(R1)”。
(2)m 的机器数与 x 的机器数相同,皆为 86H=1000 0110B,解释为带符号整数 m(用补码表示)时,其值为-111 1010B=-122。(1 分)m-n 的机器数与 x-y 的机器数相同,皆为 90H=1001 0000B,解释为带符号整数 k1(用补码表示)时,其值为-111 0000B=-112。(1 分)
(3)能。(1 分)n 位加法器实现的是模 2ⁿ无符号整数加法运算。对于无符号整数 a 和 b、a+b 可以直接用加法器实现,而 a-b 可用 a+b 的补数实现,即 a-b=a+[-b]补(mod2ⁿ),所以 n 位无符号整数加/减运算都可在 n 位加法器中实现。(1 分)由于带符号整数用补码表示,补码加/减运算公式为:[a+b]补=[a]补+[b]补(mod2ⁿ)、[a-b]补= [a]补+[-b]补(mod2ⁿ),所以 n 位带符号整数加/减法运算都可在 n 位加法器中实现。【评分说明】理由部分基本正确,即可给分。
(4)带符号整数加/减运算的溢出判断规则为:若加法器的两个输入端(加数)的符号相同,且不同于输出端(和)的符号,则结果溢出。(或加法器完成加法操作时,若次高位的进位和最高位的进位不同,则结果溢出)(2 分)最后一条语句执行时会发生溢出。因为 1000 0110 + 1111 0110=(1)0111 1100,括弧中的 1为加法器的进位,根据上述溢出判断规则,可知结果溢出。(1 分)【评分说明】
① 正确说明其中一种溢出判断规则给 2 分,若给出的说明是变形补码溢出判断规则且正确,可给 1 分。
② 只要说明最后一条语句溢出就给 1 分。