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个寄存器,分别是:
- AC (Accumulator):通用寄存器、累加器,用于保存中间数据、运算结果。
- PC (Program Counter):程序计数器,指向内存中下一条要执行的指令。
- MAR (Memory Access Register):内存访问寄存器,与地址线相连,用于保存数据或指令的地址。
- MBR (Memory Buffer Register):内存缓冲寄存器,与数据线相连,在将数据传输到内存或从内存取数据时存储数据。
- IR (Instruction Register):指令寄存器,存放当前在执行的指令。
- 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