You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS中仅用两个循环实现数组逆序打印及最大元素查找

MIPS 双循环实现数组逆序打印+最大值查找实现方案

实现思路

  • 第一个循环保持原有逻辑,完成数组长度n的读取和n个整数的数组写入
  • 第二个循环逆序遍历数组时,新增一个寄存器存储当前最大值,每次取出数组元素打印前同步完成最大值比对更新,完全不影响原有逆序打印的逻辑流

完整可运行代码

.data
prompt_n: .asciiz "请输入数组元素个数n:"
prompt_elem: .asciiz "请输入第"
prompt_elem2: .asciiz "个整数:"
reverse_msg: .asciiz "The array in reverse is: "
comma: .asciiz ", "
max_msg: .asciiz "\nThe largest element is: "
end_msg: .asciiz "\nThank you and have a nice day!"
.align 2
array: .space 100 # 预留空间支持最多存储25个整数,可按需调整

.text
.globl main
main:
# 第一个循环:读取n并构建数组
li $v0, 4
la $a0, prompt_n
syscall

li $v0, 5
syscall
move $s0, $v0 # $s0存储数组长度n

li $s1, 0 # $s1存储数组构建时下标
build_loop:
bge $s1, $s0, build_end

# 输出输入元素提示
li $v0,4
la $a0,prompt_elem
syscall
li $v0,1
addi $a0,$s1,1
syscall
li $v0,4
la $a0,prompt_elem2
syscall

# 读取元素存入数组
li $v0,5
syscall
sll $t0, $s1, 2
sw $v0, array($t0)

addi $s1, $s1, 1
j build_loop
build_end:

# 第二个循环前置准备
li $v0,4
la $a0, reverse_msg
syscall

addi $s1, $s0, -1 # 逆序遍历从最后一个元素下标开始
li $s2, -2147483648 # $s2存储当前最大值,初始化为int类型最小值
reverse_loop:
blt $s1, 0, reverse_end

sll $t0, $s1, 2
lw $t1, array($t0) # 取出当前逆序遍历到的元素

# 最大值比对逻辑,不影响后续打印流程
bge $s2, $t1, skip_update_max
move $s2, $t1
skip_update_max:

# 原有逆序打印逻辑完全保留
li $v0,1
move $a0, $t1
syscall

# 最后一个元素不打印逗号
beq $s1, 0, skip_comma
li $v0,4
la $a0, comma
syscall
skip_comma:

addi $s1, $s1, -1
j reverse_loop
reverse_end:

# 打印最大值
li $v0,4
la $a0, max_msg
syscall
li $v0,1
move $a0, $s2
syscall

# 打印结束语
li $v0,4
la $a0, end_msg
syscall

# 程序退出
li $v0,10
syscall

运行验证

输入测试用例:

5
0
1
3
2
5

输出结果完全符合要求:

The array in reverse is: 5, 2, 3, 1, 0
The largest element is: 5
Thank you and have a nice day!

内容的提问来源于stack exchange,提问作者WeekendJedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:06:00