Для элементов, которые вы хотите быть видимыми все время, примените:
position: absolute
blockquote>Для использования оранжевого элемента
bottom: 0;
blockquote>, а для желтого
используйте право: 0, верх: 50%;
blockquote>Если вы хотите получить более подробную информацию, напишите скрипку для того же
.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
может переполнение, поскольку оно имеет одинаковый тип каждого элемента в массиве, который вы суммируете.
в этой форме легче понять:
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;
}