我正在尝试在汇编(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 方式与汇编不兼容?
我将不胜感激任何帮助。先感谢您!