Компилятор 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?

Спасибо.

7
задан Taco de Wolff 28 August 2010 в 21:42
поделиться

3 ответа

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

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

obj2asm somefile.o > somefile.s
7
ответ дан 6 December 2019 в 12:45
поделиться

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

10
ответ дан 6 December 2019 в 12:45
поделиться

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

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

-1
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: