ПРОБЛЕМА: Проблема в том, что я не знаю, какой тип сборки сможет работать в файле .exe (или исполняемом файле) на моем компьютере.
ВОПРОС:Какой тип сборки можно запустить из исполняемого файла без компиляторов / ассемблеров, компилирующих код сборки?(С использованием 64-разрядной версии Windows, процессора Intel Core i5-6400T)
Существуют исключения, в которых ощущается, что это происходит.Но никакой язык ассемблера не выполняется напрямую.Язык ассемблера подразумевает удобную для чтения / записи форму машинного кода.Это намного больше, чем это, чтобы сделать его более удобным для использования, но некоторый процент вашего кода составляет синтаксис, который сопоставляется с инструкцией, в идеале от одной до одной строки asm к одной инструкции машинного кода.
Компиляторы, Cи т. д. компиляция на языке ассемблера, затем компилятор вызывает ассемблер, который превращает его в объектный файл, и затем в зависимости от того, как вы использовали компилятор, может / вызовет компоновщик, чтобы превратить его в конечный исполняемый файл, понятный операционной системе.
Операционные системы будут поддерживать очень ограниченное количество двоичных форматов.Бинарные форматы для известных операционных систем, Windows, Linux и т. Д. Тривиальны для Google и найти подробности, занимает несколько секунд, чтобы попасть на страницу с подробностями.Даже если используется один и тот же формат файла, например, elf, операционная система - это отдельная вещь, у нее есть правила относительно того, что должен содержать двоичный файл и как двоичный файл должен работать для этой операционной системы.Возьмите то же самое оборудование, тот же самый физический ПК, запустите DOS, Linux, Windows, OSX, и двоичные форматы, и правила для того, что содержат эти двоичные файлы, в частности, системные вызовы в операционную систему и то, с чем вы их упаковываете,варьироваться.Уже существующие ассемблер и компоновщик знают двоичный формат для этой операционной системы и целевой набор команд.Если вы хотите создать язык, вы начинаете с внешнего интерфейса, а затем выполняете середину, самую сложную часть всего проекта.Как только вы доберетесь до середины, превратив язык высокого уровня в легко усваиваемые атомарные операции, которые затем можно будет перенести в один или несколько наборов инструкций через бэкэнд.Вызовы операционной системы обрабатываются библиотеками, обычно это не обязательно язык, JAVA, Python и некоторые другие исключения.Таким образом, printf в C связывается с библиотекой C, которая имеет целевой и специфичный для операционной системы язык ассемблера, чтобы связать слой с операционной системой, с некоторым процентом (для printf, который ОГРОМНЫЙ) кода, который в идеале на том же языке и скомпилирован затемили обычно когда-то в прошлом в связываемую библиотеку.
Честно говоря, звучит так, как будто вы не готовы сделать компилятор, вам нужно изучить некоторые основы, изучая некоторые простые инструменты, которые достаточно малы, чтобы быть понятными,Найдите материал курса или онлайн / бесплатный класс (или книгу / книги), который охватывает эти основные темы инструментов, ассемблер и компоновщик, а затем компилятор.Посмотрите на такие языки, как паскаль или ада, которые несколько неуместны, их легче анализировать и превращать во что-то, скажем, в C / C ++.Не смотрите на GNU или LLVM или другие большие проекты по образовательным причинам, они не правильный путь.Как только вы попадаете в GNU, вы обнаруживаете, что он едва удерживается вместе с клейкой лентой и проволокой.У LLVM есть хорошая документация, которая не соответствует реальному инструменту, может быть, много лет назад, но не больше.И с течением времени он также накапливает клейкую ленту и спасательную проволоку, и потребуется некоторое время, чтобы догнать GNU в этом отношении, но я ожидаю, что в конечном итоге это станет природой подобных проектов.
Многие, если не все программы по информатике имеют класс компилятора, чтобы учащиеся имели какие-либо шансы на успех в течение семестра, язык для компиляции и использование существующих инструментов для этого.Найдите некоторые из этих классов (Google - ваш друг), и тут и там на github или где-то еще вы найдете случайного ученика, который публикует свой код.Это часто тот случай, когда они думают, что они добились успеха, но, как правило, я просто заставляю их работать.Но в любом случае, в домашних условиях или в другом, можно предположить, что они сдали класс с этим решением, поэтому теоретически оно легко усваивается, поскольку это стоило работы в течение семестра, десятки часов.
короткий ответ:
Вы не можете выполнять язык ассемблера, процессоры исполняют машинный код, а машинный код является специфичным для ПРОЦЕССОРА, а не для операционной системы.
Двоичные файлы, .exe, elf, coff, com, ihex, srec и т. Д. Не являются конкретнымидля операционной системы, но операционная система будет иметь ограниченный набор, возможно, только один, формат файла, который они поддерживают.
Для вашей операционной системы существует ассемблер и компоновщик, которые знают целевой машинный код и знаютформат исполняемого файла.Как и в случае с другими авторами компилятора, если вы хотите изобрести новый язык и создать для него компилятор, то скомпилируйте его на язык ассемблера и дайте этим инструментам сделать все остальное.Это называется набор инструментов, цепочка инструментов (компилятор, ассемблер, компоновщик).Вы работаете с инструментом компилятора в цепочке.