Assembly 汇编作业分配错误

Assembly 汇编作业分配错误,assembly,x86,Assembly,X86,我有以下两个文件: 任务2.s: 以及main2.c文件: #include <stdio.h> #include <string.h> #include<stdlib.h> #define BUFFER_SIZE(1024) extern void isDivisibleBy3(int x); int main(int argc, char** argv) { char buf[BUFFER_SIZE]; printf("Enter st

我有以下两个文件: 任务2.s:

以及main2.c文件:

#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define BUFFER_SIZE(1024)

extern void isDivisibleBy3(int x);

int main(int argc, char** argv)
{
  char buf[BUFFER_SIZE];    
  printf("Enter string: ");
  fflush(stdout);
  fgets(buf, BUFFER_SIZE, stdin);
  int number=atoi(buf);
  printf("Got Number: %d\n", number);
  isDivisibleBy3(number);
  return 0;
}

int check(int evenBits, int oddBits){
  int res=abs(evenBits-oddBits);
  switch (res){
    case 0:{return 1;}
    case 1:{return -1;}
    case 2:{return -1;}
    default: {isDivisibleBy3(res);}
  }
  return 0;
}
我认为堆栈上的5和8是和偶数和奇数


我不知道如何克服堆栈上的错误,也不知道为什么这会发生在长数字上。

检查
函数中的
default
分支最终将返回
0
,并且此
0
的asm代码不会“恢复调用方状态”(清理堆栈),它只使用了一个普通的
ret
。非常感谢!
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define BUFFER_SIZE(1024)

extern void isDivisibleBy3(int x);

int main(int argc, char** argv)
{
  char buf[BUFFER_SIZE];    
  printf("Enter string: ");
  fflush(stdout);
  fgets(buf, BUFFER_SIZE, stdin);
  int number=atoi(buf);
  printf("Got Number: %d\n", number);
  isDivisibleBy3(number);
  return 0;
}

int check(int evenBits, int oddBits){
  int res=abs(evenBits-oddBits);
  switch (res){
    case 0:{return 1;}
    case 1:{return -1;}
    case 2:{return -1;}
    default: {isDivisibleBy3(res);}
  }
  return 0;
}
the number is divisible by 3

Program received signal SIGSEGV, Segmentation fault.
0x00000005 in ?? ()
(gdb) where
#0  0x00000005 in ?? ()
#1  0x00000008 in ?? ()
#2  0x00000000 in ?? ()