Обнаружение архитектуры во время компиляции из MASM / MASM64 - PullRequest
6 голосов
/ 08 апреля 2010

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

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

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

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

Спасибо!

Ответы [ 3 ]

11 голосов
/ 06 февраля 2012
IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF
5 голосов
/ 08 апреля 2010

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

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

0 голосов
/ 08 апреля 2010

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

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

...