Очистка стека после завершения процедуры в TASM - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть пример процедуры:
test1 PROC c near uses ax
arg   @a:word, @d:word, @c:word
local @e:word, @h:word
    mov @e, 4
    mov @h, 5
    mov ax, @a  
    mov ax, @d  
    mov ax, @c  
    mov ax, @e  
    mov ax, @h  
    ret
endp

Вопрос:

Как очистить стек от передаваемых в нее параметров? Если написать ret 6, то компилятор не генерирует код для восстановления регистра ax, очистки локальных переменных и другого.

Решение задачи: «Очистка стека после завершения процедуры в TASM»

textual
Листинг программы
      1 0000                 model   tiny,c
      2 0000                 .code
      3                  org     100h
      4 0100                 begin:
      5                      call    test1,ax,bx,cx
1     6 0100  51                 PUSH    CX
1     7 0101  53                 PUSH    BX
1     8 0102  50                 PUSH    AX
1     9 0103  E8 0004                CALL    TEST1
1    10 0106  83 C4 06               ADD     SP,0006h
     11 0109  C3                 ret
     12 010A                 test1 PROC near uses ax
     13                  arg   @a:word, @d:word, @c:word
     14                  local @e:word, @h:word
     15
1    16 010A  55                 PUSH    BP
1    17 010B  8B EC              MOV     BP,SP
1    18 010D  83 EC 04               SUB     SP,0004h
1    19 0110  50                 PUSH    AX
2    20 0111  58                 POP     AX
2    21 0112  8B E5              MOV     SP,BP
2    22 0114  5D                 POP     BP
2    23 0115  C3                 RET     0000h
     24 0116                 endp
     25                  end     begin

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы