Assembly 如何在没有真正堆栈的情况下处理变量和函数

Assembly 如何在没有真正堆栈的情况下处理变量和函数,assembly,cpu-architecture,processor,Assembly,Cpu Architecture,Processor,我正在设计一个8位处理器,但我还没有所有的组件,所以我正在做一些其他的事情,比如汇编程序,一个模拟程序的虚拟机,以及一种比汇编更高级的语言 我没有任何堆栈,我的体系结构基于累加器(唯一的寄存器是累加器),但我想知道如何为变量和函数生成汇编代码。如果没有真正的解决办法,还有解决办法吗 架构: 如果不知道指令集的详细信息,很难说出来,但根据图表进行猜测,如果你想要递归函数,你可能需要指定一个内存位置作为堆栈指针。如果你不能写入一个内存或内存位置以某种方式指向的地址,那么我认为没有任何实际的方法来实现

我正在设计一个8位处理器,但我还没有所有的组件,所以我正在做一些其他的事情,比如汇编程序,一个模拟程序的虚拟机,以及一种比汇编更高级的语言

我没有任何堆栈,我的体系结构基于累加器(唯一的寄存器是累加器),但我想知道如何为变量和函数生成汇编代码。如果没有真正的解决办法,还有解决办法吗

架构:

如果不知道指令集的详细信息,很难说出来,但根据图表进行猜测,如果你想要递归函数,你可能需要指定一个内存位置作为堆栈指针。如果你不能写入一个内存或内存位置以某种方式指向的地址,那么我认为没有任何实际的方法来实现递归函数。您可以通过为每个函数提供固定地址来存储其返回地址和变量来实现非递归函数。是的,条件跳转<代码>如果语句,如果您愿意;)如果你能改变体系结构,间接加载/存储将有助于其他事情,而不仅仅是堆栈。@RossRidge:当然。但是请注意,OP并没有要求递归函数,只要求函数(可能是为了允许有限的代码重用,而不必在每个“调用”站点内联一个块)。此外,如果ISA可以实现任何类型的堆栈式数据结构,
bl
/
jal
允许您构建调用约定,而不需要单指令硬件堆栈推送/弹出逻辑。e、 堆栈指针可能存储在固定的内存地址,JAL允许您进行函数调用,而无需在硬件中读取、更新和取消引用它。