上传者: 61814350
|
上传时间: 2025-04-20 10:40:42
|
文件大小: 956KB
|
文件类型: DOCX
报告内容
自学Marie模拟器(https://marie.js.org/)。
编写简单程序,观察程序进程,截屏说明各个寄存器的变化
学习总结
----------------
已经排好版,编辑好页码和字体。
目录
1.模拟器介绍
1.1 体系结构
1.2 主要指令集
2.编写程序,观察程序进程
3.心得体会
编写了一个简单的累加器程序,通过单步调试功能
观察了程序的执行过程、各个寄存器和内存的变化,了解了一条指令的基本执行流程以及
在这个流程中各个寄存器是发挥着怎样的作用。
### MARIE西南交大智能嵌入式系统设计半期报告
#### 1. 模拟器介绍
##### 1.1 体系结构
MARIE(Machine Architecture that is Really Intuitive and Easy)是一种专为教学目的设计的简化版计算机体系结构。它的主要目标是帮助学生理解和掌握计算机的工作原理。MARIE采用的是冯·诺依曼架构,这意味着它的程序和数据存储在同一内存空间内。
**图 1 MARIE 体系结构**
MARIE.js 是基于MARIE架构的一种JavaScript实现版本,它通过浏览器界面提供了一种直观的学习工具,让学生能够更轻松地理解基本概念。MARIE的主要组成部分包括:
- **寄存器**
- **AC (Accumulator)**:累加器,通用寄存器,用于保存临时数据或运算结果。
- **PC (Program Counter)**:程序计数器,指示当前待执行指令的内存位置。
- **MAR (Memory Address Register)**:内存地址寄存器,保存当前要访问的内存地址。
- **MBR (Memory Buffer Register)**:内存缓冲寄存器,暂时存储从内存读取的数据或待写入内存的数据。
- **IR (Instruction Register)**:指令寄存器,保存当前正在执行的指令。
- **Out、In 寄存器**:用于输入输出操作。
- **存储器**:4K字的存储器,按照字进行编址,每个字包含16位。
- **输入输出设备**:模拟的输入输出设备,用于与外部环境交互。
##### 1.2 主要指令集
MARIE的指令集非常简洁,每条指令长度固定为16位,其中前4位表示操作码,后12位表示操作数的地址。下面是MARIE的主要指令集:
- **算术运算指令**
- **Add X**:地址X的内容与AC相加,结果保存到AC中。
- **Subt X**:AC减去地址X的内容,结果保存到AC中。
- **Addl XB**:将X作为操作数的指针,与AC相加,并保存到AC中。
- **ClearA**:将AC清零。
- **数据传送指令**
- **Load X**:从内存地址X中取数存到AC。
- **Store X**:将AC的值存入地址为X的内存中。
- **Loadl XD**:将X处存储的内容作为指针,获取操作数存入AC。
- **Storel XE**:将X处存储的内容作为指针,将AC的值存入指向的内存。
- **输入输出指令**
- **Input**:要求用户输入一个值,存入AC。
- **Output**:将AC的值输出。
- **控制、分支指令**
- **Jump X**:跳转到地址X。
- **Skipcond(C)**:根据AC和C的值决定是否跳过下一条指令。跳转条件包括:
- C=000 && AC<0
- C=400 && AC=0
- C=800 && AC>0
- **Halt**:终止程序。
#### 2. 编写程序,观察程序进程
以下是一个具体的例子,该程序用于计算从1累加到20的和,并将结果保存到SUM中。
```
LOOP, LOAD X
ADD SUM
STORE SUM
LOAD X
ADD ONE
STORE X
SUBT CNT
SKIPCOND 400
JUMP LOOP
LOAD SUM
OUTPUT
HALT
SUM, DEC 0
X, DEC 1
ONE, DEC 1
CNT, DEC 21
```
- **程序解析**
- **LOOP**:循环起始标记。
- **LOAD X**:从X处加载当前值到AC。
- **ADD SUM**:将AC的值与SUM处的值相加。
- **STORE SUM**:将AC的值存入SUM处。
- **LOAD X**:再次从X处加载当前值到AC。
- **ADD ONE**:将AC的值加1。
- **STORE X**:将新的值存回X处。
- **SUBT CNT**:从AC中减去CNT的值。
- **SKIPCOND 400**:如果AC等于0,则跳过下一条指令,否则继续执行。
- **JUMP LOOP**:返回到循环起始点。
- **LOAD SUM**:加载SUM的值到AC。
- **OUTPUT**:输出AC的值。
- **HALT**:程序结束。
- **执行过程分析**
- 初始状态下,所有寄存器均为0,程序指令已经依次加载到000H到00BH的内存地址中。
- 执行过程中,PC会不断更新,指向下一个要执行的指令。
- AC寄存器将被用来进行加法运算和存储中间结果。
- MAR和MBR寄存器用于处理内存读写操作。
- IR寄存器保存当前正在执行的指令。
- **程序运行效果**
- 通过单步调试功能观察程序的执行过程,可以看到各寄存器和内存的变化情况。
- 例如,在每次循环中,X的值逐渐增加,直到达到20,此时程序跳出循环,并输出SUM的值。
通过以上步骤,学生可以深入了解计算机内部指令的执行流程及其如何影响各个寄存器的状态变化。这种实践性很强的实验可以帮助学生更好地理解计算机体系结构的基本原理。