簡體   English   中英

MIPS匯編,寄存器遍歷?

[英]MIPS assembly, register traversing?

您好,謝謝!

我的問題是,是否有可能像在一個指針中放置一個指針($ t0),然后將指針移動到另一個指針($ t1)一樣進行訪問。

我真正想做的是在一個循環中讀取8個整數並將其存儲在($ s0- $ s7)中

您可以嘗試更改sw操作碼中的位以指向增加的寄存器,但這是一個糟糕的主意。 我認為最好的辦法是自己編寫展開循環:

lw $s0, $t0
addi $t0, $t0, 4
lw $s1, $t0
...

重新安排東西以最大程度地減少失速,但這與您將要獲得的效果差不多。

您想讓注冊號可變嗎? 我不了解MIPS,但我懷疑這是否可能。 我所知道的唯一具有類似功能的ISA是SPARC(寄存器窗口,不能用於您想要的東西)和IA64(“旋轉寄存器”,可以用於您想要的東西,但只能使用浮點數)。

我不知道現有的MIPS體系結構支持通過寄存器的內容引用寄存器,這將允許您建議的類型,例如:

move  $t0, $zero
mover $t0, $s0    # $s0 = register($t0) = register(0)
addi  $t0, 1
mover $t0, $s1    # $s1 = register($t0) = register(1)
addi  $t0, 1
...

盡管在任何情況下,出於某些原因,我認為這都不是一個好主意。 首先,無論如何,您要處理的寄存器數量非常少,因此在任何情況下循環的上限都很小,這使得直接方法的靈活性不會降低。

更重要的是,這樣的循環效率極低。 它將為每個迭代初始化,遞增,執行move和分支檢查(至少)。 即使不考慮分支停頓,這也比簡單慢至少三倍:

move $t0, $s0
move $t1, $s1
...
move $t8, $s8

暫無
暫無

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

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