( تعداد نمایش : 1847 )

اسمبلی یاد بگیریم – ۱۴

عملگرهای بیتی

عملگرهای بیتی مانند عملوندهای حسابی هستند با این تفاوت که روی بیت ها کار
میکنند. این عملگرها عبارتند از : … 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
انتقال

ادامه این بحث را در قسمت بعد انجام میدهیم .

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن