در حالت کلی با استفاده از ابزار هایی مثل IDA Pro و W32Dasm که Disassembler های تخصصی هستند و کارشون همینه.
اما برای فایل های obj می توانید از ابزار های ساده تری مثل OBJ2ASM هم استفاده کنید.
خیر.
بله. ولی اولا باید مدل حافظه اش Tiny باشه، یعنی خروجی فایل های کوچک و ساده COM، نه EXE. چون دیگه سیستم عاملی وجود نداره که فایل EXE رو تفسیر کنه.
ثانیا داخلش فقط می توانید از وقفه های BIOS استفاده کنید، از وقفه های DOS نمی توانید استفاده کنید چون موقعی که کد شما اجرا میشه وجود ندارند.
ثالثا فایل، فولدر، پارتیشن و ... برای برنامه شما معنی نداره و اگر با دیسک کاری می کنید خودتون باید در کدتون سکتور به سکتور داده بخونید.
بله، اما برای کد اسمبلی که قراره با استفاده از توابع ویندوز کار کنه، نه MS-DOS. مگر اینکه کتابخانه تخصصی ای برای نمایش متن Unicode در DOS باشه که ازش استفاده کرده باشید.
مشکل این نیست که نتوانید در کدتون رشته Unicode داشته باشید، مساله اینجا است که برای تایپ یا نمایش رشته های Unicode تون باید سرویس مناسب Unicode ای باشه که در BIOS و MS-DOS نیست. اگر برای ویندوز کد اسمبلی می نویسید و از فراخوانی توابع API ویندوز کمک می گیرید، بله، می توانید از Unicode استفاده کنید.
اما چون اغلب کد های اسمبلی که می بینید برای MS-DOS و بر اساس وقفه های BIOS و MS-DOS طراحی شده اند، طبعا نمی توانند با رشته های Unicode کاری انجام بدهند.
فایل های COM که خیلی ساده هستند، یک مدل حافظه Tiny دارند که کد و داده هر دو کنار هم در یک سگمنت قرار میگیره و فراتر از اون سگمنت نمیره که برای برنامه های خیلی کوچیک و کم حجم مناسب ئه. فایل های COM پردازش خاصی لازم ندارند، آدرس های داخل فایل همونطور که نوشته شدن در حافظه قرار می گیرند و دستکاری خاصی لازم ندارند.
فایل های EXE ولی یک ساختار پیچیده داره. در فایل های EXE مدل های حافظه دیگری رو بکار می برند که بهشون اجازه میده سگمنت های متعددی برای کد و داده داشته باشن و کد و داده در سگمنت های مجزا قرار بگیرند. سیستم عامل موقع اجرای فایل EXE ابتدا باید ساختار فایل اجرایی رو پردازش کنه. وقتی محتویاتش رو در حافظه قرار داد، آدرس های نسبی به رو آدرس های مطلق تبدیل کنه و ...