سؤال

كيف يمكنني اكتشاف وقت الترجمة من ملف مصدر ASM إذا كانت البنية المستهدفة هي I386 أو AMD64؟

أنا أستخدم Masm (ml.exe)/masm64 (ml64.exe) لتجميع file32.asm و file64.asm. سيكون من الجيد إنشاء ملف واحد ، ملف. من الناحية المثالية ، أود أن أكون قادرًا على كتابة شيء مثل:

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

أيضًا ، إذا لزم الأمر ، يمكنني تشغيل ml.exe و ml64.exe مع خيارات سطر الأوامر المختلفة.

شكرًا!

هل كانت مفيدة؟

المحلول

إذا فهمت لك بشكل صحيح ، فأنت تبحث عن نوع من التعريف المدمج الذي له قيمة مختلفة بين إصدارات MASM 32 و 64 بت. بحثت ذات مرة عن شيء من هذا القبيل ، لكنني لم أجد أي شيء مناسب.

ومع ذلك ، من السهل بما يكفي لتحديد خاصتك ، على سبيل المثال AMD64 equ 1 في بداية الملف المصدر الخاص بك لتحديد مسار الرمز المطلوب ، أو في سطر الأوامر ML/ML64 ، مثل /DAMD64. ثم استخدم IFDEF/IFNDEF, ، كما تقترح.

نصائح أخرى

IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF

تختلف مجموعات تعليمات X86 و X64 (ولا حتى ذكر استخدام المكدس وقيودها) بشكل مختلف جدًا لدرجة أنني أتساءل عما إذا كان ذلك سيكون منطقيًا ، على أي حال ... IOW ، يبدو أن كود X86 / X64 مستقلة عن الهندسة المعتمدة. هذا هو التجميع ، وليس بعض hll المحمولة.

هذا أيضًا على الأرجح السبب وراء وجود مجموعة محددة ، ml.exe و ml64.exe ، بدلاً من ml.exe واحدة من شأنها أن تتعامل مع كل شيء بمساعدة بعض التوجيهات الإضافية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top