Вопрос по assembly, x86 – MIPS против Intel x86 против LLVM как первый язык ассемблера для изучения?

5

Какой язык ассемблера я должен выучить как свой первый язык ассемблера?MIPS (проще и часто используется в образовательных целях), Intel x86 (вездесущий) или переносимый язык ассемблераПроект LLVM?

Одним из преимуществ сборки LLVM является то, что я могу попытаться использовать ее в качестве учебного упражнения для написания простого компилятора, использующего LLVM в качестве бэкэнда в будущем.

Тот, который тебе больше всего пригодится в будущем? Мы бы не знали, извините. Bo Persson
У меня остались приятные воспоминания о PDP-11, который преподавали в моем университете, когда я изучал первый курс по низкоуровневому компьютерному программированию в 1999 год Eli Bendersky

Ваш Ответ

3   ответа
3

8085 микропроцессорная сборка, а затем перешел к 8051 микроконтроллер.

Затем я подошел к 80386 а также 80486 микропроцессоры.

Для обучения, я думаю, имеет смысл начать с самого простого и самого базового чипа.

Как уже говорилось, для обучения имеет смысл начать с самых простых и элементарных фишек. Я изучил Motorola 68000 (Amiga) и Intel 8051 как мои первые два, Motorola была намного чище и перспективна. Но самая чистая и лучшая используемая архитектура процессора - это, вероятно, MIPS. MIPS также очень тесно связан / похож на многие другие архитектуры RISC. ARM и x86 тоже хороши в изучении, но x86 загадочна, неприятна и не очень хорошая архитектура для начала. Erik Alapää
Во-вторых, для изучения самое простое - самое лучшее. i8051 был бы немного слишком прост: ограниченный набор регистров общего назначения (большинство вещей нужно сделать с помощью аккумулятора), чрезвычайно примитивные 8-битные инструкции (скоро потребуется реализация подпрограмм для +, -, * и /), очень мало внутренней оперативной памяти (128 байт в самых основных чипах), неудобный доступ ко всей другой памяти. i8080 / 8085 / Z80 будет лучше. OTOH, ограничиться i8086 / 80186 (или i80286 за исключением всех защищенных режимов), вероятно, не слишком плохой выбор, и было бы легко расширить его. Alexey Frunze
9

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

LLVM на самом деле не сборка, это байт-код. У меня есть один, который я создал только для этого, Lsasim, найдите его на GitHub. Даже если вы на самом деле не запускаете примеры, дайте ему полчаса или меньше. Это должно дать основу для многих других наборов инструкций.Большой пале (без Thumb-2 расширений) это хорошо. MSP430 действительно хорошо, LatticeMico8 очень хорошо. AVR не плохо.РУК очень хорошо. Успокойтесь с парой три, а затем MIPS или DLX. x86 должен быть одним из последних, если вы вообще беспокоитесь. Если вам сложно, сначала изучите 8088/86, а затем продвигайтесь к настоящему.

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

Вы можете использовать что угодно в качестве бэкэнда для внешнего интерфейса (на самом деле в середине). Ваш внешний интерфейс компилятора должен преобразовывать во внутренний код, который не является языком ассемблера, а затем из внутреннего кода в бэкэнд, который является целевым (язык ассемблера или машинный код). Середина LLVM опубликована, и на самом деле ее можно использовать таким образом, другие средние / внутренние коды компилятора в лучшем случае сбрасываются для отладки, но в действительности не используются как есть. Я бы не использовал обучение ассемблеру для середины компилятора. Если вы хотите написать бэкэнд, начните с LLVM или чего-то другого, существующего ретаргетируемого компилятора, и напишите в него бэкэнд (символ Vbcc compiler - хороший выбор для первого бэкэнда компилятора, или для получения книги LCC, или для очень простого: Малый C). Если вы хотите написать внешний интерфейс для какого-либо нового или существующего языка, то LLVM, вероятно, не плохой внутренний код для использования, бэкэнды приходят как халява.

0

8085 - идеальный процессор для начала.. Когда вы закончите 8085, вам будет интересно изучить что-то вроде набора инструкций AVR (в основном потому, что 8085 основан на архитектуре фон-Неймана, а AVR - на гарвардской. Разнообразие).

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

Полный набор инструкций x86 слишком сложен, чтобы кого-то интересовать. Я уверен, что вам будет скучно смотреть на все инструкции в наборе.

Резюме: перейти на 8085

Вы шутите? 8085? Это 2015, а не 1975. Чтобы узнать, как должен работать процессор, нужно начать с простого, чистого RISC, такого как MIPS. Или, может быть, ARM, но это уже менее чисто, чем MIPS. Erik Alapää

Похожие вопросы