计算机组成原理无符号数的加减运算
问题描述:
计算机组成原理无符号数的加减运算
假定一个八位字长的计算机中运行如下c程序段
unsigned int x=134;
unsighed 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、z1、k1、k2;
问:执行上述程序段后,寄存器R1、R5、R6
的内容分别是什么?
我计算的R5
x=10000110
y=11110110
计算z1=x-y
是不是因为他们都寄存在八位的寄存器里
所以x-y:
1000 0110
- 1111 0110
----------------
1001 0000
z1=90H
这样计算对么?
答
不对.
计算机的处理过程是:让减数经过一个反向器并加1,也就是取反,然后再送入ALU相加
所以是这样的
1000 0110
+0000 10101000,0110 为什么不取反加1呢?这样的取反加一是无符号数的补码么?ALU不认识什么符号。他有两个输入端A,B。 A端直接输入,B端的看情况,如果是+则直接输入,如果是-则经过反向器输入。 他只管计算,并把结果反回给程序,至于这个结果是什么类型,就由程序来处理了如果是两个数相加,A为正,B为负,这时候ALU是把B端的看成-么??不给你说了吗,ALU不认识什么符号,只要是加运算,就直接输入。 因为计算机存储负数用的是补码,B为-的话就直接输入他的补码形式。