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

大一CS学生求助:SPIM环境下MIPS平方立方表程序入门指导

MIPS汇编实现平方立方表入门指南

先给你一个能直接在SPIM上运行的完整示例,再拆解每部分的作用,帮你快速入门:

.data
prompt: .asciiz "请输入表格的最大值: "
format: .asciiz "%d\t%d\t%d\n"  # 输出格式:数字、平方、立方,用制表符分隔

.text
.globl main

main:
    # 1. 提示用户输入最大值
    li $v0, 4          # syscall编号4:打印字符串
    la $a0, prompt     # 加载提示字符串地址到$a0
    syscall            # 执行系统调用

    # 2. 读取用户输入的最大值,存入$s0
    li $v0, 5          # syscall编号5:读取整数
    syscall
    move $s0, $v0      # 将输入的max值保存到$s0

    # 3. 初始化循环变量i=1,存入$s1
    li $s1, 1

loop:
    # 4. 判断i <= max?如果i>max就跳出循环
    bgt $s1, $s0, exit_loop

    # 5. 计算i的平方:i*i,存入$s2
    mul $s2, $s1, $s1

    # 6. 计算i的立方:i*i*i = 平方*i,存入$s3
    mul $s3, $s2, $s1

    # 7. 打印当前行:i、平方、立方
    li $v0, 127        # SPIM中用syscall 127调用printf(部分版本用100,可按需替换)
    la $a0, format     # 加载格式字符串地址
    move $a1, $s1      # 第一个参数:i
    move $a2, $s2      # 第二个参数:平方
    move $a3, $s3      # 第三个参数:立方
    syscall

    # 8. i自增1
    addi $s1, $s1, 1

    # 回到循环开头
    j loop

exit_loop:
    # 退出程序
    li $v0, 10         # syscall编号10:退出程序
    syscall

关键部分拆解

  • .data段:存放字符串常量,prompt是提示用户输入的文字,format对应输出的格式模板,逻辑和C语言printf的格式串一致。
  • .text段:程序执行代码的存放区,main是程序的入口。
  • 系统调用(syscall):MIPS通过该指令调用系统功能,不同$v0值对应不同操作:
    • 4:打印字符串,需将字符串地址传入$a0
    • 5:读取整数,结果存在$v0中
    • 10:退出程序
    • 127/100:SPIM环境调用标准C的printf,参数依次存入$a0(格式串)、$a1、$a2、$a3
  • 循环逻辑:用bgt(大于则跳转)判断循环终止条件,j跳转回循环开头,addi实现循环变量i的自增。
  • 乘法计算:mul指令用于整数乘法,mul $d, $s, $t表示$d = $s * $t,刚好用来计算平方和立方。

兼容方案(若printf调用失败)

如果你的SPIM版本不支持syscall 127/100,可以改用MIPS原生打印指令逐个输出,替换原打印部分代码:

# 打印i
li $v0, 1
move $a0, $s1
syscall

# 打印制表符
li $v0, 11
li $a0, 9
syscall

# 打印平方
li $v0, 1
move $a0, $s2
syscall

# 打印制表符
li $v0, 11
li $a0, 9
syscall

# 打印立方
li $v0, 1
move $a0, $s3
syscall

# 打印换行
li $v0, 11
li $a0, 10
syscall

这种方式不依赖printf兼容性,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:35:23