Сборка для 64-битной платформы - PullRequest
0 голосов
/ 21 февраля 2012

Я начинающий программист, и я хочу начать с языка ассемблера, но все, что я нахожу для изучения, это семейство сборок для процессоров X86 ... знакомо ли оно новым современным процессорам?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Это довольно субъективно.В архитектуре x86 нет ничего плохого.Он был чрезвычайно успешным, и у вас не будет проблем с поиском ассемблеров, отладчиков, эмуляторов и книг для него.Вы должны быть осторожны, выбирая конкретную версию, ядро ​​x86 может выполнять 16-битный, 32-битный и 64-битный код.Свидетельство его долголетия.Вы пишете очень разные ассемблерные коды для каждого.Легко застрять в 16-битном режиме, популярном в этом году в Индии, но в остальном совершенно не имеет значения, поскольку 16-битные операционные системы - музейный артефакт.

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

Единственный практический урок здесь заключается в том, что - это немного трата вашего времени.Никто на самом деле больше не пишет машинный код.Написание быстрого кода для современного ядра невероятно сложно, потому что ядро ​​фактически не выполняет код сборки напрямую.Он имеет встроенный аппаратный компилятор, который преобразует машинный код в микрооперационные инструкции для встроенного в чип встроенного механизма исполнения.Имеет на способ * на 1008 * больше регистров, чем поддерживает x86, имеет несколько функциональных блоков, которые позволяют выполнять инструкции параллельно, и имеет кэш-память для уменьшения задержек доступа к памяти.

Требуется машина для генерации кодаэто оптимизирует тайные правила аппаратного обеспечения.И программное обеспечение, встроенное в этап генерации кода компилятора C.

2 голосов
/ 21 февраля 2012

На мой взгляд, лучше начать с 32-битной сборки x86, в основном потому, что ресурсы намного лучше.вы все равно будете изучать те же самые основы для x64, так что вы не потеряете (проще говоря, x86-64 - это просто расширение набора команд и архитектуры x86).

Любой процессор x86-64также сможет запускать 32-битную сборку (по крайней мере, на уровне операционной системы, используя такие вещи, как WOW64), поэтому вам не нужно менять свою среду.

Переход на x86-64 просто еще разосновные вещи, о которых нужно знать:

  • Больше регистров
  • Основные изменения в соглашениях о вызовах (и ABI, см. System V и ABI AMD64 для x64)
  • Изменениякак выполняются системные вызовы
  • Больше адресного пространства
  • RIP-адресация
  • Потеря регистров сегмента, кроме GS & FS
  • REX.Префикс W для принудительной 64-битной адресации

Есть несколько других изменений, но их можно найти в руководствах по архитектуре систем Intel или AMD, которые являются отличным ресурсом для 32- и 64-битной разработки.

При работе с «современными процессорами» большинство процессоров для настольных ПК и ноутбуков основаны на x86, и все они совместимы с 64-битной и 32-битной системами, вам не нужно беспокоиться о том, будет ли сборка, которую вы изучаете, работать на современных процессорах, потому чтобудет.Единственное время, когда эти проблемы могут быть подняты, - это если вы работаете с расширениями, такими как SSE и AXV, которые могут включать в себя специфические инструкции производителя, или вам нужно работать с процессорами семейства не-x86 (такими как ARM или SPARC).

0 голосов
/ 21 февраля 2012

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

У меня есть несколько симуляторов набора команд http://github.com/dwelch67.

thumbulator, thumb - это подмножество набора инструкций ARM, которое в настоящее время является наиболее переносимым набором инструкций для охраны (работаетпочти на всех ядрах ARM).Ортогональный, простой и т. Д. Неплохой первый набор команд.

msp430sim Я думаю, я назвал это симулятор msp430, хороший и простой набор инструкций, очень чистый, очень простой.хороший первый набор инструкций.

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

У меня есть свой собственный набор инструкций lsasim, созданный для изучения ассемблера.и есть учебник, который вы можете попробовать.

Если вы действительно чувствуете, что сначала должны изучить x86, я настоятельно рекомендую вернуться к истокам intel и начать с 8088/8086.Я раздвоил эмулятор pcemu и разорвал вызовы bios, так что это всего лишь симулятор набора команд, причина для правильного изучения asm, чтобы выучить инструкции, если вы хотите изучать вызовы bios, сначала вы должны изучить язык ассемблера, biosзвонит позже.

совсем недавно я добавил форк процессора янтарного arm2 из opencores.Я сделал так, чтобы он работал в Verilator, и все, что для вас значит, это то, что вы можете запускать его без какого-либо оборудования или дорогих симуляторов, он работает со всеми бесплатными инструментами.Arm2 является предшественником семейства процессоров ARM, широко используемых сегодня.изучение набора инструкций arm2, если вы выберете этот путь, создаст прочную основу для текущего семейства arm, в дополнение к тому, что он не является плохим набором инструкций, намного лучше, чем x86, но имеет много инструкций и множество способов использовать каждую инструкцию, поэтомупоначалу будьте громоздкими.

Amber / arm и thumbulator работают с кросс-компиляторами gcc, которые легко найти, например с CodeSource Lite.msp430 и avr вы можете найти производные gcc или создать свои собственные, если будете следовать их инструкциям.

Если у вас совсем нет навыков программирования, я рекомендую вам начать с изучения питона с трудного пути.это не сложно.самая сложная часть - просто делать то, что он велит вам, не борись с этим, просто набери его и запусти, а затем выясни, что он сделал.Как только вы овладеете базовыми навыками программирования, потратьте примерно полчаса на мое руководство по lsasim, а затем ознакомьтесь с некоторыми основами.Затем перейдите к одному из msp430 или большому пальцу, а затем включите x86.Если вы сначала попробуете несколько нормальных наборов инструкций, x86 будет несколько тривиальным, если вы сначала попробуете x86, это будет болезненно, и вам придется заново изучить некоторые основы, чтобы перейти к другим наборам инструкций.То, что у вас есть аппаратное обеспечение x86, не означает, что вы должны пытаться использовать его для обучения.Это также трудный способ начать.используя симулятор, вы можете, если хотите, посмотреть, что происходитEsp с янтарным ядром arm2.Если вы знаете ассемблер, хотя каждый язык программирования, ассемблер или другой - это просто вопрос синтаксиса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...