分支指令
分支指令包含該指令,和兩個操作數,以及跳轉的分支地址,該地址是相對於下一條指令的相對地址
分支指令占6位 操作數1占5位 操作數2占5位 分支指令16位
例如
bne $s0 , $s1,EXIT
執行bne分支指令,比較$s0和$s1兩個操作數中的數據,如果不相等則跳轉到EXIT指定的地址,
如何到達EXit的地址?
這就要利用分支指令那16位二進制數了
16位二進制可以表示的范圍為-2^15~2^15也就是-128~127,通過下一指令的地址加上該分支指令值就能得到目標地址
如何進行地址的加減就要用到二進制的補碼來進行運算
16位中負數最小值的補碼演變:0X0000FFFF(原碼)因為是負數所以在FFFF前加一得到OX0001FFFF,再進行按位取反得到OXFFFE0000(補碼)
加上下一條指令的地址就是目標地址了
16位中正數的補碼就是原碼最大值為Ox00007FFFF
跳轉指令
跳轉指令則只有該指令和跳轉的目標地址組成
跳轉指令6位 相對跳轉地址16位
因為地址都是4位一組所以將該26位地址進行左移2位表示28位的地址
其沒有正負之分因此相對簡單
OX6位指令碼+(11)多的2位二進制碼FFFFFF(24位)
左移之后變成
保留6位指令當中的最高4位,之后的目標地址等於原來的26位加上補上的2位得到
OX0FFFFFFC(最大移動地址)