Я пишу простую программу, которая вызывает подпрограмму и ожидает значения обратно. до сих пор у меня есть:Возвращаемое значение из подпрограммы в сборке
%include "asm_io.inc"
SECTION .data
SECTION .bss
SECTION .text
global asm_main
asm_main:
enter 0,0
pusha
mov ebx, dword [ebp+12]
mov eax, dword [ebx+4]
push eax
call maxLyn
push eax ; contains value 4
call print_int
popa
leave
ret
maxLyn:
enter 0,0
pusha
mov ebx, dword[ebp+12]
mov eax, [ebx+4]
add eax, dword 2
push eax
ret
Так что, когда я запускаю код lynarr abc 2
, я ожидал значение 4, которое будет отображаться. Но это не показывает никаких результатов. любые идеи были бы действительно полезны!
Также вы толкаемых EAX перед тем RET. Ваш адрес возврата потерян. Не говоря уже о pusha. Когда вы вызываете подпрограмму, адрес возврата находится в верхней части стека. Вы должны держать его там. – Steven