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。
我正在尝试将一个简单的 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。