LW和LB的结果相同

时间:2015-01-16 12:57:21

标签: assembly mips

我只想要一个数组来计算所有数字的总和。我不确定如何将每个位置存储到变量中,所以我尝试了lb $t5, ($s1)并且它有效,但是当我将其更改为lw $t5, ($s1)时,它再次起作用。我知道这不对,lw命令加载4个字节,lb命令加载1个字节。我相信正确的解决方案是使用lw,因为我将指针增加了4次。 lb无法正常工作。该命令是评论开始的时间。

.data

arr: .word 1, 15, 0, -3, 99, 48, -17, -9, 20, 15

.text
main:

addi $s0, 10 #size=10
addi $t0, 0 #sum =0
addi $t4, 0

la $s1, arr

Loop:
slt $t3, $t4, $s0
beq $t3, $zero, End



lb $t5, ($s1) ##########   HERE  ##############
li $v0, 1 
move $a0, $t5


add $t0, $t0, $t5

add $t4, $t4, 1 
addi $s1, $s1, 4
j Loop


End:

li $v0, 1 
add $a0, $t0, $zero
syscall

li $v0,10
syscall

1 个答案:

答案 0 :(得分:4)

来自LB的说明:

  

获取有效地址指定的存储单元位的8位字节内容,符号扩展,并放入GPR rt

two's complement有符号字节的范围是-128 .. + 127,因此数组中的所有值都足够小,可以在一个字节中表示。这与LB签署延伸的事实以及您的目标"机器" (我猜测您正在使用SPIM或MARS)little-endian表示当您使用LB从阵列加载时,您将获得相同的结果你使用LW

例如,当作为十六进制字写出时,值-170xFFFFFFEF。在小端系统上,该字的字节首先以最低有效字节存储,即0xEF,0xFF,0xFF,0xFF。因此,当您从该元素lb获得0xEF时,会将0xFFFFFFEF符号扩展为{{1}}。