Size: a a a

Ассемблер

2021 August 29

E

Entusiast in Ассемблер
И, к слову, на этом же процессоре - movups = 3 такта
Но он позволяет гонять по 128 байт

Вот и выбирай
источник

d

disba1ancer in Ассемблер
т.е. чем больше тем итераций тем rep медленнее?
источник

E

Entusiast in Ассемблер
Да
10+кол-во итераций (тактов)
Но опять же - выравнивание по границе 32 байт для больших данных может облегчить ему работу
источник

d

disba1ancer in Ассемблер
а можно обогнать rep?
источник

E

Entusiast in Ассемблер
Ну я же тебе говорю - movups занимает тактов, примерно, как один stos, но гоняет 128 байт
источник

d

disba1ancer in Ассемблер
но у меня же не инициализирован sse
источник

E

Entusiast in Ассемблер
Значит используй rep stos
источник

d

disba1ancer in Ассемблер
а если заменить rep на другие инструкции?
источник

E

Entusiast in Ассемблер
Например?
источник

d

disba1ancer in Ассемблер
ну например самомстоятельно делать cmp и переход на метку
источник

LG

Lena Golovach in Ассемблер
сори чет не пойму к чему ты это
источник

C

Cofeefee in Ассемблер
А разве inc/dec не проще использовать?

Что быстрее
inc eax
add eax, 1
lea eax,[eax+1]

Вроде бы раньше кто-то тестировал?
источник

d

disba1ancer in Ассемблер
add точно быстрее чем inc
источник

E

Entusiast in Ассемблер
inc имеет баг с флагами - сохраняет одни, изменяет другие
add - не имеет бага, но работает с флагами, если они не нужны, но при этом две инструкции будут изменять одни флаги - будет "flag stall" остановка флагов, вызовет задержку в 5-6 тактов
lea - не имеет бага, не работает с флагами, не вызовет flag stall
источник

d

disba1ancer in Ассемблер
lea, возможно, такая же быстрая как и add
источник

d

disba1ancer in Ассемблер
она не может иметь бага...
источник

E

Entusiast in Ассемблер
Кто?
источник

d

disba1ancer in Ассемблер
lea, она вообще не трогает флаги, о каких багах может идти речь?
источник

E

Entusiast in Ассемблер
Ну я об этом и написал
источник

E

Entusiast in Ассемблер
Хочешь заменить rep stos
На:

@@
mov
sub ecx, 1
jnz @b
?
На этом же процессоре:
mov = 1
sub = 1
jnz  = 1/4/5/6

3-6-7-8 * (к примеру) 8 итераций = 9-18-21-24

rep stos = 10+8 = 18
источник