Александр
Исходников нет
Что за прога?
Anonymous
Александр
Не важно
Как не важно
Александр
Что за девчачести
Александр
На Лине почти на все есть сорцы
Anonymous
На Лине почти на все есть сорцы
Программа изначально под Винду
Anonymous
wine
Программа не запускается
Александр
Программа изначально под Винду
Значит они взяли qt или gtk
Александр
Так программа бинарно виндовая?
Anonymous
Если не врут, то ещё и на Дельфи писанная
Александр
Не полностью понятно было из сообщения.
Александр
Так опять же, зачем оно тебе, проще написать свое.
Александр
Что за прога?
Александр
Скорее всего она уже написана в unix.
Eugene
Всем салют! Подскажите, есть ли профайлер под DOS какой-нибудь?
Eugene
Forbidden показывает. Правда, с мобилы.
Eugene
Короче, у меня один и тот же код работает раз в 5 медленнее, если добавить nop перед циклом :) Хочу выяснить почему...
Eugene
выравнивание?
Прямо-таки раз в 5 ? Тем более, там есть варианты, которые выравнены к 16 байтам, но работают медленно, а есть невыравненный, но работают быстро.
Aiwan \ (•◡•) / _bot
выравнивание?
хотя это чушь, это к данным относится, а не к коду
Aiwan \ (•◡•) / _bot
#book Кип Р. Ирвин | Язык ассемблера для процессоров Intel (4-е издание) перевод masm, win & msdos
електр🟢нік ✙🟠рчбеч ඞ
@jinxonik а есть еще задачки по асму какие-то? а то скучно...
Eugene
@jinxonik а есть еще задачки по асму какие-то? а то скучно...
Есть. Мне нужно решить вот такую задачу. Не знаю, решаема ли она. Нужно сложить 2 беззнаковых байта и получить слово, например: add al,ah setc ah Этот код нужно как-то сократить на байт. Один из слагаемых должен быть al, результат в ax. Можно и так: add al,[si] setc ah Но тоже минус байт кода нужно. Этот setc занимает аж 3 байта, падла!
Aiwan \ (•◡•) / _bot
xor ax,ax mov al,0ffh add al,0ffh adc ah,0
Aiwan \ (•◡•) / _bot
add al,0ffh cmovc ah,1
Aiwan \ (•◡•) / _bot
Eugene
xor ax,ax mov al,0ffh add al,0ffh adc ah,0
xor ax,ax = 2 байта + adc ah,0 = 3 байта, итого 5 байт. Это побольше 3-х байт.
Aiwan \ (•◡•) / _bot
инициализацию убери из расчетов
Aiwan \ (•◡•) / _bot
посчитай сколько add и adc будет
Eugene
Мой вариант add+setc = 2+3=5 байт. Надо сделать за 4. add+adc = 4 байта, если 0 заменить на какой-нибудь регистр, в котором лежит 0 (такой есть, в общем-то). Проблема только в том, что изначально в ah не ноль, поэтому без инициализации никак.
Eugene
А если adc ah,0 , то это 3 байта будет (исключение: adc al,0 — 2 байта).
Eugene
Я могу среднее найти за 4 байта, но оставшись в пределах того же байта: add al,ah rcr al,1 Но мне надо сумму и расширить ещё на слово, т.к. в байт может не влезть.
Eugene
если AH изначально сброшен, можно так add al, dl rcl ah иначе — никак, думаю
Если ah был бы изначально сброшен, проблемы бы не было: adc ah,ah и всё, к примеру (rcl тоже можно, но он тормозной, поэтому лучше adc). Задача: впихнуть код в нужный объём. Не хватает 1 байта, как прям в классической рукописи :)) Ищу везде, где можно, но рассматриваю и возможность сократить код: lodsw add al,ah setc ah
Eugene
Всё! Я нашёл байт в другом месте, юху! Актуальность задачи отпадает!
bilka00
Назрел у меня сложный вопрос. Есть игра c dx7, работает под всем что выше winxp крайне плохо
bilka00
как бы вот замутить что то что описано вот тут http://www.cyberforum.ru/directx/thread2206650.html
bilka00
при том что исходников у меня нет конешн
bilka00
И еще интересует профайлер который сможет все запрофайлить без исходников. Подошел бы модуль к какому то отладчику
Ioann_
Написать свою dll dx7 с хуком?
bilka00
Написать свою dll dx7 с хуком?
Ну вот об этом я и говорю. Но идея вроде банальная, полюбом кто то уже должен был что то подобное писать
Eugene
Ну вот об этом я и говорю. Но идея вроде банальная, полюбом кто то уже должен был что то подобное писать
Загугли «DirectX 7 to DirectX 8 wrapper». Что-то находится, не уверен, что прям 100% поможет, но какие-то заготовки даже есть на эту тему как минимум. Может, и готовое решение ест, х/з.
Ioann_
Будьте осторожны!
Ioann_
Однооперандная команда x86 / 64 : {I}MUL{X} R32 / R64 имеет разный latency[3;4], хотя Агнер Фог и рапортует о том, что latency у этой команды постоянен и всегда равен 4 - он ошибается: Если после команды умножения данной выше мы обращаемся к регистру содержащему младшие биты результата, то latency будет 3, а если обращаемся к старшим - 4. Речь идет, конечно, о поколении процессоров Intel Sandy Bridge и выше. #asm #optimization #interesting
Eugene
Думаю, стоит перефразировать это так: «если процессор решит поставить следующей командой в очереди на исполнение...» и дальше по тексту :))
електр🟢нік ✙🟠рчбеч ඞ
то чувство когда процессор решет за тебя
Ioann_
Ну, эта информация, она все таки не полностью стирает с лица Земли MulX против Imul, когда речь заходит именно о latency: у последней, можно смело получить троечку. А что там процессор в очередь поставит и прочее, уже эксперементами решаемо. Ну, или IACA - хороший инструмент, но иногда, очень редко, врет.
Ioann_
Доска, это что?
Ioann_
А разве это только про mulx? Написано ж, что для всех. Да и mulx имеет специфическое применение — для длинной арифметики.
Чтооо? MulX, не только в bn применим, он 64 на 64 умеет делать, но и imul тоже умеет, только с флагами, да. Но MulX могет 64 на 64 в любой регистр, что круто, временами, а вот imul только в один. Про доску, я к чему: Иака он же под процы, а не под ОСки. Так что, все ок будет. На доске замеры делать лучше, ну и еще там команды сброса кеша работают.
Ioann_
А на винде они только из r0 доступны, вродь
Eugene
Я имею в виду, что съест ли он код без PE-заголовка? Там вроде метки ставить нужно, насколько я помню. Посмотрю, спасибо за идею! 😉
Ioann_
Кто они?
команды сброса кеша, конечно
Ioann_
Я имею в виду, что съест ли он код без PE-заголовка? Там вроде метки ставить нужно, насколько я помню. Посмотрю, спасибо за идею! 😉
а, ну у меня он объектники хавает, вроде на ура, а вот на доске не тестил, думаю, что возьмет, наверное.
Ioann_
Иака не учитывает бранч миспредикшны, кеш миссы и прочее - рассматривает код так, как будто все всегда ок.
Eugene
команды сброса кеша, конечно
Ну дочитал сообщения. Ну да, в r0.
Ioann_
Угу, но в любом случае, принцип таков: если есть возможность обойтись лишним тактом, но без бранча, лучше обойтись этим тактом. Типа, cmove и прочие команды. Иногда adc зайти может, что-то еще. Ситуаций много, про это я говорить могу много. Но асм вообще говоря, не мой основной язык, я крестовик, а вообще, я простой человек, и слово программист в моем отношении, звучит как оскорбление. Программистов сегодня много, но все ради зарплаты, но у меня не так.
Ioann_
cmov и setc разные, первый перебросит данные, а второй только байт выставит. А байты, кстати, это проблема тоже. Partial Register Stalling и прочие вещи никто не отменял. Ну, да, тут тестами тоже, но с опытом уже чуйка вырабатывается. Но тут скорее соль в том, что это разные команды.
Eugene
Я писал как-то статейку «обходимся без ветвлений». Если есть интерес, могу дать покритиковать :)
Ioann_
Кидай, конечно же.
Ioann_
Самое главное, это тесты. Их очень сложно делать грамотно. Это прям, надо точно не в инете гуглить. В инете неправильно тестируют. То лишние call ы накидают, то кеш инструкций набьют. И все такое. Ну и да, наверное на RTOS тестировать надо.
Ioann_
Жду линку, да.
Eugene
http://www.cyberforum.ru/blogs/521524/blog5122.html
Eugene
Замечания, дополнения лучше в личку.
Ioann_
Что думаешь об этом? http://www.mkurnosov.net/uploads/Main/mkurnosov-rdtsc-2014.pdf
думаю, что штука годная, надо бы сказать.
Ioann_
но, на изучение надо время. Вечерочком отпишу. И по поводу без ветвлений, если будет что отписать, конечно.
Eugene
Там как раз про технологию замера.