赞
踩
目录
①R型运算指令,使用到了3个寄存器,包括6种计算:add(加)、sub(减)、and(与)、or(或)、xor(异或),它们的汇编形式统一表示为:
add/sub/and/or/xor rd,rs,rt
各指令的操作也可以形式地统一为:
$rs op $rt ——> $rd
其操作含义是将前两个寄存器中的数据做op运算,结果写回到第三个寄存器,这里的op是指由操作码OP和功能辅助说明字段func联合确定的运算操作。
②R型移位指令,使用到两个寄存器,包括3种移位:sll(逻辑左移)、srl(逻辑右移)、sra(算术右移)。它们的汇编形式也可以统一表示为:
sll/srl/sra ra,rs,shamt
各指令的操作也可以形式化地统一表示为:
$rs shift shamt ——> $rd
其含义是将第一个寄存器中的数据进行移位shift,移位类型由操作码OP与func字段联合确定,移动的位数则由指令中的shamt字段给定。
③R型跳转指令,只使用到1个寄存器,也只有一种跳转:jr,他的汇编形式是:
jr rs
这种寄存器型的跳转指令执行的操作是:
$rs ——> PC
是指把寄存器中存储的地址码直接写入程序指针计数器PC,再根据PC值去读取指令从而实现跳转,是基于寄存器直接寻址方式的无条件跳转。
①I 型运算类指令,使用到2个寄存器和1个立即数,包括4种运算操作:addi(立即数加)、andi(立即数与)、ori(立即数或)和xori(立即数异或),对应的汇编形式统一表示为:
addi/andi/ori/xori rt,rs,imm
各指令执行的操作统一表示为:
$rs op E(imm)——> $rt
就是把寄存器中保存的数据字与指令中截取到的立即数进行运算,结果写回到第二个寄存器。
注意:addi执行的是算术加法,所以16位的立即数imm扩展成32位,即执行E(imm)时,采用符号扩展(sign extension);其余3种逻辑运算中执行E(imm)时,采用0扩展。
②I型访存指令,使用到2个寄存器和1个立即数,包括lw(取字)、sw(存字),二者的汇编格式分别表示为:
lw rt,imm(rs)
sw rt,imm(rs)
取字指令lw执行的操作是:
Mem[$rs+E(imm)]——> $rt
存字指令sw执行的操作与lw的操作刚好是逆向的:
$rt——>Mem[$rs+E(imm)]
这两条指令都是按基址寻址方式形成目标主存单元地址,前者从主存单元读数据字并写回到寄存器,后者把寄存器中的数据字写入到目标主存单元。
③I型数位设置指令,只使用到1个寄存器和一个常数,代表性的指令是lui。它的汇编格式表示为:
lui rt,imm
其功能是把imm设置到寄存器rt的高16位:(imm<<16)——>$rt,执行时可以先将立即数imm左移16位且空位补0,转换成32位后赋值给rt寄存器。
④I型分支指令,使用到两个寄存器和1个立即数,是条件转移型指令,主要包括:beq(相等则分支)和bne(不等则分支),相应的汇编格式可表示为:
beq rs,rt,imm
bne rs,rt,imm
beq指令的执行的操作可以描述为:如果$rs=$rt,则执行PC+E(imm)<<2——>PC,否则不修改PC值,以确保顺序执行后继指令;而bne指令的执行操作可以描述为:如果$rs<>$rt,则执行PC+E(imm)<<2——>PC,否则不修改PC值,从而确保顺序执行后继指令。
表3-24中列出的J型指令只有两个,是一类无条件转移型指令。这类指令包括:j(普通无条件跳转)和jal(保存断点后的无条件跳转),它们的汇编格式是:
j address
jall address
前者不需要保存断点(返回地址),所以直接执行:PC【31:28】U address <<2——>PC;后者需要先将断点地址保存到专用的堆栈寄存器ra以便调用的子程序执行完后能正确返回,再执行与j指令一样的操作:PC【31:28】U address << 2 ——>PC。
R型指令中也有一条类似的无条件转移指令jr,I型指令中的无条件转移指令j与之的主要差别在于形成转移目标地址的方式不同。前者依靠寄存器直接寻址方式从寄存器中读取到转移地址,后者则通过伪直接寻址方式形成转移地址。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。