MASM函数未返回正确的值

时间:2019-12-14 17:08:33

标签: c assembly masm

我需要调用从汇编代码中添加3个三个整数的函数; 整数本身设置在汇编部件中;

一切看起来都正确,但是masm函数似乎未返回正确的值。它存储在eax中,应作为函数值返回,但是在运行C代码时,它不会打印任何内容,而所需的值(在这种情况下为15)实际上是程序的退出代码。那有什么办法可以打印此结果?

MASM代码:

.586
.MODEL FLAT, C
.DATA
a1 DWORD 6
a2 DWORD 5
a3 DWORD 4
.CODE

func_asm PROC C

push a3
push a2
push a1

EXTRN numbers: proc
call numbers 
leave
ret
func_asm ENDP 
END

C代码:

#include <stdio.h>

extern int __cdecl func_asm();
int numbers(int, int, int);

int main()
{
    printf("%d", func_asm());
}
int numbers(int a1, int a2, int a3)
{
    return a1 + a2 + a3;
}

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,您必须在返回值之前先推动eax 在此之前,我们需要自己创建一个堆栈,因此最终代码将是:

.586
.MODEL FLAT, C
.STACK
.DATA
 a1 DWORD 6
 a2 DWORD 5
 a3 DWORD 4
.CODE
func_asm PROC C

push ebp
mov ebp, esp

push a3
push a2
push a1

EXTRN numbers: proc

call numbers 
push eax
leave
ret
func_asm ENDP

END

C代码保持不变