Обнаружение архитектуры во время компиляции от MASM/MASM64

Как я могу обнаружить во время компиляции от исходного файла ASM, если целевая архитектура является I386 или AMD64?

Я использую masm (ml.exe)/masm64 (ml64.exe) для сборки file32.asm и file64.asm. Было бы хорошо создать единственный файл, file.asm, который должен включать или file32.asm или file64.asm, в зависимости от архитектуры. Идеально, я хотел бы смочь записать что-то как:

IFDEF amd64
include file64.asm
ELSE
include file32.asm
ENDIF

Кроме того, в случае необходимости я могу выполнить ml.exe и ml64.exe с различными параметрами командной строки.

Спасибо!

6
задан botismarius 8 April 2010 в 15:04
поделиться

2 ответа

Если я правильно вас понял, вы ищете какое-то встроенное определение, которое имеет другое значение в 32- и 64-битных версиях MASM. Я когда-то искал что-то подобное, но ничего подходящего не нашел.

Однако достаточно просто определить свое собственное, например AMD64 equ 1 в начале исходного файла для выбора желаемого пути кода или в командной строке ML / ML64, например / DAMD64 . Затем используйте IFDEF / IFNDEF , как вы предлагаете.

5
ответ дан 8 December 2019 в 13:45
поделиться

Наборы инструкций x86 и x64 (не говоря уже об использовании стека и ограничениях) настолько разные, что я сомневаюсь, имеет ли это смысл... То есть, написание эффективного архитектурно-независимого кода x86 / x64 выглядит для меня почти невозможным. Это ассемблер, а не какая-то переносимая HLL.

Это также, скорее всего, причина, почему существует два конкретных ассемблера, ml.exe и ml64.exe, а не один ml.exe, который мог бы обрабатывать все это с помощью некоторых дополнительных директив.

0
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

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