[英]MASM function not returning the right value
我需要调用从汇编代码中添加 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
代码:
#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;
}
好吧,事实证明,你必须在返回值之前压入 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 代码保持不变
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.