さて、私は数字のビットを数える楽しみのためにプログラムを作成しようとしています
私が欲しいもの:
私が言ったように、与えられた数のビットを数えるプログラム。(たとえば、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);
}