C -MIPS32单词数组



我正在尝试翻译一个简单的C函数(告诉您一个由char数组制作的单词,是一个单词是一个单词)加载数组的4个位置的非元素。

显然,

`li  t0,0(a0)`

加载首字母(char)和

`li  t0,4(a0)`

加载阵列的第五个字母(我认为那将是第二个字母)。尝试加载第二个,如:

`li  t0,1(a0)`

给我一个细分故障。加载0(A0)之前,请使用Shift左逻辑。我该如何解决?

这是一个32位平台,需要对齐访问。因此,如果将a0对齐到4个字节,则li t0,0(a0)将加载a0的第一个32位值到t0中。但是li t0,1(a0)会尝试(并且失败)加载未对准的32位值。

因此,不要一次尝试加载一个字符。拥抱一个事实,即MIPS 32一次将一次加载4个字符(32位)。您可以使用shift and bitwise- and。

访问单词中的单个字符

没关系,这就是我的工作方式:

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个字母。

相关内容

  • 没有找到相关文章