将陆续上传本人写的新书《自己动手写CPU》(尚未出版),今天是第17篇,我尽量每周四篇
5.4 逻辑、移位操作与空指令说明
MIPS32指令集架构中定义的逻辑操作指令有8条:and、andi、or、ori、xor、xori、nor、lui,其中ori指令已经实现了,本章要实现其余7条指令。
MIPS32指令集架构中定义的移位操作指令有6条:sll、sllv、sra、srav、srl、srlv。
MIPS32指令集架构中定义的空指令有2条:nop、ssnop。其中ssnop是一种特殊类型的空操作,在每个周期发射多条指令的CPU中,使用ssnop指令可以确保单独占用一个发射周期。OpenMIPS设计为标量处理器,也就是每个周期发射一条指令,所以ssnop的作用与nop相同,可以按照nop指令的处理方式来处理ssnop指令。
另外,MIPS32指令集架构中还定义了sync、pref这2条指令,其中sync指令用于保证加载、存储操作的顺序,对于OpenMIPS而言,是严格按照指令顺序执行的,加载、存储操作也是按照顺序进行的,所以可以将sync指令当作nop指令处理,在这里将其归纳为空指令。pref指令用于缓存预取,OpenMIPS没有实现缓存,所以也可以将pref指令当作nop指令处理,此处也将其归纳为空指令。
以上17条指令按照格式、作用的不用,又可分为几类,分别说明如下。
1、and、or、xor、nor
这