MIPS 汇编基础
程序结构(.data/.text/.globl main)、常用寄存器($t0–$t9, $v0, $a0–$a3)、核心指令(li/la/add/sub/mul/div/move)、syscall(打印/读入/退出),挑战练习:bad_pun.s 与 gaussian_sum.s。
bad_pun.s
.data
msg: .asciiz "Hello from MIPS!" # 以\0结尾的字符串
.text
.globl main
main:
li $v0, 4 # print_string
la $a0, msg # $a0 ← 字符串地址
syscall
li $v0, 10 # exit
syscall
gaussian_sum.s
# 读入 n,计算 n(n+1)/2 并打印
.data
prefix: .asciiz "Sum = "
nl: .asciiz "\n"
.text
.globl main
main:
# read n
li $v0, 5 # read_int
syscall
move $t0, $v0 # t0 = n
# compute n(n+1)/2 -> 两种思路可选
addi $t1, $t0, 1 # t1 = n + 1
mul $t2, $t0, $t1 # t2 = n * (n + 1)
sra $t2, $t2, 1 # t2 = t2 / 2 (正数安全)
# print "Sum = "
li $v0, 4
la $a0, prefix
syscall
# print number
li $v0, 1
move $a0, $t2
syscall
# print newline
li $v0, 4
la $a0, nl
syscall
# exit
li $v0, 10
syscall
Tips: 可用 div 指令代替右移;注意负数/溢出场景的处理策略。