2009-04-21 2 views
5

Я смотрел на L.in.oleum и заинтригован его сочетанием конструкций более высокого уровня (циклы, динамические переменные) с низким уровнем ассемблерной мощности (регистры).Какие хорошие или интересные ассемблерные языки, но на более высоком уровне?

Существуют ли другие языки, такие как Lino, которые сочетают скорость ассемблера с функциями повышения производительности?

EDIT: Я понял, что это звучит как реклама. Я искренне интересуюсь другими ассемблерными языками, Лино - единственное, о чем я знаю.

ответ

1

Большинство компиляторов C, которые принимают встроенную сборку. Разумеется, детали, оптимизированные для сборки, не являются кросс-архитектурой, но я не могу представить себе язык ассемблерной архитектуры, который бы так эффективен. Я посмотрю на линолеум, но с оптимизацией компиляторов и совершенно разных платформ, где от 4 до сотен регистрах, я действительно не вижу, чтобы это работало очень хорошо.

Другой вариант - C#/Java и их байт-код. Но я все еще сомневаюсь в полезности ручной оптимизации в них.

+0

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

+0

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

+0

C# bytecode - это MSIL, если я не ошибаюсь, язык CLR. Вы можете сделать некоторые настройки, но я думаю, что интерпретатор C# делает довольно приличную работу. Лино интересно в экспериментальной форме. Если ничего другого, он получает справедливое практическое применение своим создателем. Когда-то хорошо, что он теоретически переносится в любую систему. – CodexArcanum

2

Вы можете попробовать прямо с помощью LLVM.

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

Если вы застряли, просто напишите, что вы хотите на C++, тогда скомпилируйте его с Clang, сохраняя промежуточную форму.

Для быстрого указания, может ли вам нравится это попробовать их online compiler

+0

+1 для онлайн-игрушек – SingleNegationElimination

2

Win32 на ассемблере: В основном окна заголовки ассемблера с некоторыми хорошими макрокомандами высокого уровня:

http://www.masm32.com/

9

C-- является промежуточным языком, предназначенным для генерироваться в основном составителями, находится где-то между C и ассемблер

+0

Можно сказать, что сам C довольно низкий, но не такой низкий уровень. – pilsetnieks

0

Система z имеет HLASM, которую мы используем для разработки. Он добавляет всевозможные конструкции на уровне более высокого уровня. Как и HLASM, немного подстраивая сборку к высокоуровневому языку, я считаю, что у IBM есть внутренний продукт на основе PL/I, который немного приближает C к сбору :-)

0

Я когда-то использовал PL/M, и это казалось для меня, чтобы быть только на один уровень выше собрания. Это больше похоже на макроязык, но с некоторыми конструкциями более высокого уровня, такими как циклы и т. Д. Это был интересный опыт.

4

FORTH - не совсем ассемблер, но он используется сильно и очень низко.

+0

+1: Я не использовал его на практике, но он кажется хорошей «оберткой» для сборки! –

0

LLVM - хороший ответ.

Некоторые другие интересные языки - байт-код JVM и MSIL (байт-код платформы .Net). Оба обеспечивают системы на основе стеков, что является большим отличием от сборки x86.

-1

C сам по себе является почти сборкой, всего в 100 раз более читаемым, и он помогает вам, когда у вас много активных переменных. Однако это близко к ассемблеру. В C нет операции, которая почти не соответствует (или даже напрямую) на языке ассемблера.

ASM: «делать именно то, что я говорю, точно, как я говорю это»

C: «делать то, что я имею в виду, и вы можете сделать некоторые ограниченные изменения порядка, если это быстрее и не будет разрушить результаты "

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

Современные процессоры настолько сложны, что человеку трудно предсказать, какое действие будет иметь последовательность инструкций. Компилятор может фактически управлять всеми задержками и пропускной способностью и последовательно использовать (близкие) последовательности оптимальных инструкций. Компилятор C сегодня почти наверняка выйдет из программы программистов на типичном коде. Для плотных петель оптимизированная для человека сборка может превосходит C, но обычно это не так много.

+0

Действительно? Просто понижение? Благодарю. Что помогает. – doug65536

Смежные вопросы