Есть ли язык программирования "под" сборкой?
Есть ли язык программирования "под" сборкой?
17 ответов
На самом деле есть уровень кода, который находится ниже машинного кода, называемый Microcode.
Машинный код Время было программистами, закодированными в 1 и 0 бинарных. Хекс считался авансом по этому поводу. Это было до сборки, которая использует имена кода и разделяет части инструкции на части.
Сборка - это текстовое представление машинного кода. У него есть один оператор, который представляет одну инструкцию внутри самого ЦП. Например, "MOV X, Y" - это одиночная инструкция, которая проходит через ЦП и перемещает значение X в позицию Y. Чтобы добраться до машинного кода, ЦПУ будет иметь число, которое представляет "MOV", и число, которое представляет 'X' (если это еще не число) и число, представляющее Y. Эти необработанные двоичные значения HEX являются машинным кодом. Это числа, которые заставляют процессор направлять напряжение / ток через транзисторы, чтобы он делал то, что он делает.
Машинный код - это более низкий уровень, но он очень и очень близок к сборке. Он настолько близок, что никто не мешает им пользоваться из-за того, что он читает инструкцию "MOV" = ход. Имена переменных также становятся читаемыми, а не необработанными адресами в стеке или куче.
И, чтобы пойти еще ниже (не то, что слово "язык" подходит для "машинного" языка или даже для более низких физических уровней), но ниже машинного языка находится конфигурация множества шлюзов и переключателей, используемых для фактической реализации каждого двоичного кода операции для конкретное аппаратное обеспечение (процессор)... Отличная книга, которая охватывает этот еще более низкий уровень, написана Чарльзом Петцольдом под названием " КОД"
Если ниже, вы имеете в виду более низкий уровень, то да. Есть машинный язык. Сборка превращается в машинный язык перед запуском. Во многих современных процессах машинный язык эмулируется в микрокоде. Смотрите это для более подробной информации о микрокоде.
Я думаю, что самое низкое, что вы можете получить, это что-то под названием Physics или TRW (The Real World). Это то, что дизайнеры и производители микросхем используют для создания процессоров и других процессоров, которые могут использовать выходные данные компьютерных языков и превращать их в нечто ценное.
Зависит от того, почему вы спрашиваете. Там нет ничего, что вы не можете сделать в сборке, что вы можете сделать с помощью другого метода. Машинный код - это просто еще одно представление точно таких же данных.
Самые первые компьютеры (ENIAC) использовали жесткую разводку, чтобы выходные данные одного вычисления можно было использовать как входные для другого. Чтобы запустить другую программу, вам пришлось отключить некоторые кабели и подключить их по-другому.
Язык ассемблера - это нижний этаж здания языка программирования, поскольку машинный код не является языком, потому что он не содержит никаких грамматических правил, которым нужно следовать. Машинный код может быть единственным форматом данных для выполнения операций микропроцессора: ЦП извлекает данные из памяти и выполняет инструкцию непосредственно в соответствии с извлеченным машинным кодом.
Однако в некоторых недавних разработках, таких как Intel Pentium 4 и выше, машинный код является выражением операций исполнительного модуля RISC более низкого уровня, известных как мопы или микрооперации. Таким образом, логика декодирования этих конструкций состоит в том, чтобы преобразовывать инструкции типа CISC в небольшие мопы, которые обычно нацелены на более простую единицу загрузки / хранения, RISC-подобную. В этом аспекте мы можем сказать (хотя это не может быть технически точным), что машинный код описывает "высокоуровневые" сложные инструкции архитектуры, а не "реальные" операции, которые атомарно переносятся базовой логикой выполнения ЦП.,
Итак, у нас есть набор архитектурных инструкций или архитектурный машинный код и набор "микро-инструкций" внутреннего уровня, который скрыт от внешнего мира. Кэш трассировки процессоров Intel был задуман для хранения таких операций, чтобы оптимизировать суперскалярную производительность процессора (поскольку процессор выполняет моп, а не набор архитектурных инструкций, доступных для выполнения программами).
Ассемблер переводится ассемблером в машинный код. Вы можете написать это с помощью бинарного редактора. (Ой!) На компьютерах CISC может быть микрокод, который упорядочивает сегменты чипа (ALU, выборка памяти и т. Д.). Как правило, никто не пишет микрокод, кроме как у производителя чипа.
Ну, есть машинный язык, как уже упоминали другие. Машинный язык, как правило, представляет собой перевод 1: 1 того, что вы пишете на ассемблере, поэтому он находится на том же уровне абстракции, что и ассемблерный код - просто намного сложнее писать вручную.
Есть исключения из этого, например, псевдоинструкции, предоставляемые языком ассемблера MIPS.
Существует, или, может быть, я должен сказать, был уровень даже ниже языка ассемблера / машины: микрокод. Я подозреваю, что современные бюджеты на логико-транзисторных процессорах теряют свою актуальность.
Вы можете посылать электрические токи в процессор и сообщать ему, где размещать пиксели. (В значительной степени бинарный, но вы не используете компьютер для его записи.)
Вроде, как бы, что-то вроде. Машины не читают сборку, они читают "машинный язык", в который преобразуется сборка. Машинный язык имеет "коды операций" вместо мнемоники сборки, и эти коды операций обычно являются просто двоичными данными. Машинный код обычно не считается читаемым человеком.
В системах RISC машинный код часто представляет собой простой перевод ассемблера, но в системах x86, в частности, они совершенно разные.
Конечно: "машинный код", о котором Википедия в статье о языке ассемблера ( http://en.wikipedia.org/wiki/Assembly_language) говорит: "реализует символическое представление числовых машинных кодов и других необходимых констант программировать конкретную архитектуру процессора."
Даже ниже машинного кода, можно сказать, VHDL - чип дизайн. Вам даже не нужно разрабатывать микросхему для выполнения кода, а просто мгновенно преобразовывать входные данные в выходные.
(не то чтобы я эксперт - я использую C++)
Ну, вы всегда можете написать код в двоичном (или шестнадцатеричном, или каком-либо другом представлении). Затем вам нужно будет рассчитать смещение прыжка и т.д. в вашей голове. Не рекомендуется.;)