Основные вопросы о сборке и Mac - PullRequest
1 голос
/ 11 августа 2009

Хорошо. Я хочу научиться собирать программы на моем Mac (MBP начала 2009 года, Intel Core 2 Duo). Пока я понимаю только то, что языки ассемблера состоят из прямой мнемоники для инструкций процессора. После некоторого поиска в Google я увидел много терминов, в основном «x86» и «x86_64». Я также видел MASM, NASM и GAS, среди прочих.

Поправь меня, если я ошибаюсь:

  1. x86 и x86_64 являются наборами команд. Если я что-то напишу с использованием этих наборов инструкций (в виде необработанного машинного кода), я в порядке, пока моя программа остается на том процессоре, для которого она предназначена.
  2. NASM, MASM и GAS - это разные ассемблеры.
  3. Существуют разные языки ассемблера. Например, есть синтаксис AT & T и Intel. Поддержка этих синтаксисов различается в разных ассемблерах.

Теперь вопросы:

  1. Как пользователь Mac, о каких наборах инструкций мне следует беспокоиться?
  2. Xcode использует GCC. Означает ли это, что он также использует газ?
  3. Если он использует GAS, то должен ли я изучать синтаксис AT & T?
  4. Есть ли книга, которую я могу получить об этом. Не учебник, не справочное руководство в Интернете. Эти вещи предполагают многое во мне; например, насколько я знаю, регистр - это всего лишь немного памяти на процессоре. Вот как мало я на самом деле знаю.

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 11 августа 2009

Если вы хотите выучить ассемблер, начните с набора команд x86. Это базовый набор.

Хорошая книга на эту тему - «Язык ассемблера» Рэндалла Хайда, который также доступен на его веб-сайте. Он использует высокоуровневый ассемблер, чтобы все было легко понять и начать, но в глубине души он использует ГАЗ.

Я не верю, что XCode поставляется с любым ассемблером, но вы можете, например, найти GAS в пакете MacPort binutils.

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

2 голосов
/ 11 августа 2009

«Я в порядке, пока моя программа остается на процессоре, для которого она была разработана». На самом деле, нет. Во многих случаях ассемблерные программы также делают предположения об операционной системе, в которой они работают (например, когда они вызывают библиотечные функции или выполняют системные вызовы). В противном случае ваши предположения верны.

На вопросы:

  1. Современные Mac поддерживают как x86, так и x86-64 (иначе AMD64 или EM64T или Intel64). Как 32-битные, так и 64-битные двоичные файлы могут быть запущены на последних системах; Apple сама поставляет свои библиотеки в «толстом» (он же «универсальном») режиме, то есть машинном коде для нескольких архитектур.
  2. Используйте "as -v", чтобы узнать, какой у вас точный ассемблер; мои сообщения называются «Apple Inc версия cctools-698.1 ~ 1, GNU ассемблер версия 1.38». Так что да, это ГАЗ.
  3. Да.
  4. https://stackoverflow.com/questions/4845/good-x86-assembly-book
0 голосов
/ 11 августа 2009

Я отвечу на первый вопрос: Mac теперь используют чипы Intel, а современные процессоры 64-битные.

...