MIPS32字数组

MIPS32 word array

我正在尝试将一个简单的 C 函数(它告诉您一个由字符数组构成的单词是否为回文)转换为 MIPS 32,但我在使用 getting 加载非多重 -数组的-4 个位置。

显然,

`li  t0,0(a0)`

加载首字母 (char),并且

`li  t0,4(a0)`

加载数组的第五个字母(我以为应该是第二个)。尝试加载第二个,如:

`li  t0,1(a0)`

给我一个分段错误。在加载 0(a0) 之前使用逻辑左移也是如此。我该如何解决?

这是一个 32 位平台,需要对齐访问。因此,如果 a0 对齐到 4 个字节,那么 li t0,0(a0) 会将 a0 的第一个 32 位值加载到 t0 中。但是 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。