Объяснение доступа к массиву в сборке X86

Для элементов, которые вы хотите быть видимыми все время, примените:

position: absolute

Для использования оранжевого элемента

bottom: 0;

, а для желтого

используйте право: 0, верх: 50%;

Если вы хотите получить более подробную информацию, напишите скрипку для того же

0
задан Sasha 22 January 2019 в 04:39
поделиться

2 ответа

.L3:
    movslq  %esi, %rdx           /* sign extend counter<%esi> to 64bit %rdx */
    addl    (%rdi,%rdx,4), %eax  /* res<%eax> += b<%rdi>[counter<%rdx>]; */
    subl    $1, %esi             /* counter<%esi> -= 1              */
.L2:
    testl   %esi, %esi           /* do counter<%esi> & counter<%esi> */
    jns     .L3                  /* if result is no 0, jump to L3  */

В основном addl (%rdi,%rdx,4), %eax - это доступ к массиву (%rdi) с индексом счетчика (%rdx) и добавление значения элемента в res (%eax), 4 это просто умножение счетчика (%rdx) для доступа к памяти, поскольку каждый адрес в массиве int потребляет 4 байта в памяти вашей системы.

Строка в основном говорит: res += MEMORY[addrssOf(b) + counter*4]

Кстати, я думаю, вы хотите проверить, что size > 0 перед строкой int counter = size-1;, а также, как P__J__ упоминается в его ответе, ваш res может переполнение, поскольку оно имеет одинаковый тип каждого элемента в массиве, который вы суммируете.

0
ответ дан user2162550 22 January 2019 в 04:39
поделиться

в этой форме легче понять:

sum_arr:
        sub     esi, 1
        js      .L4
        movsx   rsi, esi
        mov     eax, 0
.L3:
        add     eax, DWORD PTR [rdi+rsi*4]
        sub     rsi, 1
        test    esi, esi
        jns     .L3
        ret
.L4:
        mov     eax, 0
        ret

Два замечания: очень вероятно, что ваше целое число переполнится, поэтому вы должны использовать long long как временный & amp; возвращаемое значение Его также можно сократить

long long sum_arr(const int *b, size_t size){
      long long res = 0;
      while(size--){
          res = res + *b++;
       }
      return res;
}
0
ответ дан P__J__ 22 January 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: