Хорошо, поэтому я пытаюсь создать программу для развлечения, которая подсчитывает биты в числе
Что я хочу:
Как я уже сказал, программа, которая считаетбиты в данном числе.(например counttsbits (1) = countbits (2) = countbits (4) = 1).
Что я получаю:
Я получаю правильный вывод, но теперь я получаюсообщение об ошибке
«Ошибка сегментации: 11».Я запустил чужую программу, и они не получили эту ошибку, так что, очевидно, это мой проступок.Как я могу изменить это, чтобы я не получил ошибку сегментации?
Вводимая мной команда:
gcc -m32 -mstackrealign countbit.c countbits.s
Программа компилируется просто отлично, но когда я пытаюсь запустить a.сгенерированный программой я получаю ошибку.Есть идеи?
Мой код: .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);
}