-
Notifications
You must be signed in to change notification settings - Fork 0
Стек. Аппаратная поддержка вызова подпрограмм
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.