移动操作指令说明
MIPS32指令集架构中定义的移动操作指令共有6条:movn、movz、mfhi、mthi、mflo、mtlo,后4条指令涉及到了对特殊寄存器HI、LO的读写操作,截止到本章,我们的OpenMIPS处理器只实现了32个通用寄存器、以及PC,所有的指令也只是对32个通用寄存器进行操作,还没有涉及特殊寄存器,本章将实现HI、LO这两个特殊寄存器。
HI、LO寄存器用于保存乘法、除法结果。当用于保存乘法结果时,HI寄存器保存结果的高32位,LO寄存器保存结果的低32位;当用于保存除法结果时,HI寄存器保存余数,LO寄存器保存商。在后续“算术操作指令的实现”一章中,会进一步说明。
这6条移动操作指令的格式如图6-1所示。
从图6-1可知,这6条指令都是R类型指令,并且指令码都是6'b000000,即均为SPECIAL类指令,同时,指令第6-10bit都为0,可以依据指令中0-5bit功能码的值判断是哪一种指令。各指令的用法及作用说明如下。
当功能码为6'b001011时,表示是movn指令
指令用法为:movn rd, rs, rt
指令作用为:if rt ≠0 then rd <- rs,判断地址为rt的通用寄存器的值,如果不为零,那么将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器,反之,保持地址为rd的通用寄存器不变。movn是Move Conditional on Not Zero的意思。
当功能码为6'b001010时,表示是movz指令
指令用法为:movz rd, rs, rt
指令作用为:if rt = 0 then rd <- rs,与上面movn指令的作用正好相反,判断地址为rt的通用寄存器的值,如果为零,那么将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器,反之,保持地址为rd的通用寄存器不变。movz是Move Conditional on Zero的意思。
当功能码为6'b010000时,表示是mfhi指令
指令用法为:mfhi rd
指令作用为:rd <- hi,将特殊寄存器HI的值赋给地址为rd的通用寄存器。
当功能码为6'b010010时,表示是mflo指令
指令用法为:mflo rd
指令作用为:rd <- lo,将特殊寄存器LO的值赋给地址为rd的通用寄存器。
当功能码为6'b010001时,表示是mthi指令
指令用法为:mthi rs
指令作用为:hi <- rs,将地址为rs的通用寄存器的值赋给特殊寄存器HI。
当功能码为6'b010011时,表示是mtlo指令
指令用法为:mtlo rs
指令作用为:lo <- rs,将地址为rs的通用寄存器的值赋给特殊寄存器LO。