Mars简介

An IDE for MIPS Assembly Language Programming.
MARS是一个轻量级的交互式开发环境(IDE),用于使用MIPS汇编语言进行编程,旨在与Patterson和Hennessy的计算机组织和设计一起用于教育级别。)

我为什么要自己写这篇教程???

之前通过学习cs61c 也已经掌握了不少的 mips 汇编指令, 但都只是在纸上写,没有真正的验证. 于是乎下载了 Mars, 却无法做到完整的汇编出 mips 代码,所以想要知根知底的搞清楚,要怎样用怎样的格式写才能被 Mars 所接受. 在网上看过不少的基础教程,但都没有讲到Mars的编写格式与特斯特性。所以就有了这篇文章。

基础知识

在了解基本使用之前,需要了解一些基础知识
宏汇编语言有3类基本指令:符号指令、伪指令和宏指令。

1. 伪指令

伪指令只为汇编程序将符号指令翻译成机器指令提供信息,没有 与它们对应的机器指令

.set push/.set pop等等。

2. 宏指令

把一个指令序列定义为一条宏指令, 便于书写

指令
li $t1,40
是一条伪指令,在汇编器中会转换成
addi $t1,$zero,40
但是
li $t1,-4000000
因为数字太大,需要拆开,则会被转换成
lui $at,0xffc2
ori $t1,$at,0xf700
这之中,$at就作为一个中间变量来用的

3. 符号指令

一. MIPS程序结构

必须这样写 Mars 才能成功汇编

.data
.text#开始你的 mips 代码
main:
#.......

1.Data Declarations

在.data指令之后:将程序将使用的数据存储在RAM中。

2.Code

在.text指令后:包括程序代码,其中程序代码的起点是main:指令,并用syscall结束程序。

3.Comments

注释不用说了 ~注释符号是#

二. 如何输入输出???

Use syscall to call operating system routine call, 把对应的系统服务编码放进v0中,再syscall就可以调用相应的系统服务。系统调用是操作系统提供的一组服务。要使用系统调用,需要将调用代码放入v0中,再syscall就可以调用相应的系统服务。 系统调用是操作系统提供的一组服务。要使用系统调用,需要将调用代码放入v0中,再syscall就可以调用相应的系统服务。系统调用是操作系统提供的一组服务。要使用系统调用,需要将调用代码放入 v0寄存器以进行所需操作。如果系统调用有参数,则将它们放在$ a0- $ a2寄存器中。

Syscall 是Mars 中输出的方式. 通过将 $v0 设置成不同的值来在控制台输出 不同register中的值(会以不同的输出方式),
详情见下表:
http://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html
如果懒得看,这里提供给一个最基本的程序范例:

输出

.data
.text
main:addi $a0 $zero 666addi $v0 $zero 1 #v0设置为1,  代表 syscall 将输出 $a0 register 的值syscall

结果输出: 666

输入

data
.text
main:li $v0 5 #v0设置为5,  代表 syscall 将从键盘缓冲区读入一个数进v0syscalladd $a0 $v0 $zeroli $v0 1 #syscall

输出

二. Mars 的新手"陷阱"

1. main 函数的返回值

c语言中 main 函数为

int main()
{func();return 0;
}

在 MIPS 中要写成如下形式:

main:
jal func
addi $v0 $v0 10 #v0设置为10,  代表 syscall 将执行 exit
syscall

这是因为 main 没有其调用者, 所以 $ra 为 0, 关于 $ra, The correct way to end a program on MARS is using the “exit” syscall.
即:

addi $v0 $v0 10
syscall

并且将 main 过程放在所有函数之前.

2. mips 调用子程序

  • 主程序与子程序之间的转返
    调用:jal func
    返回:jr $ra

  • 主程序与子程序间的信息传递
    通过公用寄存器实现

  • 主程序和子程序公用寄存器的问题
    使用栈解决

Mars 模拟器编写 mips32 汇编 的入门教程相关推荐

  1. 前端开发入门教程-HTML标签(上)

    本文素材来源于黑马程序员pink老师的前端教学视频.在此基础上有部分改动. 博客文章: https://blog.manchan.top/post/introduction-to-front-end- ...

  2. 【Gazebo入门教程】第六讲 控制器插件的编写与配置(下)

    [Gazebo入门教程]第六讲 控制器插件的编写与配置(下) \qquad 文章目录 [Gazebo入门教程]第六讲 控制器插件的编写与配置(下) 一.系统插件 二.Velodyne传感器插件 1. ...

  3. 【Gazebo入门教程】第五讲 控制器插件的编写与配置(上)

    [Gazebo入门教程]第五讲 控制器插件的编写与配置(上) 文章目录 [Gazebo入门教程]第五讲 控制器插件的编写与配置(上) 一.控制插件的使用方法 1. 插件简介 2. 插件编写流程 二.模 ...

  4. 用python写脚本看什么书-终于知晓python编写脚本入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  5. oracle sql 调用自定义函数_PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)...

    PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)​mp.weixin.qq.com https://www.zhihu.com/video/12422083467175 ...

  6. MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排

    本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:156204968@qq.com. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于 ...

  7. SEO零基础入门教程(外链的发布和软文编写)

    seo的作用是众所周知的,对网站进行seo优化,可以给网站带来大量的搜索引擎流量.但是想要做好网站优化也有难度,尤其是对于seo新手来说,因为缺乏理论和实战,所以seo新手需要多加练习.那么具体seo ...

  8. C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果

    C#,入门教程(01)-- Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123 ...

  9. Linux pwn入门教程——CTF比赛

    Linux pwn入门教程(1)--栈溢出基础 from:https://zhuanlan.zhihu.com/p/38985585 0x00 函数的进入与返回 要想理解栈溢出,首先必须理解在汇编层面 ...

最新文章

  1. Linux系统自动更新时间
  2. 栏目图片 栏目描述_昕街拍|长期福利栏目来啦,秀街拍赢礼品!
  3. kibana 更新 索引模式_Kibana对索引动态加字段显示
  4. 电脑休眠和睡眠的区别_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机...
  5. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
  6. Apsara Stack 技术百科 | 可运营的行业云,让云上资源跑起来
  7. 前端开发 常见的网页导航制作 0228
  8. C++ set与map、unordered_map、unordered_set与哈希表
  9. Eclipse单行和多行注释快捷键以及撤销注释
  10. 李彦宏:百度今年全员涨薪,比去年还多;谷歌暂停Chrome浏览器更新;Eclipse 4.15发布 | 极客头条...
  11. Tensorflow:分类模型评估
  12. 计算机做无线AP共享文件,Win7开启AP无线一键共享网络(包括闪讯)给wifi设备使用!...
  13. sql limit不接具体数字_MySQL的Limit 性能差?真的不能再用了?
  14. Pyts入门之时间序列的分解---奇异谱分析(七)
  15. LabelMe标注的.json文件批量转Dataset,通过查询到多种代码无法在我电脑上正常工作,发现他们有共同的报错,于是修改后能正常工作。
  16. H5新特性 - 新增标签
  17. Fiddler抓手机app的包
  18. 修改Chrome默认的搜索引擎
  19. 卸载WPS后,原office出现各种问题,报错,图标混乱
  20. RDD编程初级实践(期末大作业)

热门文章

  1. 【C】牛客网 编程入门训练138道题
  2. C#特性——Description
  3. AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
  4. 计算机不能上网查找原因的步骤,电脑不能上网的原因及操作步骤_电脑突然不能上网...
  5. 英文歌曲:What I Have Done(变形金刚第一部主题曲)
  6. C# 流不可读 解决办法
  7. 外网访问8080以及80端口失败问题解决
  8. 本科去向选择之一——工作
  9. (字符串分解器)StringTokenizer类的使用_无名小仙男
  10. 《我想进大厂》之Dubbo普普通通9问