LINUX.ORG.RU

Релиз Yasm 1.0.0

 , , ,


1

0

Yasm - распространяемый под лицензией BSDL ассемблер для x86 и x86_64 платформ с поддержкой синтаксисов nasm и gas, частично tasm , форматов binary, ELF32, ELF64, 32/64-bit Mach-O, RDOFF2, COFF, Win32/64.

Несмотря на уже широкое использование yasm в различных opensource проектах, это первая не-бета версия, автором были достигнуты следующие цели:

  • Полная поддержка NASM-синтаксиса для основных целевых платформ
  • Поддержка синтаксиса GAS (GNU assembler / binutils)
  • source-level отладка с использованием DWARF2 или CodeView 8.0 (VS2005)
  • Поддержка TLS (Thread local storage) для ELF32/64 и SEH (structured exception handling) для Win32/64
  • Поддержка наборов инструкций новейших процессоров AMD XOP/FMA4/CVT16 (Bulldozer) и Intel AVX (Sandybridge)

страница проекта

>>> Подробности и загрузка

★★★★★

Проверено: maxcom ()
Последнее исправление: Klymedy (всего исправлений: 1)
Ответ на: комментарий от Sun-ch

Так что все «асмы с человеческим лицом» дают в руки «программную модель» процессора, поскольку реальный код, который оптимизирован - это адская смесь, понять которую человеку уже не дано.

Sun-ch
()

скрестили ежа с ужом ?

kto_tama ★★★★★
()
Ответ на: комментарий от anonymous

Почему? Компилятор вполне может оперировать такими сущностями, как число тактов на инструкцию. И оптимизировать по этой характеристике глобально, а ты можешь это только для самых простых чипов, типа пиков и прочего любительского говна.

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Вот ты к примеру знаешь сколько конвееров у ксеона 5000 серии, и какова их глубина? Как реализованно спекуляпивное исполнение? А компилятор знает, и еще много чего, про что в книжках не пишут.

Про это пишется в Intel Optimization Manual,например. Иначе откуда разработчики компиляторов знают, как нужно оптимизировать под конкретную модель процессора?

реальный код, который оптимизирован - это адская смесь, понять которую человеку уже не дано


надо говорить за себя, а не за всех человеков. У меня вот чтение дизассемблированного x86 кода особых проблем не вызывает :)

Компилятор вполне может оперировать такими сущностями, как число тактов на инструкцию. И оптимизировать по этой характеристике глобально, а ты можешь это только для самых простых чипов, типа пиков и прочего любительского говна.


Человек тоже может оперировать числом тактов на инструкцию :)
А у пиков число тактов вообще фиксированное, и оптимизировать там нечего. И они не говно, а имеют свою сферу применения

И вообще, откуда такая агрессия по отношению к ассемблеру?




Harald ★★★★★
()
Ответ на: комментарий от Harald

Иначе откуда разработчики компиляторов знают, как нужно оптимизировать под конкретную модель процессора?

Покупают лицензии у Интела. А потом пишут, наш суперкомпилятор дает самый быстрый код.

Sun-ch
()
Ответ на: комментарий от Harald

Человек тоже может оперировать числом тактов на инструкцию

Дело не в этом. Попробуй написать хотя бы 10 инструкций, решающих твою задачу, так, чтобы число тактов было минимально, думаю, что тебе это очень быстро надоест.

Sun-ch
()

Внимание. На лоре кто-то неправ.

anonymous
()

Хорошо что сделали.

Deleted
()
Ответ на: комментарий от cheerfulboy

Я пишу на питоне :)

И правильно делаешь. Я недавно поставил опыт и переписал большой вычислительный кусок на Фортране, потратил полторы недели вечеров. Толку --- время выполнения уменьшилось на 20%. Так что, если с толком оптимизировать алгоритм, можно писать на Питоне и дальше и шли бы они лесом.

Vudod ★★★★★
()
Ответ на: комментарий от Sun-ch
add    %o0, 1, %o0
faddd    %f0, %f2, %f0
fmuld    %f4, %f6, %f4
srlx    %o1, 1, %o1

Обоже, дайте мне развидеть это!

xintrea
()
Ответ на: комментарий от Sun-ch

Ну и че тут такого?

>Для тех кто не понял, нужно комбинировать код так, чтобы за 1 такт - выполнить сразу 4 инструкции. Компилятор это может, а человек нет.

Ну и почему же это не доступно человеку?

Тот же интел все эти моменты ни от кого не прячет!

Дело не в этом. Попробуй написать хотя бы 10 инструкций, решающих твою задачу, так, чтобы число тактов было минимально, думаю, что тебе это очень быстро надоест.

Угу, а ты попробуй переписать на ЯВУ тот же загрузчик из MBR.

Может не будешь лезть не в свою предметную область?

ЗЫ: Говорить о количестве тактов на команду для х86 (или х86_64) после пня как бэ некультурно :)

AF ★★★
()
Ответ на: комментарий от shty

> большой пыщщьь... даже фороникс качественнее подходит к тестированию

А какая разница в данном случае? Сравнивались относительные показатели либ.

sv75 ★★★★★
()
Ответ на: Ну и че тут такого? от AF

>Ну и почему же это не доступно человеку?

ну ты достал. Компьютер может прогнать 100 млрд. шахматных позиций за миллисекунду в поисках оптимального хода. А тебе и всей твоей родне в 777777777 колене жизни на это не хватит.

Sun-ch
()
Ответ на: Ну и че тут такого? от AF

Угу, а ты попробуй переписать на ЯВУ тот же загрузчик из MBR.

Угу.

Forth and the FreeBSD bootloader

ACM SIGPLAN Notices Volume 35 , Issue 8 (Aug., 2000) Pages: 15 - 17 Year of Publication: 2000 ISSN:0362-1340

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Компьютер может прогнать 100 млрд. шахматных позиций за миллисекунду в поисках оптимального хода. А тебе и всей твоей родне в 777777777 колене жизни на это не хватит.

Я, наверное, должен испугаться такого количества семерок)))

Что ты этим сказать то хотел?

Forth and the FreeBSD bootloader...

Это удар ниже пояса! Forth - это мутант, который может прикинутся чем угодно, в том числе и ассемблером.

AF ★★★
()
Ответ на: Ну и че тут такого? от AF

Может не будешь лезть не в свою предметную область?

Извините. Свой тяжкий хлеб в ИТ, я начал зарабатывать именно с программирования на MACRO-11. Дальше был хардкорный системный ассемблер для s/360-370-390, VAX и Мотороллы.

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Извините. Свой тяжкий хлеб в ИТ, я начал зарабатывать именно с программирования на MACRO-11. Дальше был хардкорный системный ассемблер для s/360-370-390, VAX и Мотороллы.

Звон орденов впечатляет! Только авторитеты должны уметь не только орденами трясти, но и аргументировать свои ответы. А вот с этим как-то тоскливо.

Вот если бы ты описал, как пробовал вручную комманды паралелить и что при этом получалось/неполучалось, и почему, то был бы другой разговор.

AF ★★★
()
Ответ на: комментарий от AF

Да то, что ассемблерный прогер подобен чемпиону мира по шахматам против компьютера, он всегда проиграет.

Forth - это мутант, который может прикинутся чем угодно

Да я тебе на лиспе или хаскелле напишу метазагрузчик, который выдаст файл с любыми ассемблерными инструкциями.

Sun-ch
()

Скажите, а какие отличия от текущего nasm'а? Чем лучше?

ntp
()
Ответ на: комментарий от Sun-ch

>Компьютер может прогнать 100 млрд. шахматных позиций за миллисекунду в поисках оптимального хода

Ох и заврался же ты, Ораклыч! Даже если предположить, что одна позиция анализируется за один такт, что тактовая частота такого процессора должна быть 1e11/1e-3=1e14... Это 100 терагерц.

И, к твоему сведению, человеческий мозг действует не перебором.

linuxfan
()
Ответ на: комментарий от AF

Вот если бы ты описал, как пробовал вручную комманды паралелить и что при этом получалось/неполучалось

А ты пробовал в Владивосток пешком ходить, когда люди туда летают на самолетах?

Sun-ch
()

Саныч прав

Да, Саныч, в принципе, прав. Современные процессоры делают из расчета на умные компиляторы, хотя иногда и переоценивают их умноту (см. Itanium). Вставки на ассемблере, которые суют в опенсорсные продукты на данный момент - там исключительно из-за несовершенства компиляторов, которые плохо умеют SIMD, и т.д. Хардверные продукты - другое дело, там можно потратить пару человеко-лет, чтобы соптимизировать несколько узких мест под строго определенную архитектуру. Такие дела.

faustus
()
Ответ на: комментарий от Sun-ch

> Дальше был хардкорный системный ассемблер для s/360-370-390, VAX

О! Ваксы супир, сам писал. mov R1, R0... :)
Асм таки нужен - без него писать всякие загрузчики, менеджеры памяти и т.п. - тухло. Да и просто по-программерски приятнее 100% контролировать код, чем надеяться на мнимую отлаженность gcc.

matumba ★★★★★
()
Ответ на: комментарий от xintrea

>Осталось чтоб появился отладчик уровня OllyDbg с человеческим интерфейсом, и уже можно детей и студентов обучать ассемблеру и показывать как микропроцессор устроен.

в последнее время присматриваюсь к edb http://www.codef00.com/projects.php вполне рабочий, хотя пилить там еще много...

terminat0r
()
Ответ на: комментарий от linuxfan

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

Sun-ch
()
Ответ на: комментарий от Sun-ch

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

Рекомендую таки подучить матчасть. Шахматы на сегодняшний день не поддаются полному перебору. Существующие алгоритмы по определенным эвристикам отсекают «бесперспективные» ветки, анализируя лишь удачные позиции. И в итоге получается узкоспециализированная система, которая _может_ соревноваться с сильнейшими людьми-шахматистами, чей мозг умеет еще кое-что помимо шахмат.

linuxfan
()
Ответ на: комментарий от linuxfan

А причем тут полный перебор, это тебе не шашки. Задача решена в плане использования AI, т.к. теория шахмат достаточно хорошо изучена и формализована. Думаю, что уже человек никогда не выиграет у машины. Остается только го, где люди пока выигрывают у компьютеров.

Sun-ch
()
Ответ на: комментарий от Sun-ch

Остается очень интересным еще один вопрос, а если собрать 1000 лучших гроссмейстеров мира в одну команду, типа кластера, и без ограничения времени на коммуникации и принятия решения, сыграть с машиной, что из этого получится. Причем модель принятия решения сделать адаптивной, в зависимости от состояния партии и успешности ходов, принятых по рекомендациям «авторитетов».

Sun-ch
()
Ответ на: Саныч прав от faustus

Я тоже считаю, что Саныч прав.

Системные вещи - тут асм нужен, да.

Часто ли приходится ли писать вам такие низкоуровневые вещи?

Не понимаю лоровских (полу)анонимусов, не написавших ни одной либы/загрузчика и.т.д, однако доказывающих важность ассемблера.

Только перед однокурсниками понтоваться, тыча пальцем в дизассемблинг простого crackme или кода из phrack.

=)

x4DA ★★★★★
()
Ответ на: комментарий от Sun-ch

> Лехко.

To get full 4-issue per cycle on UltraSPARC

UltraSPARC

Хех, а если на x86 нужно цепочечные команды, MMX, SSEx и т.д.? Что, уже есть в природе компиляторы, которые умеют сами их применять?

anonymous
()
Ответ на: комментарий от Sun-ch

> enable the use of these extra instructions

К сожалению слово 'enable' подразумевает, что эти инструкции впринципе можно использовать. Это отнюдь не значит, что они будут использованы. Хотя вот mmx действительно используется gcc. С остальными всё гораздо хуже.

GArik ★★★
()
Ответ на: комментарий от GArik

http://www.linux.org.ru/forum/talks/4729581

еще добавлю то, что gcc достаточно бедно использует то . что выше sse2
icc использует sse в гораздо большей степени.
ну и в любом случае есть небольшие кусочки кода критичные к производительности, которые писались, пишутся и будут писаться на asm и дальше, к тому же грядет переход с SSE на AVX

Sylvia ★★★★★
() автор топика
Ответ на: комментарий от Sun-ch

Вы верите, что компилятор оптимизирует лучше человека? Ну-ну. Для многих компиляторов векторизация вообще не знакомое слово. Более-менее нормально оптимизирует только интел, другие сливают по-полной. Компилятор вам оптимизирует и под Intel и под AMD? Святая простота. Верьте и дальше во всемогущие компиляторы.

Booster ★★
()
Ответ на: комментарий от Sun-ch

Идеально оптимизировать компилятору просто не дано. Для этого нужен искусственный интеллект и дело тут не в перемешивании инструкций, просто некоторые алгоритмы невозможно оптимально выразить на яву. Может компиляторы с ИИ когда-нибудь и появятся, но пока до этого далеко. Знаток ассемблера может вытворять такие вещи, используя всё множество доступных ему инструкций, что никакому компилятору не снилось.

Booster ★★
()
Ответ на: комментарий от nnm

>Ms-Rem'a на васме, где для примеров использован Delphi
это те примеры где скомпиленный код в виде готового бинарника получается раз в 100-200 больше по объему нежели ассемблерный аналог? да. чудеса программирования

px ★★★
()
Ответ на: комментарий от Sun-ch

>Я вообще не понимаю, какой мазохист пишет на асме, в наш век мегакомпиляторов на С

ламо, почитай сорцы mplayer-а, много думай

black7
()
Ответ на: комментарий от x4DA

>Я тоже считаю, что Саныч прав.

зассаныч много п%дит не по делу, это полностью нивелирует одну-две разумные мысли которые затерялись в его флуде

доказывающих важность ассемблера


зачем доказывать, достаточно сорцы x264 и mplayer-а посмотреть. и подумать

black7
()

yasm не нужен. Есть nasm и fasm. prove me wrong

anonymous
()
Ответ на: комментарий от Booster

>Просто у некоторых яву головного мозга

яву - это надо понимать «язык высокого уровня»?

Деточка, был такой чувак по фамилии Тьюринг, тебе в твоем ПТУ должны были про него рассказать, ему очень сильно повезло, что он не дожил до создания питона и прочих пхп, но зато он сформулировал фичу которая сейчас называется «Полнота по Тьюрингу».

Смысл очень прост «язык называется тьюринг-полным, если на нём можно реализовать любую вычислимую функцию.»

Так что любые претензии на то, что ассемблер наделен чудными свойствами и позволяет писать программы, которые я не могу написать на джаве, лиспе и тем более на фортране - это бред, и скотская антинаучная собачья чушь.

Sun-ch
()
Ответ на: комментарий от Sun-ch

> Деточка, был такой чувак по фамилии Тьюринг, тебе в твоем ПТУ должны были про него рассказать, ему очень сильно повезло, что он не дожил до создания питона и прочих пхп, но зато он сформулировал фичу которая сейчас называется «Полнота по Тьюрингу».

Подменой понятий не надо заниматься. Речь идет об оптимизации.

Компилятор по состоянию на сейчас действительно может развернуть цикл, сделать switch-case по табличке и даже натыкать модных инструкций, и даже скомбинировать их в целях «оптимизации». Только откуда ему знать болезному, что он оптимизирует по производительности ту ветвь выполнения, которая выполняется реже всего ? Он или обе ветки развилки «усреднит» или примет неправильное решение.

Компилятор тупой, и не умеет трюкачества. И унылые «программенские этюды» навроде «посчитать количество единичных битов в четных позициях двойного слова» превращаются в извращение по «на%быванию» компилятора.

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

На ассемблере это делается через тривиальный add rp,rp плюс куча adc rp,rp. На ЯВУ с врукопашную реализованым «флагом переноса» вам компилятор такой огород состроит - закачаетесь. Да еще с условными переходами.

anonymous
()
Ответ на: комментарий от Sun-ch

Если яву тьюринг полный, значит асм не нужен? Уж лучше быть в ПТУ, чем таким быдлокодером.

Booster ★★
()
Ответ на: комментарий от Sun-ch

> Да я тебе на лиспе или хаскелле напишу метазагрузчик, который выдаст файл с любыми ассемблерными инструкциями

Напиши пожалуйста. Для legacy x86 (1 бут сектор 512 байт). Должен переводит x86 и VM и грузить ядро начиная с первого мегабайта ОЗУ >_<

Ждём-с.

sv75 ★★★★★
()
Ответ на: комментарий от sv75

(setq x (make-array '(4 2 3) :initial-contents % boot loader for x86

'(((a b c) (0 2 3))

((d e f) (3 1 2))

((g h i) (2 3 1))

((j k l) (0 0 0)))))

(setq boot-x86

(list

(aref x 0 0 0) (aref x 0 0 1) (aref x 0 0 2)

(aref x 0 1 0) (aref x 0 1 1) (aref x 0 1 2)

(aref x 1 0 0) (aref x 1 0 1) (aref x 1 0 2)

(aref x 1 1 0) (aref x 1 1 1) (aref x 1 1 2)

(aref x 2 0 0) (aref x 2 0 1) (aref x 2 0 2)

(aref x 2 1 0) (aref x 2 1 1) (aref x 2 1 2)

(aref x 3 0 0) (aref x 3 0 1) (aref x 3 0 2)

(aref x 3 1 0) (aref x 3 1 1) (aref x 3 1 2)

aref x 0 0 0) (aref x 0 0 1) (aref x 0 0 2)

(aref x 0 1 0) (aref x 0 1 1) (aref x 0 1 2)

(aref x 1 0 0) (aref x 1 0 1) (aref x 1 0 2)

(aref x 1 1 0) (aref x 1 1 1) (aref x 1 1 2)

(aref x 2 0 0) (aref x 2 0 1) (aref x 2 0 2)

(aref x 2 1 0) (aref x 8 1 1) (aref x 2 1 2)

(aref x 3 0 0) (aref x 3 0 1) (aref x 3 0 2)

(aref x 3 1 0) (aref x 3 1 1) (aref x 3 1 2)))

Sun-ch
()
Ответ на: комментарий от anonymous

Только откуда ему знать болезному, что он оптимизирует по производительности ту ветвь выполнения, которая выполняется реже всего ? Он или обе ветки развилки «усреднит» или примет неправильное решение.

А вот это херня полная. Он выберет, «наиболее вероятную ветку», потому что код с 0 никто не пишет, все используют популярные фреймворки, разработчики которых оптимизируют. Или просто покупают библиотеки.

Sun-ch
()
Ответ на: комментарий от anonymous

Вы реализуйте без танцев с саблями на сях хотя-бы обычное знаковое сложение двух 256-разрядных слов.

Да лехко дядя, че ты нам вообще тут паришь? Ты мне покажи на асме вычисления функции Аккермана, которая не является примитивно рекурсивной.

Sun-ch
()
Ответ на: комментарий от anonymous

>На ЯВУ с врукопашную реализованым «флагом переноса» вам компилятор такой огород состроит - закачаетесь. Да еще с условными переходами.

Чувак покажи на асме решение очень простой задачи. Есть матрица МхN, нужно отсортировать элементы этой матрицы таким образом, чтобы сумма элементов по диагонали была <= E. N и M - не определенны.

Sun-ch
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.