Size: a a a

Ассемблер

2020 December 21

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Не, ну если из-под DOSBox с cycles=10, тогда вопросов нет.
мож у тя что получится идеи подкинуть

https://t.me/ChatAssembler/58214
источник

ST

Saenro T in Ассемблер
BS 135
то что никто не хочет изобретать велосипеды - это большая проблема, одна из главных причин глюков и багов
Да можно конечно и с нуля написать, но для этого надо понимать что писать и для чего, разбираться в принципах, в законах построения (я ни в одном глазу что там и как, откуда мне знать?)
А когда за тебя уже кто-то разобрался и написал нечто близкое к идеалу, то всё что осталось тебе, так это лишь понять что и как работает, а там уж можно и по-своему переписать хоть с нуля и может быть даже проще получится.
источник

B1

BS 135 in Ассемблер
Saenro T
Да можно конечно и с нуля написать, но для этого надо понимать что писать и для чего, разбираться в принципах, в законах построения (я ни в одном глазу что там и как, откуда мне знать?)
А когда за тебя уже кто-то разобрался и написал нечто близкое к идеалу, то всё что осталось тебе, так это лишь понять что и как работает, а там уж можно и по-своему переписать хоть с нуля и может быть даже проще получится.
вот поэтому уже написанное говно никто и не чистит...🥺🥺
источник

B1

BS 135 in Ассемблер
😭😭
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Да тут надо поллитра, а то и литр!
источник

B1

BS 135 in Ассемблер
у нас тут оффтоп!
источник

B1

BS 135 in Ассемблер
баним нарушителя
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Давай зайдём с другой стороны.
Неужели другого алгоритма нет? Попроще.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
BS 135
у нас тут оффтоп!
Где?  🪓
источник

B1

BS 135 in Ассемблер
я боюся
источник

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Давай зайдём с другой стороны.
Неужели другого алгоритма нет? Попроще.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Ты предлагаешь разреверсить его? 😁
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Давай зайдём с другой стороны.
Неужели другого алгоритма нет? Попроще.
есть, но результат мне их не нравится
источник

ST

Saenro T in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Ты предлагаешь разреверсить его? 😁
Более того, FPU там встречается крайне редко.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Вот, кстати, вопрос.
Может, можно это всё как-то без FPU сделать? :D
Ну да, это жёстко.
источник

楽園松本 in Ассемблер
Saenro T
Да можно конечно и с нуля написать, но для этого надо понимать что писать и для чего, разбираться в принципах, в законах построения (я ни в одном глазу что там и как, откуда мне знать?)
А когда за тебя уже кто-то разобрался и написал нечто близкое к идеалу, то всё что осталось тебе, так это лишь понять что и как работает, а там уж можно и по-своему переписать хоть с нуля и может быть даже проще получится.
А я на своём опыте убедился, что лучше делать самому с нуля. Времени потратится столько же, сколько разбираться с чужим.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
не нашел там 16 цветный дизеринг? кто нашел скиньте скрин покрупней участок какой нить
источник

ST

Saenro T in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
не нашел там 16 цветный дизеринг? кто нашел скиньте скрин покрупней участок какой нить
Клавиши "-" и "+". Потыкай минусом пока не появится в 16 colour ordered dithering
источник

ST

Saenro T in Ассемблер
Есть 16 colour random dithering, почти выковырял его, но как оказалось он не нужен.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Я глянул мельком.
Что вижу?

1. Штуки вроде
        fld1
       fxch
       fsubp
можно заменить на
        fld1
       fsubrp
Т.е. убрать лишние шаги.
Посмотреть где ещё что-то подобное делается.

2. Оптимизировать:
macro deg2rad {
       fmul  qword[pi_180]
}
 pi_180        dq 0.01745329251994 ; Pi/180
Мы избавляемся от деления и лишних этапов (3 инструкции превратились в 1).
Соответственно, удаляем все деления, какие только можем, заменяя их умножением на обратную величину.
Видел у тебя там fdiv qword[_0.5], когда можно fmul qword[_2.0] сделать. И не только _0.5, а много таких мест.

3. Далее, переведи сопроцессор в режим работы с числами одинарной точности. Не могу гарантировать, но что-то мне подсказывает, что так будет работать быстрее. Нужно через fldcw загрузить нужный режим. Плюс, замени все числа qword на dword. Зачем тебе такая точность?

4. Вот такие штуки замечены:
        fld     qword[bx+LABITEM.L]
       fadd    qword[bx+LABITEM.L]
Можно же написать без лишнего обращения к памяти:
        fld     qword[bx+LABITEM.L]
       fadd    st0,st0

5. Если не принципиальна поддержка 386 (или что там у тебя), используй fcomi* вместо fcom*, а лучше — вообще SSE.
Если важен 386, то замени sahf + .if CARRY? на test ah,1.

6. Где можно обойтись целочисленной арифметикой, веди расчёт в целых числах (без f-инструкций).

7. Но это всё, мне кажется, даст прирост несущественный :)
Может, 10%, а может 5%, а может 0.5%.

А существенный прирост даст переработка алгоритма.
Что-то мне подсказывает, что 90% (95%) кода можно вообще в топку отправить.
Во-первых, найдя другой метод.
Во-вторых, оптимизировав алгоритм (сначала на бумажке, сократив какие-то множители или т.п.).
В-третьих, вероятно можно циклы сократить как-то. Ну или уменьшить их хотя бы, сделать где-то через один и пр.
В-четвёртых, убрать лишние преобразования туда-сюда (может, можно и без LAB обойтись, а как-то в RGB сделать? Не cпеши говорить "нет", подумай).
источник