计算机组成与设计(二)指令

指令集:一个给定的计算机体系结构所包含的指令集合,一种是人们编程书写的形式,另一种是计算机所能识别的形式。
共同目标:找到一种语言,可方便硬件和编译器的设计,且使性能最佳,同时使成本和功耗最低。

MIPS指令集:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
硬件设计原则
1:简单源于规整
例如:由高级语言转换成汇编语言
a=b+c;
d=a-e;

add a, b, c
sub d, a, e

2:越小越快(寄存器个数限制为32)
(1)大量的寄存器可能会使时钟周期变长
(2)受指令格式位数的限制
(在MIPS中可以用一个“$”符后面跟两个字符代表一个寄存器)
数据传送指令:存储器和寄存器之间传递数据的指令(load指令和store指令)
(将数据从存储器复制到寄存器的数据传送指令->load指令)
大端格式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
小端格式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
例如:假设变量h存放在寄存器 $s2中,数组A的基址放在 $s3中,编译c赋值语句
A[12]=h+A[8];

lw $t0,32($s3)
add $t0,$s2,$t0
sw $t0,48($s3)

寄存器与存储器相比,访问时间短、吞吐率高,寄存器中的数据访问速度快并易于利用,访问寄存器相对于访问存储器功耗更小。因此,为了获得高性能和节约功耗,指令集的体系结构必须拥有足够的寄存器,并且编译器必须高效地利用这些寄存器。

如果需要使用常数必须先将其从存储器中取出,例如,要使寄存器$s3加4

lw $t0,AddrConstant4($s1)
add $s3,$s3,$t0

或者使用加立即数的方法

addi $s3,$s3,4

常数0有效使用可以简化指令集,例如,数据传送指令正好可以被视为一个操作数0的加法,因此,MIPS将寄存器$zero至为0;(由于MIPS支持负常数,所以MIPS中不需要设置减立即数的指令)

表示有符号二进制数的方法(二进制补码)
在这里插入图片描述
采用二进制补码的优点在于所有负数最高有效位都是1,硬件只需检测这一位便可知正负,这个位也称为符号位
在这里插入图片描述
就正如无符号位会发生溢出一样,对于二进制补码的操作也可能发生溢出,溢出发生在符号位不正确(即负数符号位为0,正数符号位为1)

对于取数指令有符号数和无符号数是有区别的,取回有符号数需要使用符号位填充寄存器的所有剩余位,称为符号扩展;取回有符号位只需用0填充数据左侧的剩余位即可。
(1)对二进制补码取反,一个数和它按位取反的结果相加,和一定是-1
(2)将一个用n位表示的二进制数转化成一个用多于n位表示的数(符号扩展)

保持所有指令长度相0同,但不同类型的指令采用不同的指令格式
(R型,用于寄存器)
在这里插入图片描述
&#x

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值