问答题
假定在一个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]补 的时候,是连同符号位一起按位取反末尾加一,但是如果有溢出情况,这两者是有区别的,所以可以利用同一个加法器实现,但是溢出判断电路不同。
【答案解析】
问答题
计算机内部如何判断带符号整数加/减运算结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
【正确答案】 判断方法是如果最高位进位和符号位进位不同,则为溢出; 有三种方法可以判断溢出,双符号位,最高位进位,符号相同操作数的运算后与原操作数的符号不同则溢出。
【答案解析】
提交答案
关闭