Как я могу обнаружить во время компиляции от исходного файла 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 с различными параметрами командной строки.
Спасибо!
Если я правильно вас понял, вы ищете какое-то встроенное определение, которое имеет другое значение в 32- и 64-битных версиях MASM. Я когда-то искал что-то подобное, но ничего подходящего не нашел.
Однако достаточно просто определить свое собственное, например AMD64 equ 1
в начале исходного файла для выбора желаемого пути кода или в командной строке ML / ML64, например / DAMD64
. Затем используйте IFDEF
/ IFNDEF
, как вы предлагаете.
Наборы инструкций x86 и x64 (не говоря уже об использовании стека и ограничениях) настолько разные, что я сомневаюсь, имеет ли это смысл... То есть, написание эффективного архитектурно-независимого кода x86 / x64 выглядит для меня почти невозможным. Это ассемблер, а не какая-то переносимая HLL.
Это также, скорее всего, причина, почему существует два конкретных ассемблера, ml.exe и ml64.exe, а не один ml.exe, который мог бы обрабатывать все это с помощью некоторых дополнительных директив.