MARS(MIPS汇编程序和运行时模拟器)

An IDE for MIPS Assembly Language Programming

简介

  官网上的说明:MARS is a lightweight interactive development environment (IDE) for programming in MIPS assembly language, intended for educational-level use with Patterson and Hennessy’s Computer Organization and Design.(MARS是一个轻量级的交互式开发环境(IDE),用于使用MIPS汇编语言进行编程,旨在与Patterson和Hennessy的计算机组织和设计一起用于教育级别。)
  目前最新版本为MARS 4_5
  是一个4MB左右的.Jar可执行文件,需要使用Java环境,如果有Java运行环境(JRE)可直接使用,否则应先下载JRE或JDK
  这里提供了不需要积分就可下载的JDK8和9的安装文件,都是64位windows安装程序,大家根据需要选择或自行去官网下载合适的版本:
  jdk-8u281-windows-x64.zip
  jdk-9.0.4_windows-x64_bin.zip

下载

  1. 百度搜索MARS MIPS simulator或者直接输入 http://courses.missouristate.edu/kenvollmar/mars/ 访问官网
  2. 点击下载最新版
      为了便于网速比较慢的小伙伴下载,这里上传了MARS的资源,不需要C币就可以下载:Mars4_5.zip

      这里下载下面的黄色提示需要注意一下,翻译是:“注意:您的MARS文字小得难以理解吗? 下载并使用新版本的Java 9,该Java 9包含一个修复程序,可以自动缩放和调整AWT和Swing组件的大小,以在Windows和Linux上显示每英寸高点(HiDPI)”。所以,如果大家觉得字体特别小的话,可以使用9及以上的JDK版本。

创建开始菜单快捷方式

  因为MARS是.jar文件,所以不能直接固定到“开始”屏幕,需要进行一些处理:

  1. 创建Mars4_5.jar的快捷方式
  2. 将快捷方式移动到开始菜单目录
    C:\Users\ XXX(实际的账户名称) \AppData\Roaming\Microsoft\Windows\Start Menu
  3. 在开始菜单搜索Mars,并右键选择 固定到“开始”屏幕

使用入门

Mars功能强大,具有代码提示,模拟运行,调试,统计等功能

  1. 界面简介
  2. 运行方法

示例1

#include <stdio.h>
int main(void)
{int r, x;x = 2;r = x + 3;printf("%d", r);return 0;
}

我们将上面的C语言代码转成mips汇编指令

  1. x = 2;

    #将t1寄存器的值置为2
    li $t1, 2
    
  2. r = x + 3;
    #将 t1寄存器中的数据加3,存到t0中 (t0 = t1 + 3)
    add $t0, $t1, 3
    
  3. printf("%d", r);
    $v0 = 1, syscall -> print_int
    $v0 = 4, syscall -> print_string,

    #将t0寄存器的值放到a0寄存器中
    move $a0, $t0
    #将v0寄存器的值置为1
    li $v0, 1
    #系统调用
    syscall
    

完整转换的mips指令

#将t1寄存器的值置为2
li $t1, 2
#将 t1寄存器中的数据加3,存到t0中 (t0 = t1 + 3)
add $t0, $t1, 3
#将t0寄存器的值放到a0寄存器中
move $a0, $t0
#将v0寄存器的值置为1
li $v0, 1
#系统调用
syscall

运行示例1:




可能遇到的问题

1、Windows询问如何打开这个文件

  这种情况一般是没有安装Java环境,下载安装JDK或JRE即可,当然,也有可能是下载的免安装版的JDK,这时就需要配置下环境变量了。

2、有Java环境却无法打开MARS,或双击无反应
  建议在mars所在的目录使用命令:java -jar Mars4_5.jarjavaw -jar Mars4_5.jar


(感谢评论区小伙伴提供的一个问题及解决方式)
3、安装了java之后双击Mars,系统提示以何种方式打开文件,在属性里把打开方式换为java会刚打开就闪退
  在classpath里添加D:/Mars4_5.jar(这里的路径需要大家根据自己的实际路径来设置),然后在命令行里用java -classpath %classpath% Mars,就可以打开了,但这种情况下不能关闭命令提示符,要不然mars也会退出。

环境变量配置:

运行示例:

  这里想到Windows下应该有类似于在Linux经常用到的nohup及&,经过查找,可以在命令前加上start /b来是实现Linux上的在命令结尾加&的效果,但是并没有找到类似nohup的命令。这就导致虽然运行转入了后台,但是关闭命令窗口依然会结束Mars的运行。

  所以目前比较好的解决方案是使用VBS脚本:
  ①新建一个文本文档,命名为Mars.txt(可以随意,只要能在用到的时候知道这个脚本是运行Mars的即可)

  ②双击打开此文本文档,复制如下代码,并保存。

Set Ws = CreateObject("Wscript.Shell")
Ws.Run("java -classpath %classpath% Mars"),0

  ③将此文本文档的.txt后缀名更改为.vbs

  至此,双击这个Mars.vbs即可运行Mars啦,而且不会有多余的命令窗口存在。

MARS(MIPS汇编程序和运行时模拟器)相关推荐

  1. 自定义汇编程序,Weaver和运行时的可插拔知识

    作为贝叶斯工作的一部分,我对Kie进行了很多重构,使其具有清晰的扩展点. 我想确保可以完成贝叶斯系统的所有工作部件,而无需在现有内核中添加任何代码. 因此,现在每种知识类型都可以拥有自己的包,汇编器, ...

  2. dream weaver_具有定制汇编程序,Weaver和运行时的可插拔知识

    dream weaver 作为贝叶斯工作的一部分,我对Kie进行了很多重构,使其具有清晰的扩展点. 我想确保贝叶斯系统的所有工作部分都可以完成,而无需在现有内核中添加任何代码. 因此,现在每种知识类型 ...

  3. shader weaver_具有自定义汇编程序,Weaver和运行时的可插拔知识

    shader weaver 作为贝叶斯工作的一部分,我对Kie进行了很多重构,使其具有清晰的扩展点. 我想确保可以完成贝叶斯系统的所有工作部件,而无需在现有内核中添加任何代码. 因此,现在每种知识类型 ...

  4. 什么叫编译时和运行时

    以前经常听说编译时和运行时的概念.但没太搞明白具体代表啥意思.后面花了点时间研究了下.总算知道个大概意思了. 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能 ...

  5. 编译时异常和运行时异常的区别

    编译时异常和运行时异常的区别 参考文章: (1)编译时异常和运行时异常的区别 (2)https://www.cnblogs.com/lxl57610/p/6716252.html (3)https:/ ...

  6. Go 语言的垃圾回收演化历程:垃圾回收和运行时问题

    Google Go 团队的成员 Richard L. Hudson (Rick) 近日在 Go 的官方博客和大家分享了他在2018年6月18日国际内存管理研讨会(ISMM)上发表的主题演讲稿.在过去的 ...

  7. Java受查异常和运行时异常的理解

    Java受查异常和运行时异常的理解 概念与理解 怎么处理 概念与理解 Java提供三种可抛出结构(throwable):受查异常(checked exception),运行时异常(runtime ex ...

  8. 3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)

    3.JVM内存分配 3.1.内存分配概述 3.2.内存分配–Eden区域 3.3.内存分配–大对象直接进老年代 3.3.1.背景 3.3.2.解析 3.4.内存分配–长期存活的对象进去老年代 3.5. ...

  9. jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区

    jvm运行时类加载机制 各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构. 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行 ...

最新文章

  1. linux设置nexus开机自启动_在linux中使用nexus搭建maven私服
  2. 极光推送收不到推送消息
  3. makefile笔记
  4. 盖瑞解剖学: 临床实践的解剖学基础 Gray‘s Anatomy: The Anatomical Basis of Clinical Practice 高清英文原版
  5. Mvc5 控制器,视图简单说明
  6. 惠新宸php教程_百度PHP高级顾问惠新宸:PHP在百度的发展历程
  7. html垂直边距,html – Styling Bootstrap的btn-group-justified,添加边距和垂直尺寸
  8. 微服务升级_SpringCloud Alibaba工作笔记0004---认识spring gateway理解新一代网关
  9. p67对应的服务器芯片组,使用 H67/P67 高速芯片组 Express 芯片组测试了适用于英特尔®台式机主板的外设...
  10. 如何计算代码运行的时间?
  11. MATLAB实现香农编码
  12. Krpano vtourskin.xml 默认皮肤详解
  13. 孩子给产品经理的一堂课
  14. 微信小程序入门(一)微信小程序注册申请
  15. 怎么访问云服务器上的图片
  16. instagram获取图片地址和视频地址
  17. ensp 防火墙 pat 映射
  18. centos8安装docker运行java文件
  19. 什么是HTTP状态码 常见状态码集合
  20. 统计分析中贝叶斯学派介绍

热门文章

  1. IDEA配合Flash CS6开发Flash项目--配置篇
  2. java练习 输出100以内的质数
  3. 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
  4. OwnCloud私有云服务搭建教程
  5. css让两个div各自在两边的样式
  6. 使用NI-DAQmx获取设备名及物理通路名
  7. AT89C51 与 AT89S51/52 的区别
  8. 计算机考研学校报录比,【22考研】热门院校报录比汇总
  9. PCB板材知识及标准
  10. PM如何整合资源——来自项目管理群的讨论[转]