[英]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.