Что означает "возврат из подпрограммы"?

Я пытаюсь создать свой первый эмулятор CHIP-8 с нуля, используя C. При написании необходимого кода для инструкций я наткнулся на этот код операции:

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]? И где должен быть мой указатель стека?

1 ответ

Решение

Возврат из подпрограммы - это возврат выполнения кода к точке, в которой он находился до вызова подпрограммы.

Поэтому, учитывая, что вызов подпрограммы помещает текущий стек PC+2 (+2, чтобы перейти за инструкцию вызова) в стек. Возврат из подпрограммы вернет выполнение по адресу, который был помещен в стек путем извлечения адреса из стека. (например, pc=stack[sp]; sp-=2;)

Что касается дополнительного вопроса, это действительно зависит от того, определяете ли вы свой стек как восходящий или нисходящий. Для ЧИП-8 выбор не указан.

Другие вопросы по тегам