小编Jes*_*n56的帖子

为什么汇编代码在添加到总和之前将值从 %edx 复制到 %rcx?

使用 x86-64 gcc -Og -std=gnu99 -xc 编译。

.L3 ( addl (%rdi,%rcx,4), %eax)的第二行中,为什么不直接%edx在加和时使用寄存器?

addl (%rdi,%edx,4), %eax

int sum_arr(int arr[], int nelems) {
  int sum = 0;
  for (int i = 0; i < nelems; i++) {
    sum += arr[i];
  }
  return sum;
}

sum_arr:
        movl    $0, %edx
        movl    $0, %eax
        jmp     .L2
.L3:
        movslq  %edx, %rcx
        addl    (%rdi,%rcx,4), %eax
        addl    $1, %edx
.L2:
        cmpl    %esi, %edx
        jl      .L3
        rep ret
Run Code Online (Sandbox Code Playgroud)

c arrays assembly gcc x86-64

3
推荐指数
1
解决办法
90
查看次数

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

标签 统计

arrays ×1

assembly ×1

c ×1

c++ ×1

gcc ×1

significant-digits ×1

x86-64 ×1