繁体   English   中英

MASM 函数没有返回正确的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM