32位立即数
一般来讲常量不会多余16位,以防万一所以出现了lui(高位)和ori(低位)
的指令
例
lui $s0, 61
把61加载到高16位
ori $s0, 52
把52加载到低16位
注意:指令addi是将指令最左边的16位立即数复制到高16位去
分支和跳转中的寻址
MIPS的跳转指令j
是最简单的寻址方式,除了6位操作码其余26位为地址
分支指令除地址外还须指定两个操作数
bne $s, $s1, Exit
分别占6位、5位、5位、16位,其中程序地址为16位太小,意味着程序不能大于2^16
解决办法是指定一个加到分支地址的寄存器
程序计数器(PC) = 寄存器 + 分支地址
PC包含了原有的16位当前指令地址,其余的16位作为下一个指令地址,这样转移2^15个字到达下一指令
这就是PC相对寻址。
例
Loop:
bne $t0, $s5, Exit//这里的Exit是一个分支地址2个字或者8个字节
xxxxxxxxxxxxxxx//不会执行本行代码,因为PC收到上一行的2个或8个字节的地址,所以本行地址 + 2字 或 8字节,直接跳到Exit
j Loop
Exit:
此过程中没用使用(+12跳转)也没有用完整目的地址。
网友评论