Size: a a a

Ассемблер

2020 December 26

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Вот вам набор быстрых функций (с минимумом ветвлений):
https://www.cyberforum.ru/blogs/521524/blog5122.html
источник

ВХ

Віталій Халак... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Только этот sgn выдаёт 1 при исходном EAX=0 :)
идея в edx*eax=n
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Вот правильный sgn, если нужен будет такой:
cdq          ; edx = 0 or -1
cmp edx,eax  ; cf = eax > 0 ? 1 : 0
adc dl,0     ; add 1 for positive; edx = sign (0, 1 or -1)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Віталій Халак
cdq
stc
adc   edx,edx
mov   ecx,edx
imul  edx
xchg  ecx,eax
jecxz $+6
imul  ecx
loop  $-2
факториал. варианты?
; eax = source
   mov edx,1
@@: imul edx,eax
   dec eax
   jnz @B
; edx = result
источник

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
; eax = source
   mov edx,1
@@: imul edx,eax
   dec eax
   jnz @B
; edx = result
Тогда уж проще:
mov ecx, 5
mov edx, 1
imul edx, ecx
loop imul
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Saenro T
Тогда уж проще:
mov ecx, 5
mov edx, 1
imul edx, ecx
loop imul
loop медленнее раз в 5 :)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Но в целом можно.
источник

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
loop медленнее раз в 5 :)
https://t.me/ChatAssembler/39779
А я считал что так)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Откуда такая математика?
Вот тебе другая математика :)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Телега жестит с цитатами...
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
А вот тут оказывается, что jecxz и jz одинаковы. Но это Sandy Bridge. На других может быть чуть иначе. Но loop вряд ли где-то работает так же быстро, как dec/jz.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Тут jecxz — это dec/jecxz/jmp по факту.
источник

ST

Saenro T in Ассемблер
ужас... у меня данные устарели, ещё со времён 80386...
источник

ВХ

Віталій Халак... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Тут jecxz — это dec/jecxz/jmp по факту.
    mov  ecx,65536
   jmp  @F
 @@:  dec  ecx
   jecxz  @B
???
источник

ВХ

Віталій Халак... in Ассемблер
    mov  ecx,65536
   jmp  @F
 @@:  dec  ecx
   jz  @B
   ret
тоже
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Зачем здесь jmp тогда?
Но первый вариант не прокатит, т.е. прыжка не будет, ибо ECX != 0.
источник