簡體   English   中英

在MIPS程序集中增加寄存器?

[英]Incrementing register in MIPS assembly?

我正在編寫一個MIPS程序來對8個ascii環進行排序,其地址在寄存器$ t0-7中。 比較兩個字符串時,我需要將地址傳遞到一個函數中(保存到$ s0和$ s1中)。 如果要循環執行此操作,如何增加寄存器值? 我可以這樣做嗎? 還是我需要將所有地址都放在內存中?

例如,如果我的循環是這樣的,則使用偽代碼:

for loop with index i:
 move address from register j into $s0
 move address from register j+1 into $s1
 call function for return value
 use return value to perform swapping operation
 increment i
 jump back to loop if i<bound

在j是任意的情況下,我只是說明如何需要從兩個連續的寄存器中檢索。

有沒有辦法像使用存儲位置一樣對寄存器使用偏移量表示法?

“有沒有辦法像使用存儲位置一樣對寄存器使用偏移量表示法?”

不行 匯編指令中對寄存器的訪問進行了硬編碼。 您無法訪問計算的寄存器。

要增加一個寄存器,請向其加1。 像這樣:

addiu $t0, $t0, 1

MIPS上有許多寄存器。 如果您不想在某個寄存器中丟棄基址,請使用另一個寄存器作為基址+偏移量,並根據需要對其進行遞增。 或將第三個寄存器用作循環計數器,並根據需要重新計算基址和偏移量。

如果您確實願意,可以使用自我修改代碼。 但是我懷疑您是否想,可能會對高速緩存造成嚴重破壞並產生開銷,使機器指令混亂不堪。

暫無
暫無

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

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