我正在尝试翻译一个简单的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个字母。