簡體   English   中英

Mips中的分支指令和跳轉指令

[英]Branch instructions and Jump instruction in Mips

我是Mips的新手,需要您的幫助。 我遇到了一個練習:

Assuming that the program counter has the 2000 0000hex value in it, is it possible that the program counter will get the 00001000hex or the 20001400hex value using the beq or the jump instruction

首先,我無法真正理解beq指令的16位值和跳轉指令的26位值所代表的含義。 是偏移量還是地址?老實說,我認為這是一個地址,但我真的不明白它是如何工作的。

練習的答案是,對於00001000hex值,兩個指令都可以帶您到那里,而對於第二個指令,只有跳轉指令才有效。 這是為什么? 任何幫助,將不勝感激。

MIPS上的branch保持16位位移(相對於下一條指令),以有符號的指令數衡量。 因此,您可以通過偏移量為+(0x1400 / 4-1)= 4FFbranch從地址0x2000 00000x2000 1400 無法獲得0x0000 1000 ,因為它需要-(1FFF000 / 4 + 1)= -7FFC01的偏移量,超過16位。

jump包含一個26位的值,該值代表如下計算的絕對地址:
(encoded value * 4) | (next instruction & 0xE0000000) (encoded value * 4) | (next instruction & 0xE0000000)即跳轉后的指令取最高4位。 因此,您可以通過jump instr-index=0x5000x2000 00000x2000 1400 ,但是您不能達到0x0000 1000 ,因為無論您做什么,新地址中的最高4位將是0x2 ,而不是0x0

如果您想要一條可以帶您到任何地方的指令,則MIPS提供了jr指令跳轉寄存器。 由於寄存器包含32位值,因此它可以帶您進入32位地址空間內的任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM