您好我制作了一个MIPS汇编代码来打印数组的最大值,但它无法正常工作。
相反,它总是在数组中打印最新值。这是代码:
我希望当$a0
(最大值)小于$a1
(当前向量元素)$a3
时,它被设置为true,因此bgtz $a3,if
的计算结果为true并且执行被分支到if
,其中数组值被复制到$a0
。否则,当$a0
大于$a1
时,$a3
就是0
设置为bgtz $a3,if
,因此$a1
的计算结果为false,因此它执行跟随它的跳转指令,其目的是执行其余代码而不将$a0
值加载到{{1 }}。问题是跳转指令似乎没有被执行,因为它在每次循环迭代中将$a1
值加载到$a0
中。我做错了什么?
.text
.globl main
main:
li $a0,0
la $a1,$vector
li $a2,4
jal maior # maior
li $v0,1 # imprime o resultado
syscall
li $v0,10 # termina
syscall
maior:
subu $sp,$sp,8 # Abre um espaco na pilha
loop:
subu $a2,$a2,1
slt $a3,$a0,$a1
bgtz $a3,if
j else
if:
lw $a0,0($a1)
else:
addu $a1,$a1,4
bgtz $a2,loop
addu $sp,$sp,8 # retira o espaco ocupado na pilha
jr $ra
.data
$vector: .word 26, 21, 22, 24`
答案 0 :(得分:0)
这里的问题是你说当$a1
实际包含当前向量地址时$a1
包含当前向量元素。
要更改此设置,我会将$t0
的加载引入.text
.globl main
main:
li $a0,0
la $a1,$vector
li $a2,4
jal maior # maior
li $v0,1 # imprime o resultado
syscall
li $v0,10 # termina
syscall
maior:
subu $sp,$sp,8 # Abre um espaco na pilha
loop:
subu $a2,$a2,1
lw $t0,0($a1)
slt $a3,$a0,$t0
bgtz $a3,if
j else
if:
move $a0,$t0
else:
addu $a1,$a1,4
bgtz $a2,loop
addu $sp,$sp,8 # retira o espaco ocupado na pilha
jr $ra
.data
$vector: .word 21, 26, 22, 24
,如下所示:
{{1}}