نمایش نتایج 1 تا 2 از 2

نام تاپیک: درس 3 : Assembly

  1. #1

    درس 3 : Assembly

    در این قسمت به شناسایی دستورات اسمبلی می رسیم .

    Mov Dest,source
    با اجرای این دستور منبع درون مقصد کپی می شود. منبع و یا مقصد می تواند یکی از حالات زیر باشه:
    -ثبات یا رجی ستر
    -آدرس حافظه
    - رجی ستری که به حافظه ای اشاره مکنه
    -رجی ستری که به حافظه ای که نسبی اشاره می کنه
    ( بعدا در نحوه آدرس دهی این مفاهیم توضیح داده می شود)
    مثال

    Mov eax,ebx

    که مقدار ebx تو eax می ریزد.

    Push value
    وظیفه آن قرار دادن value در Stack memory می باشد.
    مثال

    Push eax / Push [004044ca]

    که مقدار eax را تو پشته قرار می دهد./ مقدارای را که در حافظه [004044ca] می باشد را در پشته قرار می دهد.

    Pop value
    معکوس Push بوده و مقداری را که با Push در حافظه قرار گرفته را بر می گرداند.
    مثال

    eax= 10h push eax
    eax=1000h mov eax,1000h
    ebx=12h mov ebx,12h
    ebx=ebx+eax=1012h add ebx,eax
    eax=10h Pop eax

    ×همیشه متغیری که در حافظه قرار میگیرد لزوما با همان متغیر برداشته نمی شود

    Push eax
    ….
    Pop ebx

    PopA /PushA
    دقیقا مثل پدرهاشون می مانند. با این تفاوت که تمامی رجی ستر ها را در حافظه قرار داده یا همگی را می خوانند.

    Lea reg,Source
    مقدار آدرس موثر(واقعی با سگ منت و افست ) منبع را در رجی ستر قرار می دهد.

    Jmp value
    اگر value آدرس موثر باشد ( که معمولا نیست ) به آن آدرس برنامه فرستاده می شود .و اگر موثر نباشه به اندازه مقدار value به آدرس کنونی اضافه کرده و به اونجا می رود
    اگر یاد تون باشد EDI شماره خط در حال حاضر رو تو خودش دارد پس دو دستور زیر با هم معادل اند:

    Jmp 02 ,jump to address that is equal to current address+02
    Add edi+02 , edi equal to edi(Current Address)+2

    Cmp Op1,Op2
    مقدار اولی و دومی را مقایسه می کند . (اولی منهای دومی ) بر اساس نتیجه مقدار رجی ستر وضعیت ( قبلا معرفیشون نکردم فقط وضعیت مقایسه را تو خودش قرار می دن )( شامل بیتهای zf,sf,pf,of,cf,af است ) ست می کند. مهمتر ینشون zf (حاصل تفریق 0 است zf=1 یعنی با هم برابر اند)

    Jz,Jnz,…
    تمامی دستوراتی که یا z شروع می شن یعنی اگر ... و پرش .مثلا JZ ( Jump if Zero)یعنی اگر بیت zf از رجی ستر وضعیت 1 باشد به خط مورد نظر پرش نما



    شرط معادل بیت
    zf=1 = Jz=Je
    zf=0 != Jnz
    Ja بزرگتر zf=0 and cf=0
    Jae بزرگترو مساوی cf=0
    Jb کوچکتر cf=1
    Jbe کوچکتر و مساوی cf=1 or zf=0
    Jcxz اگر cx برابر 0 شد ecx=0



    (دستوراتی هم مثل JGو یا JL و هستن که برای اعداد علامت دار مصرف میشوند که ثبات وضعیتشون یادم نیست به هر صورت خود تون یاد بگیرید.)

    ADD و ADC( Adding & Adding With Carry)

    هر دو مقدار اول را بعلاوه مقدار دوم کرده و نتیجه را در اولیه می گذارند . قبل از اینکه فرقشون رو بگم بهتر که Overflow رو بگم . در حالت اعداد طبیعی هر بایت نمایانگر یک عدد بین 0 تا 255 می باشد ولی در حالت اعداد صحیح هر بایت نمایانگر یک عدد بین 128- تا 127 است.
    بیت معمولی بیت معمولی بیت معمولی بیت معمولی بیت معمولی بیت معمولی بیت معمولی بیت علامت
    اگر بیت علامت یک باشد یعنی عدد منفی است و 0 بودن آن یعنی عدد مثبت است .
    حال فرض کنیم 96 را با 32 جمع کنیم نتیجه 128 می شود ولی در حالت بالا عدد معادل 0 منفی است که باعث سر ریز شده است .
    در حالت جمع ADC این حالت پیش نیامده و همچنین اگر دو بایت را یا هم جمع کردیم و بر16 ) مثل بر 10 ) در جمع آنها را نیز دخالت می دهد. مثلا اگر یک کلمه را با کلمه دیگر جمع کنیم جواب درست نمایش داده می شود.

    SUB و SBB
    عمل تفریق را انجام می دهد .SBB دارای خصوصیات ADC است ولی عمل تفریق را انجام می دهد.

    Neg
    علامت عدد را معکوس می نماید. از روش متمم دو

    INC x
    به عدد x یک عدد اضافه می نماید.( x می تواند حافظه و یا آدرس و یا رجی ستر باشد)

    DEC x
    از x یک عدد کم می کند.

    MUL x
    برابر eax=eax*x

    IMUL x
    مثل mul است ولی برای اعداد علامت دار

    DIV x وIDIV x
    تقسیم مثل MUL وMULI


    عمل TEST A,B مثل عمل AND بوده ولی باعث تغییر A نمی شود .ولی در صورت برابری AوB مقدار zf را یک می کند.

  2. #2
    البته اینجا اینرا هم اضافه کنم. بنده حقیر در حال تالیف یک کتاب اسمبل تحت ویندوز هستم. و از تمامی دوستان بزای این کار کمک می خواهم. البته این کتاب اصلا شامل مباحث مقدماتی نمیشود (20 صفحه) و بسرعت مباحث تحت ویندوز رو شروع کرده ام ؛ تا حدی که حتی در کتاب های خارجی هم کم می باشد. در اینجا از تمامی دوستان و علاقه مند به پیشرفت سری دعوت به همکاری میآورم. البته فکر نکید که آقا تازه می خواهد شروع کند کمک می خواد: تا به حال حدود 500 صفحه آن را نوشتع کاغذی کردم و تمومه. مباحث باقیمانده سخت ترین مباحث کامپیوتر میباشد و نیاز به دانش بالایی دارد. مثلا : Software interrupts, Memory Mapped Files Sharing Data Between Instances, ,antidebuggers , Packer ,........
    لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
    لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
    لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
    و ذکر نیز بکنم که مطالب کتاب برای TASM va MASM32( البته با 1-2 تغییر کوچک) میباشد نه HLAکه برای بچه هاست.
    _________________
    ahsdhasdhjgsadsad

تاپیک های مشابه

  1. قدردانی از مسئولین سایت و یک پیشنهاد در باره تاپیک Assembly
    نوشته شده توسط Delphi Coder در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 7
    آخرین پست: سه شنبه 27 آذر 1386, 11:07 صبح
  2. استفاده از دایرکتیو Assembly
    نوشته شده توسط hasti.lm در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: پنج شنبه 08 آذر 1386, 15:19 عصر
  3. نگهداری اعداد بزرگ در Assembly
    نوشته شده توسط Amir Oveisi در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 5
    آخرین پست: یک شنبه 10 دی 1385, 18:41 عصر
  4. Assembly
    نوشته شده توسط benyamin_pc در بخش C#‎‎
    پاسخ: 9
    آخرین پست: پنج شنبه 19 مرداد 1385, 07:56 صبح
  5. C++‎ and assembly
    نوشته شده توسط vbprogrammerx در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: پنج شنبه 14 اردیبهشت 1385, 17:39 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •