پرش به


تصویر
- - - - -

توضیحاتی در مورد برخی عبارات موجود در یک فایل اسمبلی

اسمبلی ابوالفضل عربی آزاد بندرعباس

  • لطفا وارد حساب کاربری خود شوید تا بتوانید پاسخ دهید
بدون پاسخ

#1 ابوالفضل عربی

ابوالفضل عربی

    Administrator

  • مدیران ارشد
  • 99 ارسال
  • مکان : بندرعباس ، تهران

ارسالی 20 April 2018 - 08:52 AM

با عرض سلام.

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

 

 

 

386.

در ابتدای برنامه راهنمای 386. مشخص می کند که برنامه از دستورات و ثبات های 32 بیتی معرفی شده پردازنده 80386 استفاده می کند. می توانید از راهنماهای 486.، 586. یا 686. هم استفاده کنید. برای استفاده از کلیه دستورات اسمبلی پردازنده های پنتیوم پرو از راهنمای 686p. استفاده کنید.

 

 

model.

راهنمای model. مدل حافظه برنامه را مشخص می کند. عملوند اول مقابل آن برای تعیین اندازه اشاره گرهای کد و داده است و می تواند يکی از انتخاب های زير باشد. در برنامه های Win32 مدل حافظه flat مناسب تر است (توضیح بیشتر در بخش حافظه).عملوند مقابل آن می تواند يکی از انتخاب های زير باشد:

 

post-1-0-31832600-1524400039.jpg

 

پارامتر دوم نحوه تبادل داده در فراخوانی زیربرنامه را تعیین می کند. می تواند C، Pascal یا Stdcall باشد. در توابع ویندوز تبادل پارمترها Stdcall است. به این معنی که پارامترهای از راست به چپ (به ترتیب عکس) وارد پشته می شوند.

 

 

stack.

وقتی از راهنمای model. استفاده می کنید یک سگمنت برای پشته در نظرگرفته می شود. راهنمای stack. فضائی را برای پشته برنامه رزرو می کند. اندازه پشته در مقابل آن بر حسب بایت ذکر می شود. اگر عددی ذکر نشود پیش فرض 1024 بایت در نظر گرفته می شود.

.stack [size]

data.

راهنمای data. شروع سگمنت داده را تعیین می کند. تعریف و مقداردهی متغیرهای برنامه معمولا در این قسمت انجام می شود.

متغیر (variable) محلی در حافظه است که داده های برنامه در آنجا نگه داشته می شود. بخاطر تعداد کم ثبات ها متغیرها می توانند خیلی کارساز باشند. دو نوع متغیر وجود دارد: سراسری و محلی. متغیرهای سراسری آنهایی هستند که در سراسر سگمنت کد قابل دسترس هستند. متغیرهای محلی حافظه های موقتی هستند که درون تابع استفاده می شوند. وقتی ایجاد می شوند مقداردهی نمی شوند.

متغيرها را در هر سگمنتی می توان تعريف کرد اما اکثر برنامه نويسان همه آنها را در سگمنت داده تعريف می کنند. هر متغير به فرم کلی زير تعريف می شود:

VariableName Type InitialValue|?

Type نوع متغير را مشخص می کند که می تواند يکی از نوع های جدول زير باشد. InitialValue مقداراوليه متغير است. اگر نخواهيم مقدار اوليه بدهيم علامت سوال (?) می گذاريم. چند نوع متغیر که در آینده زیاد از آنها استفاده می کنیم byte، word و dword هستند که به ترتیب اندازه 1، 2 و 4 را بایت دارند.

 

 

?data.

متغیرها اگر مقداردهی شوند در قسمت data. جای می گیرند. متغیرهایی که مقداردهی نمی شوند را در قسمت ?data. می توان تعریف کرد.

 

code.

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

راهنمای end انتهای سگمنت کد و پايان برنامه را برای اسمبلر مشخص می کند.

برای پايان اجرای برنامه و بازگشت به محيط سيستم عامل در انتهای هر برنامه تابع 4c از وقفه 21h یا تابع ExitProcess از توابع Win32 بايد فراخوانی شود.

مثال. فراخوانی تابع 4ch از وقفه 21h.

Mov AX,4c00h
Int 21h

End

راهنمای end انتهای برنامه را مشخص می کند.

END address

عملوندی که در مقابل آن ذکر می شود نقطه آغاز اجرا يا نام تابع اصلی برنامه را به سيستم عامل می گويد و در واقع ثبات های CS و IP را تنظيم می کند. اگر اين عملوند نباشد سيستم عامل از اولين بايت سگمنت کد شروع به اجرا می کند. نقطه شروع الزاما بلافاصله بعد از راهنمای .code نيست.

مثال. شروع اجرا از برچسب start.

Start: ... ;your code here ... End Start

 

 

Include

راهنمای include کدهای فایل منبع که نام آن ذکر شده است را به کد فایل فعلی اضافه می کند. دستور include به صورت زیر نوشته می شود:

INCLUDE filename

 

 

Invoke

راهنمای invoke مخصوص Masm است و برای فراخوانی توابع بدون اجبار به اضافه کردن پارامترهای تابع در پشته بکار می رود.

INVOKE expression , arguments

عملوند اول آن نام زیربرنامه ای است که فراخوانی می کند و پارامترهای تابع پشت سر آن نوشته می شود. پارامترها می توانند به صورت یک عبارت، ثبات، یا آدرس (همراه با ADDR) ارسال شوند.

 

 

 

موفق و موید باشید.

ابوالفضل عربی

1396/01/31

فایل های پیوستی

  • فایل پیوستی  model.jpg   40.82K   4 تعداد دریافت ها

ابوالفضل عربی
شماره تماس : 09380291826

ایمیل دانشگاهی : abolfazl.arabi@iauba.ac.ir
ایمیل  کاری : info@IranDelphi.ir






همچنین به اسمبلی, ابوالفضل عربی, آزاد بندرعباس نیز برچسب خورده است

0 کاربر در حال خواندن این موضوع است

0 کاربر، 0 مهمان و 0 عضو مخفی

صفحه ی اینستاگرام  دانشگاه آزاد اسلامی واحد بندرعباس