打印hello,world
.data
msg: .ascii "Hello, World!\n\0" #一定要有\0结尾
.text
la $a0, msg #必须将msg放入$a0中
li $v0, 4 #必须将$v0的值设为4
syscall #开始打印!
打印整数
.data
myage: .word 20
.text
lw $t1, myage
move $a0, $t1
li $v0, 1
syscall
打印3.14(float类型)
.data
PI: .float 3.14
.text
li $v0, 2
lwc1 $f12, PI #必须是lwc1,c1表示Coproc 1。浮点数必须放在$f12中才能打印。
syscall
打印3.14(double类型)
.data
#f单数存float,f双数存double,float可以用double存,反之不行
.text
加法运算
.data
num1: .word 5
num2: .word 4
.text
lw $t1, num1($zero) #为什么要$zero ?
lw $t2, num2($zero)
add $a0, $t1, $t2 #减法换成add即可
li $v0, 1
syscall
mul乘法
.text
addi $t1, $zero, 5
addi $t2, $zero, 3
mul $t3, $t1, $t2
add $a0, $zero, $t3
li $v0, 1
syscall
mult乘法
.data
.text
addi $t1, $zero, 2000
addi $t2, $zero, 20
mult $t1, $t2
mflo $a0
li $v0, 1
syscall
左移运算
.data
.text
addi $t1, $zero, 4
sll $t2, $t1, 2 #相当于乘4
add $a0, $t2, $zero
li $v0, 1
syscall
函数:
.data
msg: .asciiz "Hi, I'm LeeVing!\n"
.text
main: jal display
li $v0, 10
syscall
display:
li $v0, 4
la, $a0, msg
syscall
jr $ra
函数的返回值:
.data
.text
main:
addi $a1, $zero, 10
addi $a2, $zero, 20
jal addNum
add $a0, $v1, $zero
addNum:
add $v1, $a1, $a2 #习惯将返回值放入Sv1中
jr $ra
s寄存器的保护
.data
endl: .asciiz "\n"
.text
main:
addi $s0, $s0, 10
jal increaseNum
#换行
la $a0, endl
li $v0, 4
syscall
#打印原来的s0
move $a0, $s0
li $v0, 1
syscall
#结束程序
li $v0, 10
syscall
increaseNum:
addi $sp, $sp, -4 #分配内存空间
sw $s0, 0($sp) #将$s0中的内容存入内存中
addi $s0, $s0, 66
move $a0, $s0
li $v0, 1
syscall
lw $s0, 0($sp) #将内存中的信息重写会$s0中
addi $sp, $sp, 4 #回收内存空间
jr $ra
函数嵌套出现的问题:
.data
endl: .asciiz "\n"
.text
main:
addi $s0, $s0, 10
jal increaseNum
#换行
la $a0, endl
li $v0, 4
syscall
#打印原来的s0
jal printValue
#结束程序
li $v0, 10
syscall
increaseNum:
addi $sp, $sp, -8 #分配内存空间
sw $s0, 0($sp) #将$s0中的内容存入内存中
sw $ra, 4($sp)
addi $s0, $s0, 66
jal printValue
lw $s0, 0($sp) #将内存中的信息重写会$s0中
lw $ra, 4($sp)
addi $sp, $sp, 8 #回收内存空间
jr $ra
printValue:
li $v0, 1
move $a0, $s0
syscall
jr $ra
输入整数
.data
age: .asciiz "Please enter your age: "
msg: .asciiz "\nyour age is: "
.text
la $a0, age
li $v0, 4
syscall
li $v0, 5
syscall
move $t0, $v0
la $a0, msg
li $v0, 4
syscall
move $a0, $t0
li $v0, 1
syscall
输入float
.data
msg: .ascii "Enter the value of PI: "
zeroValue: .float 0.0
.text
main:
#提示信息
la $a0, msg
li $v0, 4
syscall
#填充$f4
lwc1 $f4, zeroValue
#将float数读取至$f0
la $v0, 6
syscall
#将需要打印的float值放在$f12中
add.s $f12, $f0, $f4
#打印float值
li $v0, 2
syscall
输入double
.data
say: .asciiz "Enter the value of E: "
.text
main:
#打印提示信息
la $a0, say
li $v0, 4
syscall
#输入double数值
li $v0, 7
syscall
#将$f0中的结果放入$f12
add.d $f12, $f6, $f0 #$f6也可以改成$f8, $f10等偶数f寄存器
li $v0, 3
syscall
输入字符串
.data
msg: .asciiz "Please enter your name: "
say: .asciiz "hello, "
userInput: .space 30
.text
main:
la $a0, msg
li $v0, 4
syscall
la $a0, userInput
li $a1, 30 #必须强调输入字符串的最大长度
li $v0, 8 #输入字符串
syscall
la $a0, say
li $v0, 4
syscall
la $a0, userInput
li $v0, 4
syscall
li $v0, 10
syscall
beq, bne,bgt判断
.data
eq: .asciiz "They are equal!!!\n"
.text
main:
li $s1, 12
li $s2, 12
beq $s1, $s2, Equal
li $v0, 10
syscall
Equal:
la $a0, eq
li $v0, 4
syscall
slt rd, rs, rs 如果rs小于rt,则将rd设置为1,否则设置为0
.data
lessThan: .asciiz "The first number is less than the second number!!!"
.text
main:
li $t1, 10
li $t2, 20
slt $s0, $t1, $t2
bne $s0, $zero, Say
li $v0, 10
syscall
Say:
la $a0, lessThan
li $v0, 4
syscall
while循环(其实世界上本没有while循环)
.data
space: .asciiz ", "
.text
main:
li $t0, 1
while:
bgt $t0, 10, exit
jal printValue
addi $t0, $t0, 1
j while
exit:
li $v0, 10
syscall
printValue:
move $a0, $t0
li $v0, 1
syscall
li $v0, 4
la $a0, space
syscall
jr $ra
数组和while
.data
myArr: .space 100
space: .asciiz ", "
.text
#将1~20存入数组中,并逆序打印出来
main:
#$t0存储内容,$s0表示下标
li $t0, 1
li $s0, 0
#存数
while:
bgt $t0, 19, exit #为什么是19?
sw $t0, myArr($s0)
addi $t0, $t0, 1
addi $s0, $s0, 4
j while
exit:
#取数
whilee:
blt $t0, 1, exite
lw $a0, myArr($s0)
jal printValue
addi $t0, $t0, -1
addi $s0, $s0, -4
j whilee
exite:
li $v0, 10
syscall
printValue:
li $v0, 1
move $a0, $t0
syscall
li $v0, 4
la $a0, space
syscall
jr $ra
数组的初始化
.data
myArr: .word 10:5 #将myArr中的5个元素全部初始化为10
space: .asciiz ", "
.text
main:
li $t0, 1
li $s0, 0
li $s1, 0
while:
bgt $t0, 5, exit
jal printValue
addi $t0, $t0, 1
addi $s0, $s0, 4
j while
exit:
li $v0, 10
syscall
printValue:
li $v0, 1
lw $a0, myArr($s0)
addi $s1, $s1, 1
add $a0, $a0, $s1
syscall
li $v0, 4
la $a0, space
syscall
jr $ra
float + float
.data
.text
main:
981

被折叠的 条评论
为什么被折叠?



