close
دانلود فیلم
کد

آموزش c++

 

در این مطلب  قراره در مورد یکی از زبان های اصلی برنامه نویسی صحبت کنیم. البته سعی میشه به زبان ساده تر گفته بشه که به راحتی قابل فهم باشه.همه ما میدونیم c++ زبان شی گرا یا به اصطلاح object-oriented هست.خب این یه فرق اساسی با زبان c بود ولی چرا نیاز بود که یک زبان برنامه نویسی شی گرا بشه ؟ یا شی گرایی چیه؟زبان c++ شی گراست یعنی در اون اگه میخوایم مثلاٌ درباره یه دستگیره در (!) کد بنویسیم، کاربر استفاده کننده از برنامه ما نباید از مکانیسم داخلی این دستگیره چیزی بفهمه ؛اینکه به طور مثال یه میله داخل یه حلقه باید بچرخه یا چیزای دیگه و طبیعتاٌ وقتی که اندازه این میله هم تغییر کنه و کوچیک و بزرگ شه هم کاربر از وجود اونمطلع نمیشه.

ادامه مطلب...

هدف : از این تابع برای نوشتن متن مورد نظر بدون استفاده از Label بر روی زمینه فرم استفاده می شود .

فراخو انی در دلفی : این تابع در Unit - Windows در دلفی تعریف شده است.

مثال درادامه مطلب

ادامه مطلب...

برای افزايش اندازه يک مقدار به کلمه يا کلمه مضاعف، با حفظ علامت، از دستورات گسترش استفاده می شود. دستورات گسترش بيت علامت ثبات انباشتگر(AL/AX) را بسط می دهند.

CBW
CWD


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


CBW

دستور (convert byte to word) cbw محتوای بيت شماره هفت ثبات AL را در AX بسط می دهد. يعنی بيت شماره هفت ثبات AL را در کليه بيت های ثبات AH کپی می کند. درنتيجه مقدار رياضی بايت AL به يک کلمهAX گسترش پيدا می کند.

دستور هيچ عملوندی ندارد:

cbw

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

دستور cbw در محاسبه تقسيم يک بايتی کاربرد دارد.


CWD

دستور (convert word to double word) cwd محتوای بيت شماره پانزده ثبات AX را در کليه بيت های ثبات DX کپی می کند. درنتيجه مقدار رياضی AX به يک کلمه مضاعف در DX:AX گسترش پيدا می کند.

دستور هيچ عملوندی ندارد:

cwd

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

دستور cbw در عمليات تقسيم دوبايتی نقش بازی می کند.


مثال. برای گسترش مقدار 8 بيتی AL به يک مقدار 32 بيتی در DX:AX دو دستور پشت سر هم نوشته می شوند.

mov AL,85h
cbw
cwd

چون بيت علامت عدد 85h يک است تبديل به عدد FFFFFF85h می شود که 16بيت پايين آن در ثبات AX و 16بيت بالای آن در ثبات DX قرار می گيرد. يعنی AX=FF85h و DX=FFFFh می شود.

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

MOV
XCHG
LEA


MOV

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

mov Dest, Source

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

دستور mov مشابه دستور انتساب در زبان های سطح بالا است ( Dest := Source; در زبان Pascal يا Dest=Source; در زبان C).

با توجه به نوع عملوندها، انواع مختلفی از دستورالعمل mov را می توان داشت. متداولترین آنها عبارتند از:

mov register, register
mov memory, register
mov register, memory
mov memory, immediate data
mov register, immediate data
mov AX/AL, memory
mov memory, AX/AL
mov segment register, memory 16
mov segment register, register 16
mov register 16, segment register
mov memory 16, segment register

چند موضوع مهم درباره دستور mov را باید همواره بخاطر داشت:

1. انتقال حافظه به حافظه وجود ندارد. يعنی هردو عملوند همزمان نمی توانند عملوند حافظه ای باشند.
2. عملوندها می تواند از نوع بايت يا کلمه باشند. اما هردو عملوند حتما بايد هم اندازه باشند (برای مثال دستور mov AX,BL اشتباه است). اين برای عملوند های حافظه و ثبات هم باید رعایت شود (اگر متغيری را يک بايتی تعريف کنيد و آنرا در ثبات AX منتقل کنيد اسمبلر پيغام خطا صادر می کند).
3. با اين دستور نمی توان يک داده فوری را در يک ثبات سگمنت منتقل کرد.
4. هر دو عملوند نمی توانند ثبات سگمنت باشند.
5. گونه هائی از دستور mov سريع تر و کوتاهتراز بقيه هستند. برای مثال هر دو دستور mov ax, mem و mov reg, mem داده ای را از حافظه به ثبات کپی می کنند اما دستورالعمل اول کوتاهتر و سريع تر از دومی است.
6. می توان يک مقدار فوری را در يک محل حافظه منتقل کرد. در اين حالت داده فوری به اندازه عملوند مقصد گسترش داده می شود (مگراينکه بزرگتر از مقصد باشد که خطا صادر می شود). البته اسمبلر نمی تواند اندازه عملوند حافظه را تعيين کند مگر اينکه عملوند حافظه ای به صورت يک متغير در برنامه اعلان شده باشد. برای حل اين مشکل از عملگر های byte ptr و word ptr برای تعيين اندازه عملوند حافظه ای می توان استفاده کرد.


مثال. دستور زيرداده فوری 10h را به اندازه يک کلمه گسترش داده و در محلی که BX به آن اشاره می کند ذخيره می کند.

mov word ptr [bx], 10h

مثال. دستورات زير داده فوری 40h را در ثبات سگمنت ES ذخيره می کند. ثبات AX به عنوان واسطه بکار رفته است. هر کدام از ثبات همه منظوره را می توان به جای AX بکار برد.

mov AX, 40h
mov ES, AX


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


XCHG

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

xchg Operand1, Operand2

مقدار هردو عملوند در اثر اجرا تغيير می کند.

چهار شکل خاص برای اين دستور وجوددارد:

xchg register, memory
xchg register, register
xchg ax, register16

ترتيب علموندها اهمیت ندارد. می توانید xchg mem,reg یا xchg reg,mem را بنویسید نتیجه فرقی ندارد. اکثر اسمبلرها بطور خودکار کد کوتاهتر را انتخاب می کنند.

هردو عملوند باید یک اندازه باشند.

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


LEA

دستورالعمل (load effective address) lea برای مقداردهی اشاره گرها استفاده می شود. فرم خاص آن به صورت زیر است:

lea register16, memory

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


مثال. دستور زير مقدار 1234h را در ثبات AX قرار می دهد.

lea AX, DS:[1234h]


دستور mov ax, immediate data هم همین عمل را انجام می دهد. تفاوت آنها در اين است که دستورالعمل lea محاسبه آدرسی و انتقال داده را همزمان انجام می دهد.


مثال. دستور زير آدرس حاصل از محاسبه BP+SI+4 را درثبات AX قرار می دهد. ابتدا مقادير را بهم جمع کرده سپس در ثبات منتقل می کند.

lea bx, 4[bp+si]


دستورالعمل lea روی فلگ ها تاثير ندارد.

کليه کامپيوترهای شخصی IBM پردازنده ای از خانواده 80×86 دارند. پردازند های اين خانواده همگی دارای ويژگي های مشترکی ازجمله زبان ماشين پايه يکسان هستند. البته اعضای جديد ويژگي های خود را به ميزان زيادی افزايش داده اند.

تعدادی از پردازنده های اين خانواده بدين شرح می باشند:

(1979)8088,(1978)8086
• اين CPU ها، که از ديدگاه برنامه نويسی برابر هستند، پردازنده هائی بودند که روی اولين کامپيوترهای شخصی به کار رفته اند. دارای ثبات های 16 بيتی (AX، BX، CX، DX، SI، DI، BP، SP، CS، DS، SS، ES، IP و FLAGS ) هستند و تنها در مد حقيقی عمل می کردند. 8086 دارای گذرگاه داده 16 بيتی و گذرگاه آدرس 20 بيتی بود و بنا براين قابليت آدرس دهی تا 1 مگابايت حافظه را داشت و می توانست با داده های 8 يا 16 بيتی همزمان کار کند. 8088 با گذرگاه داده 8 بيتی به طراحان اجازه پيچيدگی کمتر و ارزانتر سيستم های کامپيوتری را می داد.
(1983)80286
• اين پردازنده، که در کامپيوترهای شخصی کلاس AT استفاده شد، دستورالعمل های جديدی را به زبان ماشين 8086/88 اضافه کرد. اما ويژگی اصلی آن مد محافظت شده 16 بيتی بود که در اين حالت می توانست تا 16 مگابايت حافظه را دسترسی پيدا کند. البته برنامه ها همچنان به سگمنت هائی تقسيم بندی می شدند که نمی توانستند بيشتر از 64K باشند.
(1986)80386
• اولين پردازنده 32 بيتی که توسط اينتل معرفی شد 80386 DX بود که علاوه بر حفظ سازگاری با پردازنده های قبلی اجرای عالی داشت. اين پردازنده چند ثبات را به 32 بيتی گسترش داد (EAX, EBX, ECX, EDX, ESI, EDI, EBP,ESP, EIP) و دو ثبات جديد 16 بيتی FS و GS را اضافه کرد. دارای گذرگاه های آدرس 32 بيتی بود و در مد محافظت شده 32 بيتی می توانست تا 4 گيگابايت حافظه فيزيکی را آدرس دهی کند. برنامه ها دوباره به سگمنت ها تقسيم می شدند اما اندازه هر سگمنت می توانست تا 4 گيگا بايت باشد. نسخه 16 بيتی آن 80386 SX با گذرگاه آدرس 24 و داده 16 بيتی در 1988 بيرون آمد که تنها تا 16 مگابايت را دسترسی داشت.
(1989)80486
• 80486 DX دارای حافظه نهان و کمک پردازنده رياضی در يک تراشه بود که حدود 50% سريع تر از 80386 بود. 80486 SX را هم معرفی شد که تنها پيوند آن با ميکروپروسسور رياضی وجود نداشت.
( 1993)Pentium/Pentium Pro
• پردازنده های 64 بيتی پنتيوم، که چند دستورالعمل را در يک زمان اجرا می کند، سرعت اجرای دستورالعمل ها را بالابردند. اين پردازنده ها دارای گذرگاه داده 64بيتی و گذرگاه آدرس 32 بيتی هستند. پنتيوم از نظر کارائی دوبار سريع تر از 80486 است و عمليات مميزشناور را سريع تر انجام می دهد درعين حال که کاملا با قبلی ها سازگاری دارد.
Pentium MMX
• اين پردازنده دستورات MMX (MultiMedia eXtensions) را به پنتيوم اضافه کرد. اين دستورالعمل ها می توانند عمليات گرافيکی معمول را سرعت ببخشند.
(1997)Pentium II
• اين پردازنده توسعه يافته پنتيوم است که قادر است 4 پردازنده را همزمان پشتيبانی کند و به 64 گيگابايت حافظه دسترسی دارد. درواقع يک پردازنده پنتيوم پرو همراه با دستورالعمل های MMX است.
(1999)Pentium III/(2002)Pentium IV
• اين پردازنده ها تنها سرعت اجرای دستورالعمل ها را بالا بردند.
 

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