close
دانلود فیلم
عملگر

يک جمله (statement) يک خط منفرد از کد است که عملي را انجام مي دهد. در ++C معمولا هر جمله در يک خط نوشته می شود، البته بعضی از جملات به چند خط تقسیم می شوند.

جملات هميشه به يک سميکولن (;) ختم می شوند. (به استثنای راهنماهای کامپايلر مانند define# و include#).


مثال. چند جمله در C++.

int i_accnum;
i_accnum=55555;
i_accnum=i_accnum+5;


White space

خطوط خالی و فاصله ها در برنامه white space نام دارند. کامپايلرهای C++ نسبت به خطوط خالی حساس نيستند و وقتی کد برنامه را می خوانند در جستجوی کاراکترهای جمله و ختم شدن به سميکولن هستند و فاصله ها را نديده می گيرند (ثابت های رشته ای مستثنا هستند). White space امکان فرمت بندی کد برنامه با يک طرح استاندارد برای فاصله گذاری را می دهد که باعث می شود کد برنامه خواناتر شود بدون اينکه روی اجرای آن تاثير بگذارد. هر برنامه نويسی استيل خود را ممکن است داشته باشد مهم اين است که کد برنامه خوانا باشد.

White space ها در ثابت های رشته ای که بين علامت گيومه (") قرار می گيرند مجاز نيستند. اگر می خواهيد يک رشته را به دو خط بشکنيد بايد از کاراکتر () استفاده کنيد.


مثال. جملات زير با هم معادل هستند.

x=2+3;

x = 2 + 3;

x   =
2
+
3;

مثال. جمله زير زير درست است.

cout<<"Hello
world!";


جملات پوچ

يک سميکولن تنها در يک خط خالی يک جمله پوچ (null statement) را می سازد که عملی انجام نمی دهد. گاهی جملات پوچ می توانند مفيد باشند.

جملات ترکيبی

جمله ترکيبی (compound statement) که بلاک (block) هم ناميده می شود از يک يا چند جمله که بين آکولاد محصور شده اند تشيل شده است.

بلاک می تواند جايگزين هر جمله ای در برنامه بشود. برای شروع بهتر است آکولاد بلاک در خط جداگانه ای باشد تا تشخيص اينکه جا افتاده است آسان تر باشد.


مثال. يک بلاک از کد.

{
   cout<<"Hello, ";
   cout<<"world!";
}

انواع داده عددی

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

اعداد صحيح کوچک حافظه کمتری می خواهند و کامپيوتر می تواند عمليات رياضی مانند جمع و ضرب را به سرعت روی آنها انجام بدهد. درحاليکه مقادير صحيح بزرگ و اعداد مميز شناور به فضا و زمان بيشتری برای محاسبات نياز دارند.

انواع متغير عددی در دو دسته کلی قرار می گيرند:

• متغيرهای صحيح، مقاديری را نگه می دارند که بخش کسری ندارند. متغيرهای صحيح خود دو نوع هستند: علامتدار، که می توانند مقادير مثبت و منفی را ذخيره کنند و بدون علامت، که تنها مقادير مثبت را نگه می دارند.
• متغيرهای مميزشناور، مقاديری را که دارای بخش کسری هستند يعنی اعداد حقيقی را نگه می دارند.


عبارات signed، unsigned، short و long اصلاح کننده هائی هستند که برای تغيير و تبديل انواع پايه از قبيل char، int و double اضافه می شوند .

انواع داده ها وابسته به platform کامپيوتر است و ممکن است روی کامپيوترهای مختلف متفاوت باشد، اما C با توجه به استاندارد ANSI موارد زير را تضمين می دهد:

• يک کاراکتر هميشه يک بايت است.
• اندازه short کوچکتر يا مساوی اندازه int است.
• اندازه int کوچکتر يا مساوی اندازه long است.
• اندازه unsigned برابر با int است.
• اندازه float کوچکتر مساوی با اندازه double است.

دستورات چرخش رشته های بيتی را به صورت دايره ای حرکت می دهد اين دستورات مشابه شيفت عمل می کنند با اين تفاوت که بيتی که از يک طرف از داده خارج می شود به طور دوار از جهت ديگر وارد آن می شود. پردازنده 8086 چهار دستورالعمل چرخش (rol ، ror ، rcl و rcr) دارد.

ROL
ROR
RCL
RCR


ROL

دستورالعمل (rotate left) rol بيت های عملوند خود را به سمت چپ چرخش می دهد. فرم کلی آن به صورت زير است:

rol dest, count

دستورالعمل rol بيت های عملوند مقصد خود را به تعداد count به سمت چپ چرخش می دهد. بيتی که از سمت چپ خارج می شود از سمت راست وارد عملوند می شود.با ارزش ترين بيت عدد در فلگ carry کپی می شود.

عملوند اول عملوند مقصد است و عملوند دوم تعداد شيفت ها را مشخص می کند و می تواند عدد 1 يا برای تعداد بيشتر ثبات CL باشد. نوشتن عدد فوری بيشتر از 1 مستقيما در دستور غير مجاز است.

دستورالعمل rol به شکل های زير می تواند استفاده شود:

rol register, 1
rol memory, 1
rol register, CL
rol memory, CL

دستورالعمل rol بيت های فلگ را به صورت زير تغيير می دهد:

• فلگ carry حاوی آخرين با ارزش ترين بيت عملوند می شود.
• اگر تعداد چرخش يکبار باشد و علامت عدد بعد از چرخش تغيير کند فلگ overflow يک می شود. برای چرخش بيشتر از يکبار نامعين است.
• روی فلگ های Sign ، Zero ، Parity و Auxiliary carry تاثير ندارد. اگر نيازداريد مقدار اين فلگ ها را بعد از عمل چرخش بدانيد نتيجه را با صفر مقايسه کنيد تا اين فلگ ها تنظيم شوند.


مثال.

mov AX, C123h
mov CL,3
rol AX, CL    ;AX = 091Eh, CF = 0


ROR

دستورالعمل (rotate right) ror بيت های عملوند خود را به سمت راست چرخش می دهد. فرم کلی آن به صورت زير است:

ror dest, count

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

مشابه دستورالعمل rol عملوند دستورالعمل ror می تواند ثبات يا حافظه باشد. تعداد چرخش عدد 1 يا ثبات CL است.

کم ارزش ترين بيت عملوند وارد فلگ carry می شود. بقيه فلگ ها مشابه دستورالعمل rol تاثير می پذيرند.


مثال.

mov AX, C123h
mov Cl,2
ror AX, CL     ;AX = F048h, CF = 1


RCL

دستورالعمل (rotate through carry left) rcl همانطور که از نامش پيدا است، بيت ها را از طريق فلگ carry به سمت چپ می چرخاند. شکل کلی آن به صورت زير است:

rcl dest, count

دستورالعمل rcl محتوای فلگ Carry را از سمت راست وارد عملوند مقصد می کند، سپس بيت های عملوند را به سمت چپ شيفت می دهد و آخرين بيت سمت چپ را وارد فلگ Carry می شود.

دستورالعمل rcl مشابه rol استفاده می شود و روی فلگ ها تاثير می گذارد.


RCR

دستورالعمل (rotate through carry right) rcr بيت های داده را از طريق فلگ carry به سمت راست می چرخاند. شکل کلی آن به صورت زير است:

rcr dest, count

دستورالعمل rcr محتوای فلگ Carry را از سمت چپ وارد عملوند مقصد می کند، سپس بيت های عملوند را به سمت راست شيفت می دهد و آخرين بيت سمت راست را وارد فلگ Carry می شود.

دستورالعمل rcr مشابه ror استفاده می شود و روی فلگ ها تاثير می گذارد.

دستورات منطقی 8086 عمليات منطقی and، or، xor و not را به صورت بيت به بيت روی عملوندها انجام می دهند.

AND
OR
XOR
NOT
TEST
دستکاری بيت ها


AND

دستورالعمل and عمل and منطقی را روی دو عملوند خود انجام می دهد و نتيجه را در عملوند اول ذخيره می کند. فرم کلی آن به صورت زير است:

and dest, src

طبق جدول زير عمل and روی بيت های متناظر دو عملوند انجام می شود. هر بيت نتيجه در صورتی يک است که بيت های متناظر هر دو عملوند يک باشند در غير اينصورت صفر می شود.

A
B
A and B
111
100
010
000

دستورالعمل and به شکل های زير می تواند بکار برود:

and register, register
and memory, register
and register, memory
and register, immediate data
and memory, immediate data
and /AL, immediate data

دستورالعمل and روی فلگ های زير تاثير می گذارد:

• فلگ carry و overflow را صفر می کند.
• فلگ های zero، sign و parity با توجه به نتيجه تاثير می پذيرند.

فلگ zero وقتي دو عملوند در هيچ مکانی بيت مشابه نداشته باشند يک می شود.


مثال

mov AX, C123h
and AX, 82F6h

AND Example


دستورالعمل and برای محاسبه سريع باقيمانده يک عدد بر توانی از 2 می تواند استفاده شود. برای پيدا کردن باقيمانده عملوندی بر مقدار 2n کافيست and عملوند با مقدار 2n-1 محاسبه شود.


مثال. دستور زير باقيمانده بر عدد 8 را محاسبه می کند.

and AX, 7


OR

دستورالعمل or عمل or منطقی را روی عملوندهای خود انجام می دهد. فرم کلی آن به صورت زير است:

or dest, src

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

A
B
A or B
111
101
011
000

دستورالعمل or مشابه عمل and روی فلگ های Carry، Zero، Sign، Overflow و Parity تاثير می گذارد. فلگ zero وقتی يک می شود که هردو عملوند صفر باشند.

عملوندهای دستورالعمل or مشابه دستورالعمل and می تواند ثبات، حافظه يا داده فوری باشد.


مثال.

mov AX, C123h
or AX, E831h

OR Example


XOR

دستورالعمل xor عمل xor منطقی را روی بيت های دو عملوند خود انجام می دهد و نتيجه را در عملوند اول ذخيره می کند. فرم کلی آن به صورت زير است:

xor dest, src

هر بيت نتيجه دستورالعمل xor مطابق جدول زير تنظيم می شد. بيت نتيجه زمانی صفر است که هردو بيت عملوند مشابه هم باشند درغير اينصورت يک می شود.

A
B
A xor B
110
101
011
000

دستورالعمل xor مشابه عمل and روی فلگ ها تاثير می گذارد. اگر هردو عملوند دستورالعمل مساوی باشند نتيجه صفر می شود و در نتيجه فلگ zero يک می شود.

برای صفر کردن ثبات ها می توان از دستورالعمل xor register, register استفاده کرد که کوتاهتر از دستورالعمل mov register,0 است.


مثال.

mov AX, C123h
xor AX, E831h

XOR Example


NOT

دستورالعمل not مکمل يک عملوند خود را محاسبه و در آن ذخيره می کند. فرم کلي آن به صورت زير است:

not dest

دستورالعمل not بيت های عملوند را عکس می کند؛ صفرها را به يک و يک ها را به صفر تبديل می نمايد.

دستورالعمل not به يکی از دو حالت زير می تواند استفاده شود:

not register
not memory

دستورالعمل not روی هيچکدام از فلگ ها تاثير ندارد.


مثال.

mov AX, C123h
not

NOT Example


TEST

دستورالعمل test مشابه and است و عمل and منطقی را روی دو عملوند خود انجام می دهد با اين تفاوت که نتيجه را جائی ذخيره نمی کند.

test dest, src

فلگ های Carry، Zero، Sign، Overflow و Parity مشابه دستورالعمل and تاثير می پذيرند.

دستورالعمل test برای بررسی يک بودن بيتی می تواند استفاده شود.


مثال. دستور زير مقدار 1 را با ثبات AL به طور منطقی and می کند. اگر بيت شماره 0 ثبات AL صفر باشد نتيجه دستور صفر شده و فلگ zero برابر با يک می شود در غير اينصورت فلگ zero صفر می شود. بررسی فلگ zero بعد از اين اجرای دستور نشان می دهد که بيت صفر ثبات AL يک بوده است يا خير.

test AL, 1

مثال. دستور زيرا برای بررسی بيت های 0، 2 و 8 ثبات DX می تواند استفاده شود. اگر همگی صفر باشند فلگ zero يک می شود.

test DX, 105h


دستکاری بيت ها

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

صفر کردن بيت ها با دستورالعمل AND

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

مثال. درمثال زير بيت شماره 5 ثبات صفر می شود و بقيه بيت ها بدون تغيير باقی می مانند.

mov AX, C123h
and AX, FFDFh

يک کردن بيت ها با دستورالعمل OR

دستورالعمل or را می توانيد برای يک کردن بيت های انتخابی يک عدد بکار ببريد.

مثال. درمثال زير بيت شماره 3 ثبات يک می شود و بقيه بيت ها بدون تغيير باقی می مانند.

mov AX, C123h
or AX, 8

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