LW 和 LB 结果相同
LW and LB the same result
我只想有一个数组来计算所有数字的总和。我不确定如何将每个位置存储到一个变量中,所以我尝试了 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
根据LB
的描述:
The contents of the 8-bit byte at the memory location specified by the effective address are fetched, sign-extended, and placed in GPR rt
.
two's complement signed byte is -128..+127, so all the values in your array are small enough to be representable in one byte. That together with the fact that LB
sign-extends and that your target "machine" (I'm guessing that you're using SPIM or MARS) is little-endian 的范围意味着当您使用 LB
从数组中加载时,您将获得与使用 LW
.[=23= 时相同的结果]
例如,-17
写成十六进制字时的值是 0xFFFFFFEF
。在小端系统上,该字的字节首先存储最低有效字节,即 0xEF,0xFF,0xFF,0xFF
。因此,当您从该元素 lb
得到 0xEF
符号扩展为 0xFFFFFFEF
.
我只想有一个数组来计算所有数字的总和。我不确定如何将每个位置存储到一个变量中,所以我尝试了 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
根据LB
的描述:
The contents of the 8-bit byte at the memory location specified by the effective address are fetched, sign-extended, and placed in GPR
rt
.
two's complement signed byte is -128..+127, so all the values in your array are small enough to be representable in one byte. That together with the fact that LB
sign-extends and that your target "machine" (I'm guessing that you're using SPIM or MARS) is little-endian 的范围意味着当您使用 LB
从数组中加载时,您将获得与使用 LW
.[=23= 时相同的结果]
例如,-17
写成十六进制字时的值是 0xFFFFFFEF
。在小端系统上,该字的字节首先存储最低有效字节,即 0xEF,0xFF,0xFF,0xFF
。因此,当您从该元素 lb
得到 0xEF
符号扩展为 0xFFFFFFEF
.