رفتن به مطلب

ساختار برنامه در اسمبلی

امتیاز دادن به این موضوع:


king75
 اشتراک گذاری

براي جلوگیری از تکراری شدن تاپیک ها قبل از ارسال از قسمت جستجوی سایت استفاده کنید. تاپیک های تکراری حذف خواهند شد.

تاپیک ها باید در انجمن های مناسب زده شوند. قبل از ارسال تاپیک عنوان انجمن را بخوانید.

ارسال های توصیه شده

فايلهاي اجرايي در سيستم عامل داس سه دسته هستند . كه اين سه دسته با پسوندهاي 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

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

  • پاسخ 0
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

روزهای محبوب

بهترین ارسال کنندگان این موضوع

در تاپیک ها، اگر سوال يا نظر خاصي نداريد لطفا فقط از دکمه می پسندم و ... استفاده کنيد. نظراتي مانند مرسی، خوب بود، ممنون و ... شامل اسپم هستند و باعث کاهش کيفيت پست ها مي شوند.

بالا آوردن تاپیک ها و پست ها قبل از 48 ساعت ممنوع است و موجب حذف آنها خواهد شد.

این موضوع کاملا قدیمی است. لطفا به جای بروز کردن این موضوع در نظر شروع یک موضوع جدید باشید مگر این که لازم به بروز رسانی این موضوع باشید.

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

 اشتراک گذاری

×
×
  • اضافه کردن...