PDA

نسخه کامل مشاهده نسخه کامل : نوشتن يك اسمبلر به زبان c



bahareh655
15-01-2008, 19:38
سلام
می خواستم بدونم كس‍ی تجربه نوشتن اسمبلر كامپيوتر پايه (توی معماری كامپيوتر) يا كامپيوتر با معماری Mips رو به زبون ++c داره؟
البته شايد فكر كنيد بهتر بود اين تاپيك رو تو بخش سخت افزار و مباحث مربوط به معماری كامپيوتر مطرح می كردم ولی دليل اين كارم اينه كه اين اسمبلر بايد به زبون ++c نوشته بشه و قصدم استفاده از تجارب استادان بزرگ C ، توی اين بخشه.
لذا از مديران محترم اين بخش می خوام عنايات خودشونو در جهت عدم انتقال اين تاپيك به انجمن های ديگه مبذول بدارن!

bahareh655
17-01-2008, 19:41
اگه سوال تا حدودی حجيم و سخت به نظر ميرسه،خواهشا بگين حداقل در مورد نوشتن يه اسمبلر به زبان c برای شروع چی كار بايد كرد؟:19:

someone
18-01-2008, 03:19
سلام!
شما میخواین یه Interpreter به زبان ++C بنویسین که دستورالعمل های Assembly رو به زبان ماشین
تبدیل کنه؟ خب! مقداری در مورد معماری کامپوتر پایه ای که طراحی کردین توضیح بدین.
دستور العمل ها چند بیتی هستند؟ برای کدوم دستورالعمل ها؟ و ....
سوالتون سخت نیست اما خیلی کلی پرسیده شده.
بیشتر توضیح بدین.

bahareh655
20-01-2008, 15:57
سلام
با تشكر از someone
مشخصات كلی معماری كامپيوتر پايه در فصل 5 كتاب معماری كامپيوتر(نوشته موريس مانو) تشريح شده(من طراحی اش نكردم!)
همين طور در مورد معماری MIPS كه ويژگی دستورالعمل ها،رجيسترهاو ... اون گفته شده (توی كتاب "رويكرد كمی به معماری كامپيوتر" نوشته هنسی پترسون)
درخواست من از شما بيشتر جنبه برنامه نويسی اسمبلر به زبان ++C هست
يعنی می خوام بدونم برای شروع كار اصلا نياز به چه هدر ها و چه نوع توابع كتابخانه ای دارم و چی كار بايد بكنم؟!
اصلا كاری به جنبه معماری اش ندارم چيزی كه مد نظرمه اينه كه از معلومات شما برای شروع كار استفاده كنم
و اينكه اگه تجربه نوشتن يه اسمبلر( يا هر مفسری) رو داشتين چه جوری شروع به كار كردين؟
اميدوارم منظورم رو رسونده باشم
ممنونم

سارا نیکو
27-05-2009, 19:00
سلام ..من دانشجوی رشته فناوری اطلاعات هستم...منم همین درخواست رو دارم...یعنی برنامه ای به زبان سی یا سی پلاس پلاس که زبان اسمبلی رو به ماشین تبدیل کنه ...
استاد ما گفته برنامه ای بنویسیم که کامپایلر رو به اسمبلر تبدیل کنه..اما من منظود این سوالو نمیفهمم..میشه توضیح بدید؟
ممنونم

DaneshD
28-05-2009, 19:28
سلام
با تشكر از someone
مشخصات كلی معماری كامپيوتر پايه در فصل 5 كتاب معماری كامپيوتر(نوشته موريس مانو) تشريح شده(من طراحی اش نكردم!)
همين طور در مورد معماری MIPS كه ويژگی دستورالعمل ها،رجيسترهاو ... اون گفته شده (توی كتاب "رويكرد كمی به معماری كامپيوتر" نوشته هنسی پترسون)
درخواست من از شما بيشتر جنبه برنامه نويسی اسمبلر به زبان ++C هست
يعنی می خوام بدونم برای شروع كار اصلا نياز به چه هدر ها و چه نوع توابع كتابخانه ای دارم و چی كار بايد بكنم؟!
اصلا كاری به جنبه معماری اش ندارم چيزی كه مد نظرمه اينه كه از معلومات شما برای شروع كار استفاده كنم
و اينكه اگه تجربه نوشتن يه اسمبلر( يا هر مفسری) رو داشتين چه جوری شروع به كار كردين؟
اميدوارم منظورم رو رسونده باشم
ممنونم

اگر منظور شما تبدیل کد نوشته شده به زبان اسمبلی به کد زبان ماشین قابل اجرا بر روی یک پردازنده خاص و احتمالا ساده هست در واقع همون نوشتن Code Generator در درس کامپایلر هست که ابتدا کد سطح بالای زبان برنامه نویسی به کد یا شبه کد اسمبلی توسط Scanner یا Parser تبدیل میشه بعد ای کد تبدیل به کد زبان ماشی میشه که شما مرحله آخر رو احتیاج دارید. برای اینکار باید کد رو Scan کنید که خط به خط خوندن ساده در زبان C هست که حتما بلدید. بعد هر خط رو به کلمه ها یا همون Token ها تبدیل کنید. دستورهای مثل mov ax, 10 که قرار دادن constant در رجیستر یا mov bx, cx که قرار دادن رجیستر در رجیستر هست خیلی ساده هست و حتما کد اونها در note های همون پردازنده یا کتاب اومده. صدا کردن interrupt ها هم به همین ترتیب ساده هست و همینطور برای logical operator ها مثل دستورهای and, or, xor و push و pop. بخش حساس و مشکل function call ها یا فراخوانی توابعی هست که نوشته شده که برنامه شما باید آدرس function رو دری جدول حفظ کنه و Instruction Pointer رو در stack قیل از فراخوانی push کنه و بعد از فراخوانی pop کنه. یعنی به ازای هر function call برنامه شما باید چندین instruction معادل در فایل اجرایی قرار بده. همینطور برای متغیرهایی که برنامه نویس تعریف کرده که شما باید یک Lookup Table درست کنید که نام متغیرها و آدرس معادل رو در اون قرار بده و هرجا از اون متغیراستفاده شده بود به جای اون آدرسش رو قرار بده. فایلی که برنامه شما تولید میکنه هم باید از نوع binary با پسوند com باشه.

DaneshD
28-05-2009, 19:29
سلام ..من دانشجوی رشته فناوری اطلاعات هستم...منم همین درخواست رو دارم...یعنی برنامه ای به زبان سی یا سی پلاس پلاس که زبان اسمبلی رو به ماشین تبدیل کنه ...
استاد ما گفته برنامه ای بنویسیم که کامپایلر رو به اسمبلر تبدیل کنه..اما من منظود این سوالو نمیفهمم..میشه توضیح بدید؟
ممنونم

شما هم باید همون کاری رو بکنید که بهاره میکنه.

سارا نیکو
28-05-2009, 23:46
شما هم باید همون کاری رو بکنید که بهاره میکنه.


امکانش هست که شما برنامه ای که توضیحشو دادید اینجا قرار بدید؟
این برنامه ای که توضیح داید خروجیش کار اسمبلر رو میکنه؟
برنامه ای که خروجیش تبدیل کامپایلر به اسمبلر هسه رو اینجا میزارید؟

DaneshD
29-05-2009, 08:53
امکانش هست که شما برنامه ای که توضیحشو دادید اینجا قرار بدید؟
این برنامه ای که توضیح داید خروجیش کار اسمبلر رو میکنه؟
برنامه ای که خروجیش تبدیل کامپایلر به اسمبلر هسه رو اینجا میزارید؟

نه متاسفانه امکانش نیست چون اینکار تقلب هست و باعث میشه که شما چیزی یاد نگیرید.

این برنامه ای که من گفتم خروجی اش یک فایل .com قابل اجرا هست. فایلهای .com مانند فایلهای .exe اجرایی هستند با این تفاوت که سایز اونها نمیتونه از 65k بیبشتر باشه و فاقد header هم هستند.

چیزی که شما میخواهید فکر کنم Parser یا Scanner هست که کد کامپیایلر رو اسکن کنه و کد معادل اسمبلی اونرو تولید کنه که حتی ساده تر هم هست.