我需要调用从汇编代码中添加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;
}
答案 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代码保持不变