PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ساختار و اجراي برنامه هاي اسمبلي به صورت com



TAHA
09-22-2009, 03:17 PM
فايلهاي اجرايي در سيستم عامل داس سه دسته هستند . كه اين سه دسته با پسوندهاي COM , EXE , BAT شناسايي ميشوند .
COM مخفف COMMAND كه معروفترين اين فايلها فايل COMMAND.COM ميباشد .
EXE مخفف EXECUTABLE كه كلا تمامي فايلهاي اجرايي از اين دسته هستند .
و در نهايت بچ فايلها يا فايلهاي با پسوند BAT هستند كه در اين فايلها دستورات سيستم عامل گنجانده ميشوند .
دو نوع فايل اولي يعني COM , EXE محصولات كامپايل شده برنامه ها هستند و دسترسي به سورس برنامه ها در انها غير ممكن است در وافع درون اين فايلها تنها كد ماشين كه همان صفر و يك است را ميتوانيد ببينيد .
اما در نوع دومي كه فايلها با پسوند BAT هستند . تنها دستوراتي از سيستم عامل را ميبينيد و چند دستور منحصر به اين نوع فايلها . كه معروفترين فايل اين گروه هم فايل AUTOEXEC.BAT است .
هر گاه در يك دايركتوري سه فايل با يك نام منتهي با پسوند هاي متفاوت داشته باشيم . و بخواهيم تنها با زدن نام فايل ( بدون پسوند) ان را اجرا كنيم فايلي كه پسوند BAT دارد ابتدا اجرا ميشود . و انگاه اگر در ان دايركتوري فايلي با اين پسوند نداشتيم فايل با پسوند COM اجرا ميشود . و انگاه در صورت عدم حضور فايلي با چنين پسوندي فايل با پسوند EXE در نهايت اجرا ميشود .
در اينجا طبق موضوع بحث بر سر فايلهاي COM است .
حداكثر گنجايش فايلهاي COM اندازه 64 KB است .
در برنامه هاي COM تنها مجاز باستفاده از يك سگمنت ان هم سگمنت CODE هستيم . باقي سگمنتها در همين سگمنت گنجانده ميشوند . باين ترتيب كه سگمنت DATA در بخشي از كدهاي برنامه كه غير قابل اجرا هستند گنجانده ميشوند . و سگمنت STACK توسط سيستم عامل در انتهاي اضافي بخش كد سگمنت اورده ميشود .
شماي كلي فايلهاي COM بصورت زير است :



CODESG SEGMENT ‘CODE’
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN
تعريف متغيرها و داده ها يي كه بايد در ديتا سگمنت تعريف ميشدند

MAIN:
دستورات برنامه
MOV AH,4CH
INT 21H
END START
مدل SMALL ايندسته از برنامه ها بشكل زير است



.MODEL SMALL
.CODE
ORG 100H
START:
دستورات برنامه
MOV AH,4CH
INT 21H
محل تعريف داده ها و رويه ها
END START
همانطور كه در مثال فوق ميبينيد براي تعريف داده ها ميتوانيم از دو مكان استفاده كنيم يكي استفاده از دستور JMP است تا هيچ وقت اسمبلر به ان خط نرسد و ديگري قرار دادن انها قبل از END START است تا باز هم اين داده ها اجرا نشوند . چون اين خطوط خطوط تعريفي هستند بنابراين نبايد هيچگاه اجرا شوند .
استفاده از دستور ORG 100H به اسمبلر فرمان ميدهد كه به خانه حافظه 256 برود و از انجا شروع باجراي برنامه كند . اين دستور بان سبب در برنامه هاي COM استفاده ميشود كه خانه هاي حافظه با ادرس 00H تا FFH براي عمليات سيستم عامل در نظر گرفته ميشود .

شبه دستور ORG
اين شبه دستور افست ادرس محل ذخيره دستور يا داده بعدي را تعيين ميكند . شكل كلي ان بصورت زير است



ORG ادرس
مثلا دستور ORG 1000H سبب ميشود كه انتفال برنامه به خانه هزار حافظه برود . و از انجا شروع به ادامه اجراي برنامه بكند . استفاده از اين دستور در هر مكاني از برنامه اختياري است . و هر گاه كاربر لازم ديد كه ادامه برنامه در خانه ديگري از حافظه اجرا شود از اين دستور استفاده ميكند . اما استفاده از اين دستور در برنامه هاي COM بلافاصله قبل از شروع كد نويسي برنامه اجباري است .
نكته قابل توجهي كه در برنامه هاي از نوع COM لازم بذكر است استفاده از كلمه NEAR در تعريف رويه ها ميباشد . از انجايي كه برنامه ما تنها در يك سگمنت است بنابراين رويه اي بصورت FAR نداريم !
سرعت بارگذاري برنامه ها و اجراي برنامه هاي COM سريعتر از برنامه هاي EXE است چرا كه در برنامه هاي EXE يك بلوك 512 بايتي در ابتداي برنامه براي نگهداري اندازه فايل , ادرس سگمنت ها در حافظه و ... در اين برنامه ها تعبيه شده است .
تنها محدوديتي كه اين برنامه ها COM دارند استفاده از يك سگمنت است .
توسط شبه دستور ASSUME كليه ثباتهاي سگمنت را به سگمنت CODE نسبت ميدهيم .
براي اسمبل كردن برنامه ها بصورت NORMAL به روش هاي زير عمل ميكنيم
اگر از اسمبلر ماكرو اسمبلر استفاده ميكنيد دستورات زير را بزنيد


MASM TEST1.ASM,TEST1.OBJ
LINK TEST1.OBJ,TEST1.EXE
EXE2BIN TEST1,TEST1.COM
سه دستور فوق بترتيب برنامه را اسمبل ميكند . فايل اجرايي را توسط دستور لينك درست ميكند و با دستور EXE2BIN فايل EXE به COM تبديل ميشود .
در صورت استفاده از توربو اسمبلر بصورت زير عمل كنيد


TASM TEST1.ASM, ,
TLINK /t TEST1.OBJ,TEST1.COM
در دستورات فوق يادتان باشد كه بين دو كاماي دستور TASM يك فاصله بگذاريد و همچنين /t با حرف كوچك نوشته شود
در صورتي كه از اسمبلر مايكروسافت استفاده ميكنيد
از دستور زير استفاده كنيد


ML.EXE /AT TEST1.ASM