'return from subroutine' 是什么意思?

What does 'return from subroutine' mean?

我正在尝试使用 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)

我知道子例程基本上是一个函数,但是从子例程到 'return' 是什么意思?程序计数器、堆栈和堆栈指针分别发生了什么?

(一个附加问题):如果我创建了一个可以容纳 16 个值的数组来表示堆栈,那么 'top of the stack' 是 STACK[0] 还是 STACK[15]?我的堆栈指针应该在哪里?

从子例程 return 是 return 代码执行到调用子例程之前的位置。

因此,假设调用子程序会将当前地址 PC+2(+2 以跳过调用指令)压入堆栈。从子例程返回将 return 执行到通过从堆栈中弹出地址而被压入堆栈的地址。 (例如 pc=stack[sp]; sp-=2;)

至于附加问题,这实际上取决于您将堆栈定义为升序还是降序。对于 CHIP-8,未指定选择。