رفتن به مطلب

دستورات اسمبلی

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


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

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

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

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

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

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

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

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

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

روزهای محبوب

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

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

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

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

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

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

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

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

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

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

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

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

 اشتراک گذاری

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