Установка ассемблера GNU в OSX

Как бы я ни гуглил, я не могу найти (относительно) простую инструкцию по установке GNU Assembler на Mac.

Я знаю, что могу использовать gcc -c (Apple Clang на Mac) для сборки файлов .s/.S, но я хочу использовать настоящий GNU Binutils as.


person Acharya    schedule 11.11.2009    source источник
comment
Какой ассемблер? XCode уже поставляется с ассемблерами для Intel и ARM (если у вас есть iPhone SDK).   -  person Carl Norum    schedule 11.11.2009
comment
Я хочу установить «газ»: я только начинаю, поэтому, пожалуйста, извините меня, если я не отвечаю на ваш вопрос правильно.   -  person Acharya    schedule 11.11.2009
comment
У вас установлены инструменты разработчика? Быстрая проверка моей системы показывает ассемблеры для arm, i386, ppc, ppc64 и x86_64. Вам нужен специальный сборщик? Что ты пытаешься сделать?   -  person Carl Norum    schedule 11.11.2009
comment
Да. Я понимаю, что Xcode использует ассемблеры и поэтому поставляется с одним для Intel. Теперь мне нужно найти способ построить свой код с помощью Xcode.   -  person Acharya    schedule 11.11.2009
comment
Я беру класс по компьютерной организации. Изучаем сборку ИА-32.   -  person Acharya    schedule 11.11.2009
comment
В XCode все, что вам нужно сделать, это добавить файл сборки в ваш проект. Будут происходить правильные вещи. Другой вариант — запустить ассемблер из командной строки: as myfile.s должен сделать это за вас. Так должно gcc myFile.s.   -  person Carl Norum    schedule 11.11.2009
comment
Разве это не относится к Superuser или что-то в этом роде?   -  person fresskoma    schedule 11.11.2009
comment
Понятно. Спасибо. Я был немного потерян.   -  person Acharya    schedule 11.11.2009
comment
@CarlNorum Разве не очевидно, что ассемблер GNU использует синтаксис AT&T, и это (я надеюсь) то, что он хочет?   -  person imacake    schedule 24.11.2011


Ответы (4)


yasm работает на Mac OSX (я получил его от Homebrew) и имеет синтаксический анализатор GNU as, который можно включено с помощью -p gas (может потребоваться также добавить -r gas). Он не на 100% завершен, но охватывает почти все. Он может выводить в различные форматы объектов (если необходима кросс-компиляция), и, на мой взгляд, это довольно круто. Вы также можете использовать синтаксис NASM (который полностью поддерживается), используя -p nasm (опять же, может понадобиться -r nasm).

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

person Arav K.    schedule 16.07.2019
comment
Кажется, я читал упоминание о сборке macports gobjdump. Есть ли аналогичная сборка gas? У меня нет Mac, поэтому я могу проверить его. (Но да, +1 для YASM, хорошая идея. К сожалению, он не обновлялся; он не поддерживает инструкции AVX512. Но если вам это не нужно, это хорошо, и имеет лучшую поддержку long-NOP, чем NASM) - person Peter Cordes; 16.07.2019
comment
К сожалению, я не могу найти сборку gas с MacPorts. У меня нет AVX-512 на моем Macbook, и поэтому я не понимал, что YASM неполноценен в этом отношении. Какой ассемблер ты используешь, @PeterCordes? У NASM не так много документации или поддержки директив, как хотелось бы, а YASM вообще не выглядит обновленным (см. их GitHub github.com/yasm/yasm). Я слышал о FASM, MASM, TASM и т. д., но не пробовал. - person Arav K.; 16.07.2019
comment
У меня нет Мака. Я обычно использую YASM или NASM для рукописных экспериментов на ассемблере. (В GNU/Linux.) Иногда я использую синтаксис GAS/AT&T для встроенного ассемблера, но почти всегда я просто читаю ассемблер при реальном программировании и настраиваю свой исходный код C, чтобы получить эффективный ассемблер. Если бы я был на Mac, я бы, вероятно, просто использовал GAS, возможно, с режимом синтаксиса Intel, потому что в NASM были ошибки с перемещениями для режимов относительной и абсолютной адресации в его поддержке выходного формата MachO64. Но с работающей версией NASM я бы, наверное, воспользовался ею. - person Peter Cordes; 16.07.2019

Ассемблер GNU нельзя (пока) использовать для создания собственных объектных файлов (формата Mach-O). Но вы, конечно, можете использовать его для кросс-ассемблирования для какого-то неродного формата объекта, если это то, что вы хотите.

person Fabel    schedule 23.10.2011

Ассемблер gnu уже установлен на вашем Mac (при условии, что вы установили пакет инструментов разработчика). Если вы хотите избежать XCode, вы можете вызвать его из командной строки с помощью as или с помощью препроцессора с помощью gcc yourfile.s $(OPTIONS).


Редактировать: as теперь указывает на ассемблер clang; на момент написания этого ответа он указывал на (сборку Apple) ассемблер GNU.

person Stephen Canon    schedule 11.11.2009
comment
Это правда. За исключением того, что включенный не является ассемблером GNU. - person Fabel; 23.10.2011
comment
Этот gcc является псевдонимом clang. gcc --version дает настроено с помощью: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM версии 8.1.0 (clang-802.0.38) Цель: x86_64-apple-darwin16.5.0 Модель потока: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin - person Olsonist; 04.05.2017
comment
@Olsonist Это был ассемблер gnu на момент написания этого ответа. - person Stephen Canon; 08.12.2017
comment
gcc обычно запускает asm через препроцессор C только для .S имен файлов, а не .s. IDK об Apple clang (это то, что gcc работает в MacOS в наши дни!). - person Peter Cordes; 16.07.2019

Возможно, as вместо gas ? Если вы хотите использовать газ в качестве команды, выполните это: echo "alias gas=as" >> $HOME/.profile

Он был установлен на моем Mac Lion, когда я открыл терминал и набрал его. Возможно, это произошло из-за MacPorts и/или XCode, как упоминалось в комментариях к предыдущему ответу.

person imacake    schedule 24.11.2011
comment
как и ассемблер llvm, поскольку --version дает Apple LLVM версии 8.1.0 (clang-802.0.38) Цель: x86_64-apple-darwin16.5.0 Модель потока: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains /XcodeDefault.xctoolchain/usr/bin - person Olsonist; 04.05.2017