Skip to content

Стек. Аппаратная поддержка вызова подпрограмм

Ivan Bogatyrev edited this page Jun 12, 2023 · 1 revision

Стек. Аппаратная поддержка вызова подпрограмм

  • С помощью команды PUSH можно положить в стек параметры, которые будут использоваться в подпрограмме.
  • Команда CALL переводит управление в подпрограмму и сохраняет адрес следующей команды в стеке.
  • Обработка параметров в подпрограмме - в теле подпрограммы аргументы могут быть доступны через стек. Доступ к аргументам обычно осуществляется с использованием базового указателя bp (для 16-битного режима) или ebp (для 32-битного режима).
My_Subroutine:
    push    bp               ; Save old BP value
    mov     bp, sp           ; Set BP to current SP

    ; Accessing arguments:
    ; In 16-bit mode:
    mov     bx, [bp + 4]     ; arg1
    mov     cx, [bp + 6]     ; arg2
    mov     dx, [bp + 8]     ; arg3

    ; In 32-bit mode:
    ; mov     ebx, [ebp + 8]  ; arg1
    ; mov     ecx, [ebp + 12] ; arg2
    ; mov     edx, [ebp + 16] ; arg3
  • Возврат из подпрограммы - после выполнения своих задач подпрограмма должна восстановить исходное значение базового указателя и вернуться к вызывающей программе с помощью команды ret.
    mov     sp, bp           ; Restore SP
    pop     bp               ; Restore BP
    ret                      ; Return to caller
  • Удаление аргументов с вершины стека - после успешного возврата из подпрограммы, аргументы, переданные через стек, могут быть удалены с вершины стека. Это обычно делается путем сдвига указателя стека sp или esp.
Clone this wiki locally