43.(11分)假定在一个8位字长的计算机中运行如下类C程序
2021.07.06 07:02

  【题目】

  43.(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+00001010=(0)1001 0000,括弧中为加法器的进位,故R5的内容为90H。(1分)

  x+y:1000 0110+1111 0110=(1)0111 1100,括弧中为加法器的进位,故R6的内容为7CH。

  (1分)

  (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位加法器实现的是模2n无符号整数加法运算。对于无符号整数a和b,a+b可以直接用加法器实现,而a-b可用a加b的补数实现,即a-b=a+[-b]补(mod 2n),所以n位无符号整数加/减运算都可在n位加法器中实现。(1分)

  由于带符号整数用补码表示,补码加/减运算公式为:[a+b]补=[a]补+[b]补(mod2n),[a-b]补=[a]补+[-b]补(mod 2n),所以n位带符号整数加/减运算都可在n位加法器中实现。(1分)

  (4)带符号整数加/减运算的溢出判断规则为:若加法器的两个输入端(加数)的符号相同,且不同于输出端(和)的符号,则结果溢出。(或加法器完成加法操作时,若次高位的进位和最高位的进位不同,则结果溢出)(2分)

  最后一条语句执行时会发生溢出。因为1000 0110+1111 0110=(1)0111 1100,括弧中为加法器的进位,根据上述溢出判断规则,可知结果溢出。(1分)


MORE+

    相关阅读 MORE+

    版权及免责声明
    1.凡本网注明"稿件来源:新东方在线"的所有文字、图片和音视频稿件,版权均属北京新东方迅程网络科技有限公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本网协议授权的媒体、网站,在下载使用时必须注明"稿件来源:新东方在线",违者本网将依法追究责任。
    2.本网末注明"稿件来源:新东方在线"的文/图等稿件均为转载稿,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。如擅自篡改为"稿件来源:新东方在线”,本网将依法追究责任。
    3.如本网转载稿涉及版权等问题,请作者致信weisen@xdfzx.com,我们将及时外理

    Copyright © 2011-202

    All Rights Reserved