本报告为MARIE项目在西南交通大学实施的中期总结,重点讨论了智能嵌入式系统的开发进展、技术挑战及解决方案,并展望未来工作方向。
### MARIE西南交大智能嵌入式系统设计半期报告
#### 1. 模拟器介绍
##### 1.1 体系结构
MARIE(Machine Architecture that is Really Intuitive and Easy)是一种专为教学目的设计的简化版计算机体系结构。它的主要目标是帮助学生理解和掌握计算机的工作原理。MARIE采用的是冯·诺依曼架构,这意味着程序和数据存储在同一内存空间内。
**图 1 MARIE 体系结构**
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位。下面是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寄存器用于处理内存读写操作。
-