代码之家  ›  专栏  ›  技术社区  ›  martincito

MIPS32字数组

  •  -1
  • martincito  · 技术社区  · 7 年前

    显然地

    `li  t0,0(a0)`
    

    加载第一个字母(char),并

    `li  t0,4(a0)`
    

    `li  t0,1(a0)`
    

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   John Zwinck    7 年前

    它是一个32位平台,需要对齐访问。所以如果 a0 对齐到4个字节,然后 li t0,0(a0) a0 进入 t0 li t0,1(a0) 将尝试(但失败)加载未对齐的32位值。

    所以不要试图一次加载一个字符。接受这样一个事实,即MIPS 32一次将加载4个字符(32位)。您可以使用shift和按位and访问单词中的单个字符。

        2
  •  0
  •   martincito    7 年前

    没关系,我是这样做的:

    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