ورود

نسخه کامل مشاهده نسخه کامل : Include (ASM Obj) in TC



MAR_Programmer
20-05-2009, 11:32
سلام خدمت دوستان
از اونجا که سر فصل این تاپیک C بود نه ++VC من سوال خودم رو اینجا مطرح کردم امیدوارم مدیران سایت من رو مجازات نکنن
سوال من اینه که چطوری می تونم از یک فایل Obj که توی ASM ساختم توی TC v3.0 استفاده کنم
سوال رو بیشتر توضیح می دم:
ببینید ما توی اسمبلی می تونیم فایل های خاصی رو داشته باشیم که توشون زیربرنامه ها رو قرار بدیم و در آخر از طریق برنامه Link این فایل ها رو به برنامه اصلی پیوند بدیم
مثلا من یه تابع توی فایلی دارم به صورت زیر اونو ایجاد کردم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا چطوری می تونم توی TC این فایل رو (در واقع تابع رو) استفاده کنم ببینید من معرفی تابع رو انجام دادم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما موقع لینک کردن که از tcc استفاده می کنم به فایل Obj من گیر میده می خواستم از حضور اساتید استفاده کنم و ببینم چطوری می تونم این مشکل رو حل کنم (راهنمایی بیشتر این مبحث یکی از مباحث مورد تدریس در درس برنامه سازی سیستم هست)
پیشاپیش ممنون

DaneshD
21-05-2009, 03:11
به احتمال زیاد تابع اسمبلی با نام extern در C همخوانی نداره که لینکر پیغام خطا میده. بطور کلی سعی کن این الگو رو دنبال کنی:

تابع خودت در اسمبلی رو به این صورت بنویس:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعد در کد C این تابع رو به اینصورت فراخوانی کن:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا برای فراخوانی تابع با متغیرهای ورودی در اسمبلی، اگر با Directive ها آشنایی داری و به کمک TASM میتونی به صورت خلاصه زیر یک متغیر رو pass کنی به برنامت در C:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که متغیر ورودی در NOS ذخیره شده. برای درک بهتر Directive ها، کد بالا در واقع کد پایین است که بدون Directive نوشته شده است:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید که فراخوانی اون در کد C شما به صورت زیر خواهد بود:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


در آخر، برای کامپایل کردن برنامه ابتدا کد اسمبلی و سپس کد C را به صورت زیر کامپایل کنید:

TASM MUFUN.asm

که منجر به تولید فایل MYFUN.obj می گردد. سپس فایل C را به صورت زیر کامپایل کنید:

TCC myprogram.c MYFUN.asm

دقت کنید فایل C را در همان مسیری کامپایل کنید که فابل obj اسمبلی ساخته شده وجود داشته باشد.

MAR_Programmer
22-05-2009, 15:41
با سلام
حالا اگر من به جای TASM از MASM استفاده کنم چی تفاوتی بین این دو کامپایلر هست؟

DaneshD
22-05-2009, 15:51
فکر نکنم فرقی داشته باشه. امتحان کن ببین چی میشه. گرچه TASM فکر کنم با خود Turbo C عرضه میشه.