好的,所以我正在尝试创建一个有趣的程序来计算数字中的位数
我想要什么:
正如我所说,一个计算给定数字中的位的程序。(例如 countsbits(1)=countbits(2)=countbits(4)=1)。
我得到了什么:
我得到了正确的输出,但现在我收到一条错误消息
“分段错误:11”。我运行了别人的程序,他们没有收到这个错误,所以很明显这是我的错误。我该如何修改它,以免出现分段错误?
我输入的命令是:
gcc -m32 -mstackrealign countbit.c countbits.s
该程序编译得很好,但是当我尝试运行程序生成的 a.out 时,我得到了错误。有任何想法吗?
我的代码: .text .data .globl _x
.globl _countbits
_countbits:
pushl %ebp
movl %esp,%ebp
pushl %ebx
mov $0,%edx
mov $0,%eax
mov 8(%ebp),%ebx
LOOP:
mov $1,%ecx
and %ebx,%ecx
add %ecx,%eax
shrl $1,%ebx
add $1,%edx
cmp $32,%edx
jle LOOP
pop %ebx
pop %ebp
ret
以及从 C 调用它的代码:
#include <stdio.h>
int foo (int x){
int p=countbits(x);
printf("The count is: %d",p);
}
main(){
int x=16;
foo(16);
}