小编Ant*_*eev的帖子

重叠寄存器错误

内联汇编代码替换其中一个for循环中的C++语句.

有时它神奇地工作并产生正确的结果 - 使用基数排序排序的数组.另一次Xcode生成一个Thread 1: EXC_BAD_ACCESS (code=1, address=0x1eccccccccd)错误,我incq (%[count], %%rdx, 4)使用反汇编视图追溯到行.

我的理解

反汇编视图incq (%[count], %%rdx, 4)incq (%rax,%rdx,4).这可能意味着相同的寄存器用于不同的操作数(%%rax已在线使用movq (%[array], %%rcx, 4), %%rax),问题在于此处:: [array] "r" (array), [count] "r" (count), "b" (digit), "c" (i).

我不明白的是

如何管理寄存器,以便我可以使用足够的寄存器(分配给输入操作数以及后面的正文代码)并且它们不会同时重叠.我尝试了几种组合,但没有一种有效.

void countingSort(int array[], int length, int digit) {
    int i, count[10] = { };
    int sorted[length];

    // Store number of occurrences in count[].
    // for (i = 0; i < length; i++)
    // …
Run Code Online (Sandbox Code Playgroud)

sorting x86 assembly g++ inline-assembly

2
推荐指数
1
解决办法
169
查看次数

标签 统计

assembly ×1

g++ ×1

inline-assembly ×1

sorting ×1

x86 ×1