簡體   English   中英

MIPS32 字數組

[英]MIPS32 word array

我正在嘗試將一個簡單的 C 函數(它告訴您由字符數組構成的單詞是否是回文)轉換為 MIPS 32,但是我在使用加載非 4 個位置的數組。

顯然,

`li  t0,0(a0)`

加載第一個字母(字符),和

`li  t0,4(a0)`

加載數組的第五個字母(我認為它應該是第二個)。 嘗試加載第二個,如下所示:

`li  t0,1(a0)`

給我一個分段錯誤。 在加載 0(a0) 之前使用左移邏輯也是如此。 我該如何解決這個問題?

它是一個 32 位平台,需要對齊訪問。 因此,如果a0被對准為4個字節,然后li t0,0(a0)將的第一個32位值加載a0t0 但是li t0,1(a0)將嘗試(並失敗)加載未對齊的 32 位值。

所以不要試圖一次加載一個字符。 接受 MIPS 32 一次加載 4 個字符(32 位)的事實。 您可以使用移位和按位與訪問單詞中的單個字符。

沒關系,這是我讓它工作的方式:

addu  a0,a0,t0    #t0 = i, a0 <- a0+i
lb    t2,0(a0)    #store array[i] in t2
subu  a0,a0,t0    #returns a0 to original value

例如,如果我想找到第二個字母,我會在 t0 中加載 1。

暫無
暫無

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

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