MASM函数未返回正确的值

问题描述 投票:0回答:1

我需要调用从汇编代码中将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;
}
c assembly masm
1个回答
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代码保持不变

© www.soinside.com 2019 - 2024. All rights reserved.