[英]How to remove a char from a 4-byte string in MIPS32 assembly using a shift?
我是 MIPS32 程序集的新手,並試圖刪除存儲在 .data 部分中的字符串中的一個字符(特別是刪除第一個字符),但不知道該怎么做。
在下面的代碼行中,有沒有辦法讓 test 等於“bc”而不是“abc”
test: .asciiz "abc"
這僅僅是使用邏輯左移2來刪除第一個字符的問題,還是我需要抵消一些東西,或者是否有一個操作碼可以直接刪除它?
正如需要從匯編中的字符串中刪除所有非字母元素(對於 x86)所解釋的那樣,刪除字符串中的字符意味着復制字符串的整個 rest。
在您的情況下,4 個字節中只剩下 3 個字節(包括終止的0
)。 所以是的,你可以通過將單詞移動 8 位(1 個字節)來做到這一點。 特別是如果您確保test
與之前的.p2align 2
字對齊,因此您可以安全地lw
和sw
一次加載所有 4 個字節。
對於 little-endian MIPS(如 MARS 模擬),這將是一個右移,因為 memory 中的第一個字節是最不重要的。 右移移出低(最低有效)位。
對於大端 MIPS(最高有效字節在前,就像一些真正的 MIPS CPU 一樣),這將是左移,移除最高有效字節並將低位向上移動。
請注意,這將使test
中的單詞為'b', 'c', 0, 0
。 所以是的,作為隱式長度字符串,它是"bc"
。
另請注意,如果您在寄存器中只有一個指針,則只需將其增加 1 即可獲得指向"bc"
的指針,而不是修改 memory。 像addiu $t0, $t0, 1
。
或者等價地, la $t0, test+1
是指向開始后 1 個字節的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.