PDA

View Full Version : کد اسمبلی در X64



zoncpp
شنبه 05 آبان 1386, 10:17 صبح
در VC ، قسمتی از کد من نیاز به دستورات اسمبلی داره، اما برای کامپایل برنامه در X64 مشکل دارم. کامپایلر کلید واژه asm__ رو خطا می گیره و تمام دستورات اسمبلی رو نمیشناسه.
برنامه من هم در ویندوز 32بیتی باید اجرا بشه (که مشکلی نداره و اجرا می شه:لبخندساده:) و هم در ویندوز 64بیتی . چه راه حلی وجود داره؟:ناراحت:

Delphi Skyline
شنبه 05 آبان 1386, 18:30 عصر
باید پلت فرمت x86 باشه نه x64 . در ویندوز 64 بیتی برنامه های 32 بیتی اجرا میشن .

zoncpp
دوشنبه 07 آبان 1386, 10:30 صبح
من یک توضیحی بدم: برنامه من یک درایور، که کدهای سطح کرنر داره. این درایور برای ویندوز 64بیتی باید کامپایل بشه. بنابراین نمی تونم از پلت فرمت x86 استفاده کنم. ؟؟؟؟؟؟

Inprise
دوشنبه 07 آبان 1386, 19:07 عصر
برنامه ات رو دقیقا چطور Build میکنی ؟ ( از اسکریپت OSR استفاده میکنی ؟ )
و خطائی که میده چیه ؟

zoncpp
سه شنبه 08 آبان 1386, 08:56 صبح
من DDK 2003 نصب کردم، از طریق exeی build که گزینه انتخاب آن در منوهای ایجاد شده در Program Files هست: تحت عنوان windows server 2003 Free x64 Build Environment ، درایور رو build می کنم. در یک محیط Command ، با مشخص کردن آدرس فایلهای پروژه و اجرای دستور build، کامپایل می کنم که با خطا مواجه می شم. خطاها مبنی بر undeclar بودن asm_ , push و سایر دستورات اسمبلی می باشد.

همین کار رو برای ایجاد درایور 32بیتی توسط گزینه Windows xp Free Build Environment انجام می دم و درایور بدون مشکل ایجاد می شه و می تونم از آن استفاده کنم.

Inprise
سه شنبه 08 آبان 1386, 19:39 عصر
این سوال قبلا جواب داده شده بود و من فراموش کرده بودم . الان که دوباره نگاه کردم یادم اومد

While the 32-bit x86 compiler supports inline _asm, the x64 and IA64 compilers do not (by design). Asm code for these platforms must reside in a separate .asm source module. Because the x64 instruction set is so similar to the x86 instruction set, there is a temptation to "cut-n-paste" x86 code to x64 and fix it up until it assembles cleanly. The problem here is that the calling standard is quite different on x64, particularly w.r.t. stack use and well-formed prologues and epilogues required for proper exception handling. The x64 calling standard document is included in the SDK and DDK.

zoncpp
پنج شنبه 10 آبان 1386, 11:02 صبح
ببخشیدا:خجالت:، من نفهمیدم آخر باید چی کار کنم. آیا فایل جداگانه ای وجود داره که به پروژه اضافه کنیم و با وجود اون فایل دستورات اسمبلی برای کامپایلر تعریف شده ؟ یا باید خودم این فایل رو بنویسم؟ چطوری؟:گیج:
راهی برای سریعتر رسیدن من به نتیجه وجود داره (یک نمونه و مثال)؟ اگه آره، میشه راهنماییم کنید؟:خجالت:

Inprise
پنج شنبه 10 آبان 1386, 11:10 صبح
باید Inline هات رو ببری در یک فایل جداگانه و فراخوانی شون کنی . خوب اینکار رو انجام بده .
بگذریم از اینکه با وجود Intrinsic ها نمیدونم دقیقا چرا باید از Inline Assembler استفاده کنی اما بهر حال ، راه حلت همین هست و MSDN توضیح بیشتری نداده و من هم الان خودم امکان تست یا نوشتن کد نمونه برات رو ندارم .

illegalyasync
پنج شنبه 10 آبان 1386, 16:18 عصر
حتما قبل از پورت کردن درایورهات به 64 بیتی اینها رو بخون
http://download.microsoft.com/download/f/0/5/f05a42ce-575b-4c60-82d6-208d3754b2d6/64-Bit_DrvPort.ppt
http://www.microsoft.com/whdc/driver/kernel/64bit_chklist.mspx
http://www.codeproject.com/system/64BitOSAndPortingIssues.asp

نگهداری کردن کد کرنل برای 32 و 64 بیتی کار سختی هستش من یه مدتی دردسرهاشو تحمل کردم بعد بیخیالش شدم و یه برنچ جدید برای 64 بیتی زدم ;)