Компилятор Digital Mars D;получение выхода ASM - PullRequest
7 голосов
/ 29 августа 2010

Я читаю книгу Андрея Александреску о языке программирования 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 ]

9 голосов
/ 29 августа 2010

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

7 голосов
/ 29 августа 2010

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

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

obj2asm somefile.o > somefile.s
0 голосов
/ 29 августа 2010

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

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

...