问答题 假定在一个8位字长的计算机中运行如下类C程序段:
unsigned int x=134;
unsigned int v=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,请回答下列问题。(提示:带符号整数用补码表示)

问答题 执行上述程序段后,寄存器R1,R5和R6的内容分别是什么?
【正确答案】R1=86H,R5=90H;R6=7CH;
R1存储着无符号的整形x=134=10000110B=86H;
R2存储着无符号的整形y=246=11110110B=F6H;
R5存储着无符号的整形z1=x-y=10000110B-11110110B=10010000=90H;
R6存储着无符号的整形z2=x+y=10000110B+11110110B=101111100=7CH,溢出。
【答案解析】
问答题 执行上述程序段后,变量M和k1的值分别是多少?(用十进制表示)
【正确答案】M=-122,k1=-112
R3存储着有符号的整形[m]=x=10000110B;[m]=11111010B=-122;
R4存储着有符号的整形[n]=y=10000110B;[n]=10001010B=-10;
R7存储着有符号的整形k1=m-n=-122-(-10)=-112;
R8存储着有符号的整形k2=m+n=-122-10=-132(溢出)。
【答案解析】
问答题 上述程序段涉及带符号整数的加/减,元符号整数的加/减,这四种运算能否利用同一个加法器辅助电路来实现?简述理由。
【正确答案】无符号数和有符号数都是以补码形式存储的,加减运算没有区别(不考虑溢出的情况下),值是输出的时候若是有符号的数,最高位是符号位。
减法运算求[-x]的时候,是连同符号位一起按位取反末尾加一,但是如果有溢出情况,这两者是有区别的,所以可以利用同一个加法器实现,但是溢出判断电路不同。
【答案解析】
问答题 计算机内部如何判断带符号整数加/减运算结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
【正确答案】判断方法是如果最高位进位和符号位进位不同,则为溢出;
有三种方法可以判断溢出,双符号位,最高位进位,符号相同操作数的运算后与原操作数的符号不同则溢出。
【答案解析】