Size: a a a

Ассемблер

2021 June 24

D

Den in Ассемблер
хотя сам по себе такой побитовый сдвиг для 100500 dword-ow должен быть довольно медленный
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
какая самая быстрая инструкция?
источник

D

Den in Ассемблер
но тут сдвиг же по памяти а не по регистру
источник

II

Ira Irina in Ассемблер
из младшего дворда старший бит у тебя уйдет в cf, при первой итерации. При второй бит из cf уйдет в младший бит второго дворда, а старший бит второго дворда попадет в cf, и так далее. Не надо ничего сохранять.
источник

ST

Saenro T in Ассемблер
Он же будет по кругу сам в себя пихать через CF
источник

II

Ira Irina in Ассемблер
Ну так на каждой итерации, ты переходишь к следующему дворду.
источник

II

Ira Irina in Ассемблер
старший бит вываливается в cf. в следующей итерации он залетает в младший разряд следующего дворда, а в cf залетает старший бит этого дворда.
источник

II

Ira Irina in Ассемблер
Сколько у тебя всего двордов столько раз подряд инструкция rcl
источник

D

Den in Ассемблер
т.е тут получается в конце 32 итерации весь участок dwordow подвинется на dword вправо а в процессе итераций там будут undefined behavior данные а если надо например на пару байт только данные подвинуть
источник

II

Ira Irina in Ассемблер
А, хотя да, между ними надо как то увеличивать указатель. А эта команда может повляиять на cf
источник

II

Ira Irina in Ассемблер
Хотя с другой стороны можно применить для увеличения/уменьшения указателя, можно применить inc/dec, а они на cf не влияют))
источник

II

Ira Irina in Ассемблер
Нет, 32 итерации, это значит у тебя продвинется на один бит область данных размером в 32 дворда(128 байт)
источник

D

Den in Ассемблер
я имел ввиду кол-во операций проведенных над каждым из цепочки регистров любого колличества т.е. у тебя старший бит будет залетать в младший соседнего регистра я так понял, так что сдвиг на один бит не будет иметь смысла потому что данные будут испорчены
источник

II

Ira Irina in Ассемблер
Не будут, потому это же циклический сдвиг, младший бит соседнего дворда сам сдвинется к следующему а старший бит первого регистра займет, его место.
источник

II

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

ST

Saenro T in Ассемблер
@@:
rcl eax, 1
rcl ecx, 1
rcl edx, 1
rcl ebx, 1
jmp @B
Будет работать как единый большой регистр.
источник

D

Den in Ассемблер
я немного запутался, значит не правильно понимаю алгоритм действия этих комманд, они взаимодействуют с соседними областями памяти или соседними регистрами, ну с памятью понятно а как допустим они знают какой регистр соседний в цпу?
источник

II

Ira Irina in Ассемблер
Ну вот это же самое я имею в виду, только "один большой регистр", должен быть в памяти, и может иметь размер скажем 2048, или 8196 байт.
источник

D

Den in Ассемблер
а тогда понятно!! :)
источник

D

Den in Ассемблер
Здорово не знал вообще о такой фиче, это меняет концепцию! :)
источник