簡體   English   中英

如何使用移位從 MIPS32 程序集中的 4 字節字符串中刪除字符?

[英]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字對齊,因此您可以安全地lwsw一次加載所有 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.

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