组成原理
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)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
答案
(1)R1的内容为86H,R5的内容为90H,R6的内容为7CH。
(2)m的值为-122,k1的值为-112。
(3)能。因为无符号整数和带符号整数(补码表示)的加减运算均可通过补码加法实现,减法可转化为加补数,因此可用同一个加法器辅助电路实现。
(4)判断方法:若两个操作数符号相同但结果符号不同,则溢出;或次高位进位与最高位进位不同,则溢出。程序段中,带符号整数运算k2=m+n会发生溢出。