汇编MIPS不能从数组

时间:2016-06-07 14:13:17

标签: assembly mips

我有一个包含.space 36的数组,其中包含7个数字和8个字母。 (结构如下:xxxxxx11x11x111)

我可以成功加载前6个字符,但我无法加载第一个(和其他)数字。

我像这样迭代数组:

#5th char: the last x before the first 1
la $t0, array
lb $a0, 5($t0)

move $t0, $a0   
beq $t0, 'x', loop

这可以正常使用,但如果我写:

#6th position, the first number 1 of the sequence
la $t0, array
lw $a0, 6($t0)

move $t0, $a0   
beq $t0, 1, loop

它不起作用! (即使数字是1,它也不会产生正确的beq)

为什么呢?谢谢:))

我以这种方式实例化数组:

#Get the user input string and save it as an array
li $v0, 8
la $a0, array
li $a1, 36
syscall

1 个答案:

答案 0 :(得分:3)

它可能无法正常工作,因为执行加载字指令时出现对齐错误。 lw只能加载来自4的倍数的地址(0x1001000,0x1001004,0x1001008,0x100100c,0x1001010等)的数据。 lb(加载字节)然而不必担心对齐,因为你只加载一个字节而不是一个字。这个答案更详细地解释了它:

https://cs.stackexchange.com/questions/28962/how-in-hardware-mips-can-access-a-word-in-the-middle-of-an-address