Arrays 查找数组中的最大字(MIPS程序集)

Arrays 查找数组中的最大字(MIPS程序集),arrays,assembly,mips,Arrays,Assembly,Mips,我正在尝试使用assembly在数组中查找max单词。我已经写了以下内容,但我的循环似乎总是在分支。感谢您的帮助 解决方案在评论中,谢谢Jester # find max from array # .data array: .word 3, 4, 7, 6, 5 max: .word 0 .text # # -- register assignments -- # $2 = counter # $3 = sum # $6 = loop limit (20) # # counte

我正在尝试使用assembly在数组中查找max单词。我已经写了以下内容,但我的循环似乎总是在分支。感谢您的帮助

解决方案在评论中,谢谢Jester

# find max from array
#
.data
array:  .word   3, 4, 7, 6, 5
max:    .word   0
.text
#
# -- register assignments  --
# $2 = counter
# $3 = sum
# $6 = loop limit (20)
#
# counter = 0
    and $2, $0, $0
# sum = 0
    and $3, $0, $0
    addi    $6, $0, 20
loop:
# if array[i] < max save array[i] as max
    lw  $4, array($2)
    ble     $3, $4, incrementCount
    move    $3, $4
incrementCount:
# counter++
# (words are 4 bytes, so advance counter by 4)
    addi    $2, $2, 4
# if counter < 5, loop (really < 20)
    blt $2, $6, loop
done:   sw  $3, max
#从数组中查找max
#
.数据
数组:。字3、4、7、6、5
最大值:。字0
.文本
#
#--注册分配--
#$2=柜台
#$3=总数
#$6=循环限制(20)
#
#计数器=0
和2美元,0美元,0美元
#总和=0
和$3、$0、$0
加6美元,0美元,20美元
循环:
#如果数组[i]
您的
ble
的操作数顺序不正确。您首先设置
$3=0
,然后执行
ble$3,$4,递增计数
,即
if(0
sw$3,($4)
可能应该是
移动$3,$4
,因为$4不是地址。感谢您的更正,我已经进行了调整。我的程序似乎仍然没有分支。因此您的分支被反转,如果最大值小于当前值,您将跳过。您如何在调试器中逐步执行代码?太棒了。更改此:
ble$3,$4,递增计数
ble$4$3,递增计数
。谢谢!