Компилятор Digital Mars D; получение выхода ASM

Я читаю книгу Андрея Александреску о языке программирования D. Он отличный писатель и довольно хорошо объясняет аспекты языка D. Однако я нахожу некоторые конструкции трудными для понимания, когда я не могу представить вывод ASM или последствия определенных ключевых слов (таких как in, out и т. Д. Или другие конструкции). Несмотря на то, что мой ASM довольно плохой, и я никогда не использую его, мне очень помогает понять, как определенные ключевые слова работают на компьютере и выполняемая работа.

У DMD-компилятора есть много интересных функций (покрытие кода, генерация интерфейсов (файлы заголовков), генерация документации, профилирование, ...), но я не видел перехода к выводу кода ASM. Компилятор генерирует файлы.obj, и, прочитав следующую ссылку: http://www.digitalmars.com/ctg/obj2asm.html Я подозреваю, что мне нужен инструмент для преобразования объектных файлов вручную. Я бы предпочел переключатель компилятора, есть ли один?

Внизу этой страницы я получаю ссылку на страницу, где я могу заплатить за упоминание продуктов, содержащих этот инструмент. Исходя из истории GNU, я нахмурился по этому поводу. Это только для C/C++, или это также относится к компилятору D?

Есть ли другой способ преобразовать эти файлы.obj в читаемый код ASM, или я должен прибегнуть к другим компиляторам D (таким как GDC или LDC) для получения вывода ASM? Я предпочитаю не DMD создан самим основателем, я уверен, что он реализовал большинство функций правильно / в значительной степени оптимизировано.

Итак, как я могу взглянуть на код ASM?

Спасибо.

3 ответа

Решение

Вы можете попробовать objconv. Это то, что я использую. Причина, по которой DMD не выводит ассемблер через коммутатор, заключается в том, что он никогда не генерирует ASM как отдельный шаг. Он генерирует двоичные коды операций непосредственно из своего внутреннего представления. Это одна из причин, почему он компилируется так быстро.

Или вы можете использовать инструмент DMD obj2asm, который поставляется в комплекте с DMD.

obj2asm somefile.o > somefile.s

obj2asm Утилита предоставляется пакетом компиляторов DMD, который доступен бесплатно (под двойной лицензией GPL и Artistic). См. DMD Compiler для Linux на веб-сайте D Programming Language.

Бэкэнд компилятора Digital Mars имеет коммерческую лицензию, а не с открытым исходным кодом, возможно, объясняя, почему инструменты, относящиеся к выходным данным бэкэнда, также являются собственностью.

В образовательных целях вы можете попробовать http://dgcc.sourceforge.net/ который является D-интерфейсом в бэкэнде GCC, то есть полностью открытым исходным кодом.

Другие вопросы по тегам