硬件/软件接口
寄存器与存储器相比,访问时间短、吞吐率高,寄存器中的数据访问速度快并易于利用,访问存储器相对于访问存储器功耗更小。
2.3.2 常数或立即数操作数
常数操作数的快速加法指令叫做加立即数,addi
addi $s3,$s3,4 #$s3=$s3+4
却没有减立即数这个指令,因为可以加负数,就相当于减法了
addi $s3,$s3,-4 #$s3=$s3-4
设计原则3:加速执行常用操作。
常数操作数出现频率高,而且相对于存储器中去常数,包含常数的算术运算指令执行速度快很多,并且能耗较低。
常数0还有另外的作用,有效使用它可以简化指令集。因此,MIPS将寄存器$zero恒置为0。
EXAMPLE: 想将$s1的数据复制到$s2中,就可以这样写
add $s2,$s1,$zero
2.4有符号数和无符号数
计算机程序对正数和负数都要进行计算,所以需要一种方法来区分正数和负数。显而易见的解决方案是增加一个独立的符号位。
补码:前导位为0表示正数,前导位为1表示负数。
EXAMPLE:
0000 0000 0000 0000 0000 0000 0000 0001=1*2^0(代表2的0次方)=1
1000 0000 0000 0000 0000 0000 0000 0001=-1*2^31+1*2^0=-2147483647
其实就是前导位是1的时候按-1算
这样,硬件只需检测这一位就可以知道一个数是正数还是负数。因此,这个位通常叫做符号位。
两个捷径:
一:补码数取反的快速方法,简单对每一位取反,0变成1,1变成0,然后对结果加1
原理:一个数和他按位取反的结果相加肯定是 1111 1111 1111 1111 1111 1111 1111 1111=-1,
因此X+(X按位取反)=-1, X+(X按位取反)+1=0, -x=(X按位取反)+1
二:将一个用n位表示的二进制数转化成一个用多于n位表示的数。
这个捷径是将原有的16位数简单复制到32位新数的低16位,其最高有效位(符号位)则以复制的方式填满新数的高16位。
2.5这一节就不整理了,感觉了解一下就好~