Единый язык ассемблера

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

Я думаю о чем-то вроде симулятора MARS MIPS (довольно простой и легко читаемый код), с возможностью делать настоящие программы. Никаких библиотек не требуется (но приятно, если это возможно), просто чтобы ускорить работу (библиотеки или UNIX-подобные инструменты) единым способом.

Извините, если это глупый вопрос, я новичок в ассемблере. Я просто не нахожу язык ассемблера NASM или UNIX ни чрезвычайно кросс-платформенным, ни простым для чтения и кодирования.


person sheerun    schedule 16.04.2011    source источник
comment
Какое приложение у вас есть ум?   -  person jmg    schedule 16.04.2011
comment
Ну, есть люди, которые шутят, что C — это просто портативный ассемблер. И поскольку он довольно часто используется в качестве целевого языка компиляторов, в этом может быть доля правды.   -  person jmg    schedule 16.04.2011
comment
jmh: Ну, C в основном стоял на месте с середины семидесятых (за исключением небольшой работы по стандартизации), а ассемблеры в настоящее время более продвинуты :-)   -  person Marco van de Voort    schedule 28.04.2011


Ответы (4)


Байт-код JVM похож на язык ассемблера, но без арифметики указателей. Однако он достаточно объектно-ориентирован. С положительной стороны, это полностью кросс-платформенный.

Возможно, вы захотите взглянуть на байт-код LLVM, но имейте в виду следующее предупреждение: http://llvm.org/docs/FAQ.html#can-i-compile-c-or-c-code-to-независимыйотплатформы-llvm-bitcode

person Robin Green    schedule 16.04.2011
comment
Я согласен с рекомендацией LLVM :) - person Grzegorz Wierzowiecki; 31.08.2011

Первое: написание на ассемблере не гарантирует прироста скорости. Использование правильного алгоритма для текущей работы оказывает наибольшее влияние на скорость. К тому времени, когда вам нужно перейти к сборке, чтобы выжать последние несколько капель, вы можете сделать это, только адаптировав алгоритм к конкретной архитектуре рассматриваемого оборудования. Общий HLA (ассемблер высокого уровня) в значительной степени противоречит цели написания кода на ассемблере. Обратите внимание, что я не сбиваюсь с Рэндалла Хайда HLA, отличный продукт, я просто говорю, что вы ничего не получите от написания ассемблера так, как компилятор генерирует машинный код. Большинство компиляторов C и C++ имеют очень хорошие оптимизаторы и могут создавать машинный код, превосходящий почти любую наивную реализацию на ASM.

Посмотрите, можете ли вы найти эти книги (из вторых рук, они больше не издаются) Майкла Абраша: "Дзен языка ассемблера" и "Дзен оптимизации кода". Или поищите его статьи на DDJ. Они дадут вам непревзойденное представление об оптимизации,

person Andre Artus    schedule 16.04.2011
comment
Было бы неплохо, если бы люди, которые проголосовали за мой ответ, оставили комментарий, объясняющий, почему они считают мой ответ бесполезным. Спрашивающий намекнул, что написание на ASM ускорит работу единым образом, но это неправда. Если вы хотите кодировать быстрее; перейти на высокий уровень. Если вам нужен более быстрый код, улучшите свой алгоритм. Единственное волшебство (родного) ASM - это возможность более точно указать, что вы хотите, чтобы ЦП делал. Вы теряете большую часть этого с UASM (который представляет собой высокий уровень шума, низкий уровень сигнала; для немногим лучших [часто худших] результатов, чем скомпилированный язык высокого уровня). - person Andre Artus; 17.09.2011

Связанные вещи, поэтому я надеюсь, что они могут быть полезны:

Есть

с подходом своего рода портативного ассемблера.

Интересный проект операционной системы с графическим пользовательским интерфейсом, написанным на ассемблере, и отличным API сборки:

person Grzegorz Wierzowiecki    schedule 30.08.2011
comment
ОП спрашивал об унифицированном ассемблере язык, а не об ассемблере - person phuclv; 23.01.2014
comment
Вот почему я написал «Связанные материалы», поэтому я надеюсь, что они могут быть полезны, под «связанными» я имел в виду, что они не обязательно отвечают на вопрос напрямую, но, поскольку ИМХО тесно связаны, могут быть полезны другим читателям. - person Grzegorz Wierzowiecki; 09.02.2014

LLVM IR обеспечивает достаточно переносимую сборку, поддерживаемую мощным компилятор, поддерживающий многие проекты, включая Clang

person Grzegorz Wierzowiecki    schedule 09.02.2014