32位立即數(shù)
一般來講常量不會多余16位竟痰,以防萬一所以出現(xiàn)了lui(高位)和ori(低位)
的指令
例
lui $s0, 61
把61加載到高16位
ori $s0, 52
把52加載到低16位
注意:指令addi是將指令最左邊的16位立即數(shù)復(fù)制到高16位去
分支和跳轉(zhuǎn)中的尋址
MIPS的跳轉(zhuǎn)指令j
是最簡單的尋址方式,除了6位操作碼其余26位為地址
分支指令除地址外還須指定兩個操作數(shù)
bne $s, $s1, Exit
分別占6位边臼、5位柠并、5位、16位臼予,其中程序地址為16位太小,意味著程序不能大于2^16
解決辦法是指定一個加到分支地址的寄存器
程序計數(shù)器(PC) = 寄存器 + 分支地址
PC包含了原有的16位當(dāng)前指令地址窄锅,其余的16位作為下一個指令地址缰雇,這樣轉(zhuǎn)移2^15個字到達(dá)下一指令
這就是PC相對尋址入偷。
例
Loop:
bne $t0, $s5, Exit//這里的Exit是一個分支地址2個字或者8個字節(jié)
xxxxxxxxxxxxxxx//不會執(zhí)行本行代碼疏之,因為PC收到上一行的2個或8個字節(jié)的地址暇咆,所以本行地址 + 2字 或 8字節(jié),直接跳到Exit
j Loop
Exit:
此過程中沒用使用(+12跳轉(zhuǎn))也沒有用完整目的地址其骄。