这个博客讲的很好【十分钟教会你汇编】MIPS编程入门(妈妈说标题要高大上,才会有人看>_<!)
总览
程序分为数据段和代码段:
.data 声明变量
.text 书写代码
数据段
变量名:数据类型 变量值
代码段
指令
mcf1
在MIPS汇编语言中,mfc1 指令用于将浮点寄存器的内容转移到整数寄存器中。
mfc1 $t0, $f0
//这条指令的作用是从浮点寄存器 $f0 中读取值,并将其转换为整数(如果是必要的话),然后存储到整数寄存器 $t0 中。
srl/sll
逻辑右移和逻辑左移操作。
sll $rd, $rt, shamt
//将寄存器$rt中的值向左逻辑移动shamt位。最右边空出来的位用0填充。结果存入寄存器$rd。
srl $rd, $rt, shamt
//将寄存器$rt中的值向右逻辑移动shamt位。最左边空出来的位用0填充。结果存入寄存器$rd。
syscall
syscall 为系统调用指令,能够方便我们在Mars上进行预览。
利用syscall输出结果的步骤:
1.在寄存器$v_0$中加载服务器号
2.如果有参数值,在$$a_0,$a_1,$a_2$或者$$f_{12}$中载入参数值
3.发出syscall指令
4.从指定的结果寄存器中检索返回值(如果有)。
la $a0,msg_fv
li $v0,4 //加载服务代码4
syscall //打印$a0里面的字符串
li 是 MIPS 汇编语言中的一个伪指令,代表“Load Immediate”。它用于立即将一个立即数加载到一个寄存器中。
以下是MIPS中一些常用系统调用的简要概述:
打印整数 (print_int/printf):
服务代码:1
用法:$v0 = 1, $a0 = 要打印的整数
打印字符串 (print_string/puts):
服务代码:4
用法:$v0 = 4, $a0 = 字符串地址
读取整数 (read_int):
服务代码:5
用法:$v0 = 5, 读取的整数将被存放于 $v0
打印字符:
服务代码:6
用法:$v0 = 6, 打印的字符将被存放于 $v0
读取字符:
服务代码:12
用法:$v0 = 12, 读取的字符将被存放于 $v0
退出程序 (exit):
服务代码:10
用法:$v0 = 10, $a0 = 退出状态码(通常0表示正常退出)
在使用这些系统调用时,程序会暂停执行当前任务,转而执行操作系统提供的服务,完成后控制权再返回到用户程序。