1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش اسمبلی(14)

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن Assembly

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    عملگرهای بیتی: عملگرهای بیتی مانند عملوندهای حسابی هستند با این تفاوت که روی بیت ها کار میکنند. این عملگرها عبارتند از : … AND/OR/XOR/SHR/SHL/RCL/RCR/ .


    عملگر AND :
    این اپراتور بیتهای دو عدد(متغیر) را با هم AND کرده و حاصل را در متغیر (یا ثبات ) سمت چپ قرار میدهد . اگر فرض کنیم که همیشه ۱ بودن بیت به معنای Trueو ۰و بودن آن به معنای False است ، AND همیشه در صورتیکه هر دوبیت مقایسه شونده ۱ باشند، حاصل ۱یا Trueا را بر میگرداند .
    جدول ارزشی AND :

    X | Y | X and Y |

    1 | 1 | 1 |
    1 | 0 | 0 |
    0 | 1 | 0 |
    0 | 0 | 0 |

    پس وقتی ما عملوند AND را با دو رجیستر بکار میبریم ، بصورتی که گفته شد بیتها با هم مقایسه شده و حاصل مقایسه در محل متناظر بیتها در ثبات سمت چپ قرار میگیرند . مثلا اگر دستور AND Ah/Dh را اجرا کنیم ، حالتی نظیر شکل زیر را داریم :

    AH : 01101010
    DH : 01111101
    AH :AH AND DH : 01101000
    به نتیجه بدست آمده توجه کنید .
    هر وقت که بخواهیم بیت های خاصی از یک رجیستر را ۰ کنیم ، یک عدد باینری که همه بیتهای آن ، بجز بیتهای مورد نظر ۱ هستند را در نظر گرفته با رجیستر مورد نظرAND میکنیم .
    مثلا اگر بخواهیم بیتهای دوم و سوم ثبات AX را صفر کنیم : AND AX/11111001b

    عملگر OR :
    این عملوند بیتهای دو عدد را با هم مقایسه کرده و اگر یکی از آن دو ۱ بود ، بیت متناظر در ثبات سمت چپ را ۱ میکند . مثلا با دستور OR AH/DH بیتهای AHبا DHا مقایسه شده و هر دو بیت متناظر که با هم ۰ بودند ، بیت تناظر در AHهم ۰ میشود.


    AH : 01101010
    DH : 01111100
    AH : AH OR DH : 01111110
    هرگاه که بخواهیم بیت های خاصی از یک متغیر یا رجیستر را ۱ کنیم ، یک عدد باینری که همه بیتهای آن غیر از بیتهای مورد نظر ۰ هستند در نظر گرفته و با ثبات مورد نظر OR میکنیم . مثلا اگر بخواهیم دو بیت پائین AHرا ۱ا کنیم منویسیم : OR AH/00000011b
    عملگر : XOR
    عملوند XOR تنها در صورتی نتیجه ۱ میدهد که دو بیت مقایسه شونده غیرهم ارزش باشند . یعنی یکی ۱ و دیگری ۰ باشد .
    بعنوان مثال با اجرای XOR AH/DH این عملیات روی بیتها انجام میشود

    AH : 01101010
    DH : 01111100
    AH : AH XOR DH : 11101001
    وقتی بخواهیم یک مقدار ثبات را برابر صفر قرار بدهیم ، معمولا از آن را با خودش XOR میکنیم . مثلا XOR CX/CX محتوای ثبات CX را برابر ۰ قرار میدهد .
    عملگرهای SHRو SHL :
    این عملگرها، بیتها را به راست و چپ شیفت ( انتقال ) میدهند .
    SHR Reg.nnum و SHL Reg.nnum .Reg اسم یک ثبات است مثلا AXو numو معلوم میکند که چند بیت باید به طرف راست یا چپ انتقال پیدا کند . مثلا SHR AX/6 بیتهای AXرا ۶ا واحد به راست
    انتقال داده و بیتهای چپ را با ۰ پر میکند .

    AX :10100010
    AX :SHR AX/4 : 00001010
    SHL هم عکس این عمل را انجام میدهد . یعنی بیتها را به چپ شیفت داده و از طرف راست با ۰ پر میکند .
    AX :10100010
    AX :SHR AX/4 : 00100000
    مثال : اگر بخواهیم که محتوای نیم ثبات CL را به نیم ثبات CH منتقل کنیم ، کافیت که CXرا ۸ا بیت به سمت چپ شیفت بدهیم . یعنی SHL CX/8 CL CH | 10110100 | 00101101 |
    محتوای اولیه CX CX CL CH | 00101101 | 00000000 |
    محتوای CX بعد از SHL CX/8 انتقال
    ادامه این بحث را در قسمت بعد انجام میدهیم .