汇编代码+一般问题的总线错误10

时间:2011-10-21 23:26:24

标签: c assembly bus

好的,所以我正在尝试创建一个有趣的程序来计算数字中的位数

我想要的:
正如我所说,一个程序计算给定数字中的位。 (例如countsbits(1)= countbits(2)= countbits(4)= 1)。

我得到了什么:
我得到了正确的输出,但现在我收到一条错误消息

“分段错误:11”。我跑了别人的程序,他们没有收到这个错误,所以显然这是我的错误。如何修改这个以便我没有出现分段错误?

我输入的命令是:

gcc -m32 -mstackrealign countbit.c countbits.s

程序编译得很好,但是当我尝试运行程序生成的a.out时,我得到了错误。有什么想法吗?

我的代码:     。文本         。数据         .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);
}

1 个答案:

答案 0 :(得分:0)

如果不提及您正在谈论的处理器汇编代码类型,您无法真正提出有关汇编代码的问题。例如,许多处理器具有用于计数设置的位数的专用指令。例如,请参阅POPCNT