小编Gáb*_*bor的帖子

从 C 传递到 Assembly 的 Int 参数丢失其符号

我正在尝试在汇编(64 位)中实现一个符号函数,然后从 C 调用它。
我的函数接受一个参数:一个无符号 int 并返回一个 int,它可以是 -1(如果参数为负)、0 (如果参数为 0)和 1(如果参数为正)。

我的程序可以很好地检测正数和零,但如果我传递一个负数作为参数,那么它会将其作为正数处理并返回 1。

主要.c:

#include <stdio.h>

extern int sign(signed int);

int main()
{
    signed int num;
    scanf("%d",&num);
    printf("num: %d sign: %d\n",num,sign(num));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

符号.asm:

#include <stdio.h>

extern int sign(signed int);

int main()
{
    signed int num;
    scanf("%d",&num);
    printf("num: %d sign: %d\n",num,sign(num));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

起初我以为问题出在汇编代码中,所以我将测试的寄存器的值设置为正数,然后是负数,最后为零。效果很好。它也识别负数。
在那之后,我现在认为问题在于参数的传递。我认为参数的符号在某个地方丢失了,或者存储负数的 C 方式与汇编不兼容?

我将不胜感激任何帮助。先感谢您!

c assembly x86-64 nasm abi

2
推荐指数
1
解决办法
118
查看次数

标签 统计

abi ×1

assembly ×1

c ×1

nasm ×1

x86-64 ×1