【发布时间】:2015-12-16 15:06:04
【问题描述】:
我正在编写一个简单的程序,它调用一个子例程并期望返回一个值。到目前为止我有:
%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。但它没有显示任何结果。任何想法都会非常有帮助!
【问题讨论】:
-
你在 ret 之前推了 Eax。您的退货地址丢失了。更不用说普沙了。调用子程序时,返回地址在栈顶。你需要把它放在那里。
标签: assembly x86 subroutine