اكتشاف الهندسة المعمارية في وقت الترجمة من Masm/Masm64
-
25-09-2019 - |
سؤال
كيف يمكنني اكتشاف وقت الترجمة من ملف مصدر 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 واحدة من شأنها أن تتعامل مع كل شيء بمساعدة بعض التوجيهات الإضافية.