трудно добавить к Майкл Slades ответ, но у меня есть несколько замечаний.
Каждый производитель процессора или создатель машинного кода процессора делает это, используя мнемонику, язык ассемблера для этого процессора. Обычно это сборка, определенная в исходной документации процессора, будь то на салфетке за обедом или очень формальный и красивый документ - это «оригинальный» язык ассемблера для этого процессора. Ассемблер (свободные термины здесь, поскольку их можно понять по-разному, здесь используется как программа, которая анализирует язык ассемблера и в идеале делает машинный код) записывается для чтения этого языка ассемблера с дополнительными элементами, необходимыми для правильного кодирования кода, а также некоторые директивы и т. д., чтобы упростить работу программистов (макросы, equates (определяет) и т. д.).
В идеале, если вы создаете новый процессор и хотите получить какое-либо признание, вам сначала нужно ассемблер, а затем другие другие языки (FORTRAN, BASIC, Pascal, C, в настоящее время) (C всегда но, очевидно, сегодня вам не нужен Pascal или базовый и т. д.). Если поставщик процессоров хочет продавать чипы, он должен сделать или договориться или каким-то образом способствовать ассемблеру как минимум. Что касается 8088/8086, то у Intel были свои собственные инструменты, но в то время они были дорогими, а другие инструменты были более популярными (microsoft masm, msvc, borland tasm, pascal, tcc, bcc). Был хороший бесплатный ассемблер, называемый a86, если я правильно помню. Теперь у нас есть nasm как пример хорошего бесплатного ассемблера для x86.
Intel x86 является скорее исключением, чем правило, существует религиозная дискуссия между синтаксисом intel, который ближе к оригиналу и синтаксису AT & T. gnu binutils имеет тенденцию не уважать производителей процессоров (я бы назвал использование слова неуважением лично), внося изменения, x86 является самым худшим, поскольку AT & T является стандартным, но также поддерживает Intel (некоторые, возможно, все) их инструменты (другие языки). Ассемблеры в течение длительного времени, например, использовали точку с запятой ';' чтобы отметить конец строки и что-нибудь после комментария, для ARM, безусловно, binutils считает, что новая строка, новая инструкция и использует @ в качестве маркера комментария. Понял, что это лица, которые составляют бэкэнды, иногда эти люди сами являются поставщиками чипов. Я понимаю, что это не одна организованная группа, которая делает это, один человек или группа выполняет начальную работу, остальные, если они ее принимают, возьмите рабочий материал и опираясь на него.
Как и символ комментария, с течением времени сборщики для разных процессоров использовали аналогичные или одни и те же директивы, дополнительные токены, которые не являются машинным кодом, но, например, ORG или .ORG указывают адрес. Так как вам нужно время от времени иметь физический адрес, где код машины живет для кодирования инструкции, пользователь должен каким-то образом указать этот адрес и обратно в тот же день, когда вы писали одну программу asm, возможно, в одном файле или один файл с включенными и выход ассемблера был полным двоичным кодом, а не неполным объектом, вам нужен этот адрес. Вот почему вы не видите инструкции ORG в ассемблере gnu (газ), ассемблер gnu создает объекты, оставляющие неполные адреса конкретными инструкциями. как из-за необходимости адреса, так и из-за необходимости связывать его с неизвестными ярлыками. Компонент частично является ассемблером, так как он выполняет последние шаги по кодированию этих оставшихся инструкций, но этого не делает, беря исходный код ассемблера ascii, но использует данные в формате объектного файла.
x86 - это абсолютно последний ассемблерный язык, который я бы порекомендовал вам.Это интересный исторический урок. процессоры так сильно изменились, что на каждом шаге они стали очень быстро микрокодированными (большинство процессоров НЕ микрокодировано, x86 из-за его уродливой сборки/машинного языка почти требовало от него конкуренции). У меня есть язык ассемблера, который я создал, чтобы помочь изучать язык ассемблера, он заимствует различные наборы инструкций. У меня есть серия уроков, которые, возможно, занимают всего полчаса, чтобы пройти, если не меньше, все бесплатное, с открытым исходным кодом, очень простой код (симулятор набора инструкций, сборщик, дизассемблер и т. Д.). http://github.com/dwelch67/lsasim Обратите внимание, что моя слабая попытка использовать компилятор C компилятора не стоит возиться с ним, хотя я все же считаю, что vbcc является очень хорошим компилятором C, с помощью которого вы научитесь писать бэкэнд для gcc и llvm - кошмары, gcc, потому что, как только вы увидите внутренне вы не сможете стереть это изображение из своего ума, потому что документация ужасно устарела и вводит в заблуждение, и вам нужно идти строго из источников, несмотря на то, что, думая, когда вы начнете проект, это будет так же просто, как показывает веб-страница.
В github У меня также есть несколько других симуляторов набора инструкций, все, что лучше, лучше, чем x86 для обучения. msp430, avriss (simavr, вероятно, лучше), даже Lattice Semiconductors mico8. thumbulator является основным, набор инструкций большого пальца руки (сокращенный набор инструкций), что вы найдете gnu, clang и другие компиляторы и ассемблеры, которые будут строить рабочий код. (первоначально написанный для сравнения gcc и clang). Затем некоторые базирующиеся на ядре amber_samples - это arm2, в то время как предшественник в руке, который, как мы знаем, доминирует сегодня в мире процессоров, у него есть некоторые странные вещи, которые не находятся в armv4 до настоящего времени. Все еще можно использовать инструменты полки для генерации кода, который запускается, и это логический симулятор, чтобы вы могли видеть внутри чипа (все бесплатные инструменты). Я портировал процессор mips, а также в форме логического симулятора, я не рекомендую mips в качестве первого набора команд, сначала возьмите несколько под вашим поясом и игнорируйте такие вещи, как слово unsigned, связанное с добавлением команды, очень вводящее в заблуждение и запутывающее, если вы не испытываете. наконец, я разветвил pcemu для образования x86. Я рекомендую получить старое оригинальное справочное руководство по программированию 8088/8086 от Intel, хорошие копии можно использовать с amazon.com за несколько долларов. Я также удалил вызовы bios и dos из этого pcemu, поскольку это не изучает набор команд, который изучает операционную систему/среду. Изучите один, а затем другой. реальные среды pcemu могут быть альтернативными или dosbox и т. д., если вы хотите делать эти вещи. Оттуда вы можете почувствовать базовую линию x86, а затем добавить уровни сложности, которые следуют, когда появятся 80286 и 386 и т. Д.
Наличие x86 не является веской причиной для изучения x86. Вы хотите изучить набор инструкций, где у вас есть инструменты, которые могут входить в процессор. Конечно, с помощью отладчика вы можете сделать один шаг, но с симулятором, который вы можете манипулировать, чтобы выводить что-либо, смотреть что угодно любым способом, или даже лучше логический симулятор, где вы можете видеть все сразу, собирается сделать опыт изучение языка обучения гораздо менее болезненным. Меньше боли означает, что вы должны наслаждаться им больше и придерживаться его, а не сдаваться. Хотя базовые навыки программирования требуются, как и на любом языке, сборка позволяет вам быстро и легко попасть в проблему. Также вы не хотите разбивать компьютер или что-то в этом роде. (здесь снова, если вы доберетесь до того, где чувствуете, что вам нужно сделать системные вызовы из asm, используйте что-то вроде pcemu, dosbox, позже virtualbox, vmware, qemu для запуска виртуальной машины, которая при сбое причиняет вам меньше боли.
Nasm вероятно, лучший выбор, похожий на первый язык ассемблера x86. Для использования реальных/оригинальных инструментов будет использоваться dosbox или какой-либо другой эмулятор dos. –
Оригинальный язык ассемблера принадлежит поставщику чипов http://www.amazon.com/Manual -Programmers-Hardware-Reference-240487-001/dp/1555120814/ref = sr_1_1? Ie = UTF8 & qid = 1336368311 & sr = 8-1 вы должны уметь видеть, что он неполный, пробелы, заполненные различными ассемблерами, однако они хотели –