我尝试使用C从头开始构建我的第一个CHIP-8仿真器。在为指令编写必要的代码时,我遇到了这个操作码:
00EE - RET
Return from a subroutine.
The interpreter sets the program counter to the address at the top of the stack, then subtracts 1 from the stack pointer.
(http://devernay.free.fr/hacks/chip8/C8TECH10.HTM)
我知道一个子程序基本上是一个功能,但它对于返回'是什么意思。从子程序?分别对程序计数器,堆栈和堆栈指针发生了什么?
(另外一个问题):如果我创建了一个可以容纳16个值来表示堆栈的数组,那么堆栈的顶部是否会出现问题。是STACK [0]还是STACK [15]?我的堆栈指针应该在哪里?
答案 0 :(得分:1)
从子程序返回是将代码执行返回到调用子程序之前的位置。
因此,假设调用子程序将当前地址PC + 2(+2跳过调用指令)推入堆栈。从子例程返回将通过从堆栈弹出地址将执行返回到被推送到堆栈的地址。 (例如pc = stack [sp]; sp- = 2;)
至于附加问题,它实际上取决于您是将堆栈定义为升序还是降序。对于CHIP-8,没有指定选择。