【MARIE】嵌入式系统设计半期报告:MARIE模拟器的使用

1.模拟器介绍

1.1 体系结构

MARIE ('Machine Architecture that is Really Intuitive and Easy') 是一种机器架构和汇编语言。发布者还为机器提供了一组用 Java 编写的模拟器程序。MARIE.js 是 MARIE 的 JavaScript 版本实现。它旨在尽可能忠实于原始 Java 程序,同时改进功能以使概念更直观、更易于理解。

MARIE是冯·诺依曼架构的简单实现,如下图所示:

图1 MARIE体系结构

汇编语言是从机器语言(即二进制代码)中抽象出来的最低级别的语言。每条指令对应于它的二进制表示。有几种汇编语言,每种汇编语言对应一种机器架构。更为熟悉的架构如 x86、 ARM 和 MIPS ,它们都相当复杂,而 MARIE 设计得更容易理解。

MARIE架构有7个寄存器,分别是:

  1. AC (Accumulator):通用寄存器、累加器,用于保存中间数据、运算结果。
  2. PC (Program Counter):程序计数器,指向内存中下一条要执行的指令。
  3. MAR (Memory Access Register):内存访问寄存器,与地址线相连,用于保存数据或指令的地址。
  4. MBR (Memory Buffer Register):内存缓冲寄存器,与数据线相连,在将数据传输到内存或从内存取数据时存储数据。
  5. IR (Instruction Register):指令寄存器,存放当前在执行的指令。
  6. Out、In寄存器:输出、输入寄存器,I/O时会使用这两个寄存器。

MAR和PC因为和内存地址交互,只有12位,其余5个寄存器均为16位。存储器按字编址,容量为4K字。

1.2 主要指令集

在 MARIE 中,每条指令长16位,前4位代表操作码,其余12位代表地址。以下是常用的指令(并非全部)的表格:

指令

操作码

简述

Add X

3

地址X的内容与AC相加,结果保存到AC中

Subt X

4

AC减去地址X的内容,结果保存到AC中

Addl X

B

将X作为操作数的指针,与AC相加,并保存到AC中

Clear

A

将AC清零

表1 算术运算指令

指令

操作码

简述

Load X

1

从内存地址X中取数存到AC

Store X

2

将AC的值存入地址为X的内存中

Loadl X

D

将X处存储的内容作为指针,获取操作数存入AC

Storel X

E

将X处存储的内容作为指针,将AC的值存入指向的内存

表2 数据传送指令

指令

操作码

简述

Input

5

要求用户输入一个值,存入AC

Output

6

将AC的值输出

表3 输入输出指令

指令

操作码

简述

Jump X

9

跳转到地址X

Skipcond(C)

8

通过判断AC和C的值,选择是否跳过下一条语句的执行

跳转条件:

C=000&&AC<0

C=400&&AC=0

C=800&&AC>0

Halt

7

终止程序

表4 控制、分支指令

报告下载:

https://download.csdn.net/download/qq_61814350/89291081

参考文章:

 https://blog.csdn.net/Ying_Lang/article/details/123637858

marie模拟器官网: 

 https://marie.js.org/

 官方参考文档:

https://github.com/MARIE-js/MARIE.js/wiki

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701571.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教学辅助平台的主要使用者分…

flutter开发实战-compute将工作交由isolate处理

flutter开发实战-compute将工作交由isolate处理 最近查看flutter文档时候&#xff0c;看到了compute可以将工作交由isolate处理。通过 Flutter 提供的 compute() 方法将解析和转换的工作移交到一个后台 isolate 中。这个 compute() 函数可以在后台 isolate 中运行复杂的函数并…

第十一届蓝桥杯大赛软件类决赛 Java A 组

文章目录 发现宝藏【考生须知】试题 A: 合数个数试题 B : 含 2 天数试题 C: 本质上升序列试题 D: 迨尺天涯试题 E: 玩具蛇试题 F: 游园安排试题 G: 画廊试题 H: 奇偶覆盖试题 I: 补给试题 J: 蓝跳跳 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关&#xff1f; 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…

排序(一)----冒泡排序,插入排序

前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的序列&#xff0c;每次比较相邻…

从零开始:C++ String类的模拟实现

文章目录 引言1.类的基本结构2.构造函数和析构函数3.基本成员函数总结 引言 在C编程中&#xff0c;字符串操作是非常常见且重要的任务。标准库中的std::string类提供了丰富且强大的功能&#xff0c;使得字符串处理变得相对简单。然而&#xff0c;对于学习C的开发者来说&#x…

目标检测算法YOLOv6简介

YOLOv6由Chuyi Li等人于2022年提出&#xff0c;论文名为&#xff1a;《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2209.02976 &#xff0c;项目网页&#xff1a;https://github.c…

【学习笔记】C++每日一记[20240513]

简述静态全局变量的概念 在全局变量前加上static关键字&#xff0c;就定义了一个静态全局变量。通常情况下&#xff0c;静态全局变量的声明和定义放在源文件中&#xff0c;并且不能使用extern关键字将静态全局变量导出&#xff0c;因此静态全局变量的**作用于仅限于定义静态全…

pr中镜头防抖动

无人机在风大的时候,拍摄的视频就会有抖动,可以利用pr中的变形稳定器来消除这种抖动. 具体路径在:效果-扭曲-变形稳定器,将其拖动到视频轨道上,等待分析完成即可.

鸿蒙内核源码分析 (TLFS 算法篇) | 图表解读 TLFS 原理

动态分配 本篇开始说一个耳朵听起老茧的概念 动态分配&#xff0c;将分成上下两篇&#xff0c;本篇为上篇&#xff0c;看完能快速理解下篇鸿蒙内核源码对动态内存的具体实现。 鸿蒙内核源码分析(TLFS算法) 结合图表从理论视角说清楚 TLFS 算法鸿蒙内核源码分析(内存池管理) 结…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

idea连接远程仓库

git ->克隆。 url为远程仓库的地址&#xff0c;输入好后&#xff0c;选择项目存放目录&#xff0c;再点击克隆 点击新窗口打开。 切换到对应分支