(1)R1=134=86H, R5...
(1)R1=134=86H, R5=90H, R6=7CH;134=1000 0110B=86H;x-y=1000 0110B-1111 0110B=1001 0000B=90H;x+y=1000 0110B+1111 0110B=0111 1100B(溢出)
(2)m=-122,k1=-112,m=1000 0110B,做高位为符号位,则m的原码为1111 1010B=-122;
n=1111 0110B,n的原码为1000 1001=-10;k1=m-n=-112。
(3)无符号数和有符号数都是以补码的形式存储,加减运算没有区别(不考虑溢出情况时),
只是输出的时候若是有符号数的最高位是符号位。减法运算求[-x]补的时候,是连同符号位一起按位取反末位加1,但是如果有溢出情况,这两者是有区别的,所以可以利用同一个加法器实现,但是溢出判断电路不同。
(4)判断方法是如果最高位进位和符号位的进位不同,则为溢出;“int k2=m+n;”会溢出;
三种方法可以判断溢出,双符号位、最高位进位、符号相同操作数的运算后与原操作数的符号不同则溢出
(1) R1内容为86H,R5内容为90H,R6内容为7CH。
(2) m的值为-122,k1的值为-112。
(3) 能。 n 位加法器实现的是模 2^n 无符号整数加法运算。
对于无符号整数a和b,a+b可以直接用加法器实现,而a-b可用a加b的补数实现,即 补a−b=a+[−b]补(mod 2^n) ,所以 n 位无符号整数加/减运算都可在 n 位加法器中实现。
由于带符号整数用补码表示,补码加/减运算公式为 [a+b]补=[a]补+[b]补(mod 2^n) 、 [a−b]补=[a]补+[−b]补(mod 2^n) ,所以n位带符号整数加/减运算都可在 n 位加法器中实现。
(4) 第一问,这里采用一位符号位,有两种方法处理。
方法一:若 正+正=负 或 负+负=正,则溢出,否则不溢出。即若加数与被加数符号位相同,但与和的符号位不同,则溢出,否则不溢出。
方法二:根据数据位的进位情况判断溢出,Cs表示两数之间符号位运算的进位,C1表示最高数值位,若Cs⊕C1=1,则溢出,否则不溢出。
第二问,注意题目仅考察带符号整数运算语句。最后一条语句发生溢出。
方法一:二进制计算
因为1000 0110B+1111 0110B=(1)0111 1100B,括弧中为加法器的进位,根据上述溢出判断规则,可知结果溢出。
方法二:十进制计算
因为(-122)+(-10)=-132<-128,在本题int表示范围之外,下溢,需要正向偏移模数 28 得-132+256=124。可知结果溢出。
登录后提交答案