نقل قول نوشته شده توسط PEYMAN002 مشاهده تاپیک
سلام
چنتا سوال در خصوص اسمبلی دارم.
چطور میشه فایل های ترجمه شده توسط اسمبلر را مشاهده کرد مثل فایل obj ؟ میخوام کد ماشین برنامه رو ببینم.
در حالت کلی با استفاده از ابزار هایی مثل IDA Pro و W32Dasm که Disassembler های تخصصی هستند و کارشون همینه.
اما برای فایل های obj می توانید از ابزار های ساده تری مثل OBJ2ASM هم استفاده کنید.

نقل قول نوشته شده توسط PEYMAN002 مشاهده تاپیک
برای تبدیل فایل obj به برنامه exe توسط لینکر نیاز به فایل های دیگه داره که توسط اسمبلر تولید شده مثل lst ؟
خیر.

نقل قول نوشته شده توسط PEYMAN002 مشاهده تاپیک
ایا میشه برنامه ای را تحت بیوس اجرا کرد بدون نیاز به سیستم عامل مثل داس و ویندوز ؟ یعنی کامپیوتر روشن میشه به جای سیستم عامل برنامه بالا بیاد مثل سیستم عامل.
بله. ولی اولا باید مدل حافظه اش Tiny باشه، یعنی خروجی فایل های کوچک و ساده COM، نه EXE. چون دیگه سیستم عاملی وجود نداره که فایل EXE رو تفسیر کنه.
ثانیا داخلش فقط می توانید از وقفه های BIOS استفاده کنید، از وقفه های DOS نمی توانید استفاده کنید چون موقعی که کد شما اجرا میشه وجود ندارند.
ثالثا فایل، فولدر، پارتیشن و ... برای برنامه شما معنی نداره و اگر با دیسک کاری می کنید خودتون باید در کدتون سکتور به سکتور داده بخونید.

نقل قول نوشته شده توسط PEYMAN002 مشاهده تاپیک
من تو تمام اموزش ها که دیدم به طور پیشفرض برای کاراکترها از اسکی داره استفاده میشه. ایا میشه از یونیکد استفاده کرد تو اسمبلی
بله، اما برای کد اسمبلی که قراره با استفاده از توابع ویندوز کار کنه، نه MS-DOS. مگر اینکه کتابخانه تخصصی ای برای نمایش متن Unicode در DOS باشه که ازش استفاده کرده باشید.
مشکل این نیست که نتوانید در کدتون رشته Unicode داشته باشید، مساله اینجا است که برای تایپ یا نمایش رشته های Unicode تون باید سرویس مناسب Unicode ای باشه که در BIOS و MS-DOS نیست. اگر برای ویندوز کد اسمبلی می نویسید و از فراخوانی توابع API ویندوز کمک می گیرید، بله، می توانید از Unicode استفاده کنید.
اما چون اغلب کد های اسمبلی که می بینید برای MS-DOS و بر اساس وقفه های BIOS و MS-DOS طراحی شده اند، طبعا نمی توانند با رشته های Unicode کاری انجام بدهند.

نقل قول نوشته شده توسط PEYMAN002 مشاهده تاپیک
من جایی خوندم که برنامه با دو فرمت com و exe میشه تولید کرد. تفاوت این دو چیه؟
فایل های COM که خیلی ساده هستند، یک مدل حافظه Tiny دارند که کد و داده هر دو کنار هم در یک سگمنت قرار میگیره و فراتر از اون سگمنت نمیره که برای برنامه های خیلی کوچیک و کم حجم مناسب ئه. فایل های COM پردازش خاصی لازم ندارند، آدرس های داخل فایل همونطور که نوشته شدن در حافظه قرار می گیرند و دستکاری خاصی لازم ندارند.

فایل های EXE ولی یک ساختار پیچیده داره. در فایل های EXE مدل های حافظه دیگری رو بکار می برند که بهشون اجازه میده سگمنت های متعددی برای کد و داده داشته باشن و کد و داده در سگمنت های مجزا قرار بگیرند. سیستم عامل موقع اجرای فایل EXE ابتدا باید ساختار فایل اجرایی رو پردازش کنه. وقتی محتویاتش رو در حافظه قرار داد، آدرس های نسبی به رو آدرس های مطلق تبدیل کنه و ...