Является ли язык ассемблера "ассемблером" тоже специфичным? Какой ассемблер лучше?



Я изучаю язык ассемблера. Я начал с Paul A. Carter PC Assembly Language, который использует NASM (сетевой ассемблер). Затем в середине я переключился и начал читать Introduction to 80×86 Assembly Language and Computer Architecture, который использует MASM.



В NASM я использовал для записи, для инициализации байта




Db 110101b




В MASM я использую




Байт 110101b




Я как раз читаю. Поскольку это директивы ассемблера, они будут различны для каждого ассемблера. так ведь?
Разве это не так разработчики ассемблеров следуют стандарту для этих директив? Потому что они знают, что мнемоника специфична для ЦП. Так что, его боль в заднице, чтобы узнать и код на ассемблере.



Теперь, если они следуют другим директивам, его больше боли, Если вы меняете ассемблер или если вы переключаете операционную систему (разработчик MASM находится в глубокой беде, если он переходит на linux).



Мое замешательство заключается в том, должен ли я знакомиться с NASM или MASM? Я поклонник windows, но мне, возможно, придется работать (в будущем) на Linux тоже.



Каждая книга должна иметь название "_________ использование языка ассемблера __________ ассемблер "

690   4  

4 ответов:

К сожалению, стандарта для языка ассемблера никогда не существовало. Вам просто нужно изучить директивы, которые поддерживает ваш ассемблер. К счастью, большинство директив, хотя и имеют разные имена, семантически похожи, как db и BYTE.

Но подождите! Становится все хуже, особенно для x86. У вас есть (по крайней мере) две формы кода, которые ассемблеры могут принять: Intel и AT&T формат. Формат AT&T меняет порядок большинства операндов на инструкции (или наоборот ; -).

NASM, вероятно, является лучшим выбором для переносимости, но вы также можете посмотреть на GNU ассемблер..

Синтаксис Intel / AT&T Syntax

С x86 в частности, первые ассемблеры были от Intel, а затем в значительной степени совместимые ассемблеры от Microsoft образовали одну ветвь.

Эти ассемблеры организуют исходные и конечные операнды справа налево и имеют необычный (и на мой взгляд, довольно странный) уровень абстракции, который использует единую мнемонику для 8, 16 и 32-битных операций, а затем выводит фактический машинный код для использования на основе свойств операнда. Модификаторы существуют (on операнды) для форсирования определенного размера. Но Unix был также важен, и у него была совершенно другая ассемблерная линия с другими традициями и соглашениями. Оригинальным поставщиком Unix была компания AT&T, которая владела интеллектуальной собственностью, разработанной в Bell Labs. Серия проектов BSD, а затем Linux продолжили эту традицию. Эти ассемблеры исторически обрабатывают операнды слева направо, имеют запасной дизайн, оптимизированный для скорости, и при использовании людьми они обычно используют cpp для макросов и условных обозначений, даже если ассемблер также имеет параллельные функции.

В наши дни вы, вероятно, используете VS на MS или Gnu на Linux или Mac, но именно поэтому мы все еще говорим AT&T vs Intel. Ассемблер GNU имеет возможность собирать в обоих направлениях, хотя он все еще находится в лагере AT&T.

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

Процессоры описаны в справочном руководстве производителя. Это обычно развивалось в нормативный синтаксис (наряду с ассемблером, предоставляемым поставщиком) для сборочных программ на определенной платформе. Следовательно, многие процессоры от одного поставщика имеют схожий синтаксис.

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

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

Comments

    Ничего не найдено.