PDA

View Full Version : درس 3 : Assembly



Best Programmer
یک شنبه 07 دی 1382, 01:00 صبح
در این قسمت به شناسایی دستورات اسمبلی می رسیم .

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 را یک می کند.

Best Programmer
یک شنبه 07 دی 1382, 13:32 عصر
البته اینجا اینرا هم اضافه کنم. بنده حقیر در حال تالیف یک کتاب اسمبل تحت ویندوز هستم. و از تمامی دوستان بزای این کار کمک می خواهم. البته این کتاب اصلا شامل مباحث مقدماتی نمیشود (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