决策:条件分支beq和bne
计算机与一般计算器的区别在于决策能力
- 相等则分支beq指令,指令在两个源操作数寄存器中的值相同时同时分支
- 不等则分支指令bne指令,指令在值不同时分支到标签
beq/bne s 0 , s0, s0,s1,Label
如果不发生分支,则继续执行内存中相邻的下一条指令
综合练习3:if-else语句(无条件跳转j和条件分支)
思路为bne,相等自动顺延执行,不等则跳到else指令,还需要考虑add和sub之间的j指令及时退出
决策:小于则置位slt
除了相等、不等关系,比较两个数大小也常用
MIPS的小于则置位指令slt
置位:将一位设置成1;复位:将一位设置成0
slt $t0, $s1, $ s2
源操作数1<源操作数2吗?
是,将目的操作数寄存器$ s0置位为1
否,将目的操作数寄存器$ s0置位为0
6种条件判定及其伪指令
通过slt、beq、bne的组合即可以实现全部6种比较条件,即六种值为真或假的布尔表达式
结论:判定>或<使用slt和beq,判定>=或<=使用slt和bne
对于比大小的四种比较条件可以使用伪指令blt、bgt、ble、bge
综合练习4:while循环
思路考察之前数组元素的累加和无条件跳转j指令的跳回位置
指令格式
指令中含3个寄存器的运算指令都属于R型指令
add/sub、add/or/nor、slt
32位的MIPS指令一共分为6个字段
op:操作码
rs/rt:源操作数寄存器,s下一个字母为t,且5位对应2^5=32
rd:目的寄存器
shamt:位移量
funct:功能码
指令格式:R型
需要记忆rs和rt寄存器分别为8-15号寄存器和16-23号寄存器
add、sub指令的操作码都是0和功能码分别是32和34
sll/srl也属于R型指令,没有第二个源操作数寄存器,rt置为0
指令格式:I型(立即数)
addi和ori指令
格式是把R型指令中后三个字段拼成16位立即数字段
rd字段被合并了,rt就成了目的寄存器
指令格式:I型(偏移量)
lw和sw
此时16位立即数表示数组元素相对于数组基址的地址偏移量
rs字段表示寄存器值与address字段相加,得到存储器单元地址
rt字段表示与存储器单元交换数据的寄存器
lw、sw指令操作码分别为35和43
指令格式:I型(标签)
beq/bne
同样使用两个寄存器,分支标签的地址用16位立即数字段表示
自学到寻址方式时再做说明
机器语言指令小结
感谢大家的关注,你们的点赞和收藏是我码字的最大动力:)