gpt4 book ai didi

c - MASM 函数未返回正确的值

转载 作者:行者123 更新时间:2023-11-30 16:08:28 29 4
gpt4 key购买 nike

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

一切看起来都正确,但 masm 函数似乎没有返回正确的值。它存储在 eax 中,应该作为函数值返回,但是在运行 C 代码时,它不会 printf 任何内容,并且想要的值(在本例中为 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;
}

最佳答案

好吧,事实证明,您必须在返回值之前压入 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 代码保持不变

关于c - MASM 函数未返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59337328/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com