gpt4 book ai didi

c - 带有汇编代码的总线错误 10 + 一般问题

转载 作者:行者123 更新时间:2023-11-30 18:04:00 24 4
gpt4 key购买 nike

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

我想要什么:
正如我所说,这是一个对给定数字中的位数进行计数的程序。(例如 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);
}

最佳答案

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

关于c - 带有汇编代码的总线错误 10 + 一般问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com