Anonymous
Александр
Александр
Что за девчачести
Александр
На Лине почти на все есть сорцы
Anonymous
wine
Программа не запускается
Александр
Александр
Так программа бинарно виндовая?
Anonymous
Anonymous
Если не врут, то ещё и на Дельфи писанная
Александр
Не полностью понятно было из сообщения.
Александр
Так опять же, зачем оно тебе, проще написать свое.
Александр
Что за прога?
Александр
Скорее всего она уже написана в unix.
Anonymous
Eugene
Всем салют!
Подскажите, есть ли профайлер под DOS какой-нибудь?
Eugene
Forbidden показывает. Правда, с мобилы.
Eugene
Короче, у меня один и тот же код работает раз в 5 медленнее, если добавить nop перед циклом :)
Хочу выяснить почему...
Aiwan \ (•◡•) / _bot
Eugene
выравнивание?
Прямо-таки раз в 5 ?
Тем более, там есть варианты, которые выравнены к 16 байтам, но работают медленно, а есть невыравненный, но работают быстро.
Yura
Aiwan \ (•◡•) / _bot
выравнивание?
хотя это чушь, это к данным относится, а не к коду
Aiwan \ (•◡•) / _bot
#book Кип Р. Ирвин | Язык ассемблера для процессоров Intel (4-е издание) перевод
masm, win & msdos
електр🟢нік ✙🟠рчбеч ඞ
@jinxonik а есть еще задачки по асму какие-то? а то скучно...
Aiwan \ (•◡•) / _bot
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
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 с хуком?
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 - хороший инструмент, но иногда, очень редко, врет.
Eugene
Ну, эта информация, она все таки не полностью стирает с лица Земли MulX против Imul, когда речь заходит именно о latency: у последней, можно смело получить троечку. А что там процессор в очередь поставит и прочее, уже эксперементами решаемо. Ну, или IACA - хороший инструмент, но иногда, очень редко, врет.
О, кстати! А код для доски иака может анализировать?
Ioann_
Доска, это что?
Eugene
Ну, эта информация, она все таки не полностью стирает с лица Земли MulX против Imul, когда речь заходит именно о latency: у последней, можно смело получить троечку. А что там процессор в очередь поставит и прочее, уже эксперементами решаемо. Ну, или IACA - хороший инструмент, но иногда, очень редко, врет.
А разве это только про mulx? Написано ж, что для всех. Да и mulx имеет специфическое применение — для длинной арифметики.
Eugene
Ioann_
А разве это только про mulx? Написано ж, что для всех. Да и mulx имеет специфическое применение — для длинной арифметики.
Чтооо? MulX, не только в bn применим, он 64 на 64 умеет делать, но и imul тоже умеет, только с флагами, да. Но MulX могет 64 на 64 в любой регистр, что круто, временами, а вот imul только в один.
Про доску, я к чему:
Иака он же под процы, а не под ОСки. Так что, все ок будет. На доске замеры делать лучше, ну и еще там команды сброса кеша работают.
Ioann_
А на винде они только из r0 доступны, вродь
Eugene
Я имею в виду, что съест ли он код без PE-заголовка? Там вроде метки ставить нужно, насколько я помню. Посмотрю, спасибо за идею! 😉
Eugene
Ioann_
Кто они?
команды сброса кеша, конечно
Ioann_
Ioann_
Иака не учитывает бранч миспредикшны, кеш миссы и прочее - рассматривает код так, как будто все всегда ок.
Eugene
Ioann_
Угу, но в любом случае, принцип таков: если есть возможность обойтись лишним тактом, но без бранча, лучше обойтись этим тактом. Типа, cmove и прочие команды. Иногда adc зайти может, что-то еще. Ситуаций много, про это я говорить могу много. Но асм вообще говоря, не мой основной язык, я крестовик, а вообще, я простой человек, и слово программист в моем отношении, звучит как оскорбление. Программистов сегодня много, но все ради зарплаты, но у меня не так.
Eugene
Угу, но в любом случае, принцип таков: если есть возможность обойтись лишним тактом, но без бранча, лучше обойтись этим тактом. Типа, cmove и прочие команды. Иногда adc зайти может, что-то еще. Ситуаций много, про это я говорить могу много. Но асм вообще говоря, не мой основной язык, я крестовик, а вообще, я простой человек, и слово программист в моем отношении, звучит как оскорбление. Программистов сегодня много, но все ради зарплаты, но у меня не так.
Ну, cmov иногда работает хуже, чем jcc. Тестить надо варианты, setcc пошустрее.
Ioann_
cmov и setc разные, первый перебросит данные, а второй только байт выставит. А байты, кстати, это проблема тоже. Partial Register Stalling и прочие вещи никто не отменял. Ну, да, тут тестами тоже, но с опытом уже чуйка вырабатывается. Но тут скорее соль в том, что это разные команды.
Eugene
Я писал как-то статейку «обходимся без ветвлений». Если есть интерес, могу дать покритиковать :)
Ioann_
Кидай, конечно же.
Ioann_
Самое главное, это тесты. Их очень сложно делать грамотно. Это прям, надо точно не в инете гуглить. В инете неправильно тестируют. То лишние call ы накидают, то кеш инструкций набьют. И все такое. Ну и да, наверное на RTOS тестировать надо.
Ioann_
Жду линку, да.
Eugene
http://www.cyberforum.ru/blogs/521524/blog5122.html
Eugene
Замечания, дополнения лучше в личку.
Eugene
Ioann_
Ioann_
но, на изучение надо время. Вечерочком отпишу. И по поводу без ветвлений, если будет что отписать, конечно.
Eugene
Там как раз про технологию замера.