汇编程序加载器
概述
- 用途:汇编程序加载器是一种专用组件,将汇编语言程序转换为二进制机器码并加载到内存组件中。它弥合了人类可读的汇编代码与数字电路可处理的二进制指令之间的差距。
- 符号:汇编程序加载器由矩形方块表示,包含时钟、使能、地址输出使能和数据输出使能输入,以及地址总线、数据总线、写使能、片选和加载完成输出。
- DigiSim.io 角色:支持在CPU设计中测试和执行汇编程序,无需手动将代码转换为二进制,是探索计算机架构概念的重要教学工具。

功能描述
逻辑行为
汇编程序加载器读取用户输入的汇编代码,将其转换为机器码,并顺序写入内存地址。它以状态机方式运行,具有不同的阶段:空闲、加载和完成。
操作流程:
- 当加载器被触发(通过其属性对话框)时,它开始转换过程
- 在 EN 为高电平时,每个 CLK 上升沿加载器前进到下一条指令
- 加载期间,WE 和 CS 输出为高电平
- 加载完成时,LC(加载完成)输出变为高电平
- 当 A_OE 为高电平时驱动地址输出;当 D_OE 为高电平时驱动数据输出
输入和输出
输入(共4个):
- CLK:引脚 0。时钟输入——加载器在每个上升沿前进。
- EN(使能):引脚 1。加载器的总使能。仅在高电平时加载前进。
- A_OE(地址输出使能):引脚 2。高电平时驱动地址输出(A0-A7);否则为高阻抗。
- D_OE(数据输出使能):引脚 3。高电平时驱动数据输出(D0-D7);否则为高阻抗。
输出(共19个):
- A0-A7:引脚 0-7。8位地址总线,指定要写入的内存位置。
- D0-D7:引脚 8-15。8位数据总线,包含要写入内存的机器码指令。
- WE:引脚 16。写使能信号——活动加载期间为高电平。
- CS:引脚 17。片选信号——活动加载期间为高电平。
- LC(加载完成):引脚 18。加载完成时变为高电平。
可配置参数
- 汇编程序:用户可以通过组件的属性对话框输入和编辑汇编代码。
- 内存大小:可加载的最大指令数(通常受连接的内存组件限制)。
DigiSim.io 中的视觉表示
汇编程序加载器显示为矩形方块,左侧标注输入(CLK、EN、A_OE、D_OE),右侧为输出(A0-A7、D0-D7、WE、CS、LC)。在电路中连接时,组件通过输出值直观显示其当前状态。用户可以通过组件的属性对话框与组件交互,输入和编辑汇编代码。
教育价值
核心概念
- 汇编编程:介绍汇编语言编程的基本概念。
- 机器码生成:演示人类可读的汇编指令如何转换为二进制。
- 内存管理:展示程序如何顺序加载到内存中。
- 计算机架构:连接软件概念与硬件实现。
- 指令集架构:介绍指令格式和编码的概念。
学习目标
- 理解汇编语言和机器码之间的关系。
- 学习程序如何加载到内存中执行。
- 认识将符号指令翻译为二进制的过程。
- 将汇编编程概念应用于为CPU设计创建简单程序。
- 理解计算机系统中软件和硬件之间的接口。
使用示例/场景
- CPU测试:加载测试程序以验证CPU功能。
- 演示电路:创建计算机架构的教学示例。
- 算法实现:编写汇编程序实现基本算法,如计数、加法或简单循环。
- 内存系统测试:以受控方式验证内存读/写操作。
- 指令集探索:实验不同的指令类型及其效果。
技术说明
- 汇编程序加载器支持一种简化的汇编语言,包含常见指令(LDA、STA、ADD、SUB、JMP、JZ、JNZ、HLT)。
- 汇编代码中的标签在加载过程中自动解析为内存地址。
- 可以使用 @addr: value 语法将特定内存位置初始化为数据值。
- 加载器按顺序处理指令,因此较大的程序可能需要更大的内存组件。
- 在 DigiSim.io 中,加载器的行为模拟了真实计算机系统的程序加载阶段,抽象了汇编器和链接器的复杂性。
- 在将加载器与其他组件集成时,正确使用 WE、CS 和 LC 信号进行同步很重要。
引脚
| 引脚名称 | 类型 | 引脚索引 | 描述 |
|---|---|---|---|
| CLK | 输入 | 0 | 时钟信号——加载器在上升沿前进 |
| EN | 输入 | 1 | 使能——仅在高电平时加载前进 |
| A_OE | 输入 | 2 | 地址输出使能——高电平时驱动地址总线 |
| D_OE | 输入 | 3 | 数据输出使能——高电平时驱动数据总线 |
| A0-A7 | 输出 | 0-7 | 8位地址总线,连接到内存地址输入 |
| D0-D7 | 输出 | 8-15 | 8位数据总线,连接到内存数据输入 |
| WE | 输出 | 16 | 写使能——活动加载期间为高电平 |
| CS | 输出 | 17 | 片选——活动加载期间为高电平 |
| LC | 输出 | 18 | 加载完成——加载完成时为高电平 |
使用方法
将组件连接到您的ROM或RAM组件:
- 将 A0-A7 输出连接到内存组件的地址输入引脚
- 将 D0-D7 输出连接到内存组件的数据输入引脚
- 将 WE 连接到内存组件的写使能输入
- 将 CS 连接到内存组件的片选输入
在组件的属性对话框中输入您的汇编程序。
将 CLK 连接到时钟源,并将 EN、A_OE 和 D_OE 设为高电平以开始加载。
组件将自动:
- 将汇编代码转换为机器码
- 将机器码写入从地址 0 开始的连续内存地址
- 在加载过程中保持 WE 和 CS 为高电平
- 完成时将 LC(加载完成)设为高电平
在使用CPU执行程序之前,等待 LC 信号。
支持的汇编语言
汇编程序加载器支持一种简单的汇编语言,包含以下指令:
LDA addr ; 从内存地址加载累加器
STA addr ; 将累加器存储到内存地址
ADD addr ; 将内存地址的值加到累加器
SUB addr ; 从累加器减去内存地址的值
JMP addr ; 跳转到地址
JZ addr ; 如果累加器为零则跳转到地址
JNZ addr ; 如果累加器非零则跳转到地址
HLT ; 停机
示例程序
以下是一个从1计数到10并将结果存储在内存地址15的示例程序:
LDA 14 ; 将0加载到累加器(从地址14)
LOOP: ADD 13 ; 加1(从地址13)
STA 15 ; 将结果存储到地址15
SUB 12 ; 减10(从地址12)
JZ END ; 如果结果为零(达到10),跳转到END
LDA 15 ; 将当前计数加载回累加器
JMP LOOP ; 跳回LOOP
END: HLT ; 停机
; 数据段(必须包含在程序中的某处)
@12: 10 ; 地址12处的值10
@13: 1 ; 地址13处的值1
@14: 0 ; 地址14处的值0
提示
- 加载器按顺序处理程序,将每条指令写入内存
- 标签(如 LOOP: 和 END:)自动解析为地址
- 使用 @addr: value 语法在特定地址放置特定值
- 对于较大的程序,您可能需要增加内存组件的大小
- 检查 LC 信号以确保与CPU的正确同步
- 组件支持使用分号(;)字符的注释