جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'اسمبلی،آموزش اسمبلی،زبان اسمبلی'.
1 نتیجه پیدا شد
-
به نام خدا براي ياد گرفتن اسمبلي بايد با مبناهاي عدد نويسي ، ساختمان داخلي كامپيوترو برنامه نويسي آشنا باشيم . براي شروع ابتدا نگاهي به حافظه ميكنيم : حافظه و آدرس دهي هر كامپيوتر مبتني بر8086 داراي حداقل640 كيلوبايت حافظه است . اين 640 كيلوبايت به قطعات 64 كيلوبايتي تقسيم شده و ما اين قطعات را "قطعه " يا Segment ميناميم . هر سگمنت هم به خانه هاي تك بايتي ديگري تقسيم شده است. براي بدست آوردن مقدار يك بايت مشخص از حافظه ما بايد عدد مربوط به سگمنت وهمچنين شماره آن بايت در سگمنت ( كه آفست ناميده ميشود) را بدانيم . Offset يعني يك آدرس در مبناي 16 كه 16 بيتي است و( يا در حالت win32 يك عدد 32 بيتي مي باشد. ) و مثلا اگر مقدار مورد نظر در قطعه 0030h باشد و افست آن 13C4h باشد ما بايد قطعه اي كه شماره آن 0030h است را بيابيم و بعد در همان قطعه افست 134C را بدست آوريم . براي نمايش اين حالت بين عدد سگمنت و آفست علامت ( : ) قرار ميدهيم . يعني 0030:134C در حالت داس و 0030:0000134C در حالت ويندوز. Segment:Offset ** هميشه در آدرس دهي ها از اعداد مبناي 16 استفاده ميكنم . Registers ثباتها رجيسترها مكان هائي ازCPU هستند كه براي نگهداري داده ها (DATA) و كنترل اجراي برنامه بكار ميروند . ما ميتوانيم آنها را مقدار دهي كرده و يا بخوانيم و يا باتغيير محتواي آنهاCPU را مجبور به انجام يك پروسه (رويه ياProcedure ) كنيم . دسته اي از رجيسترها كه ما آنها را "ثباتهاي همه كاره يا همه منظوره " ميخوانيم و شامل ax,bx,cd,dx هستند در حالت داس ( حالت 2 بايتي ) ودر حالت ويندوز eax,ebx,ecx,edx ( بصورت 4 بايتي) ، براي انتقال مقادير بين رجيستر ها وCPU بكار ميروند. در حالت ويندوز ثباتهاي معروف ديگر( كه هر كدام قانون خاصي دارد ) عبارتند از : EIP اين ثبات مقدار شماره خط در حال اجرا نمايش مي دهد. ESP قبل از توضيح اين ثبات بايد در باره پشته صحبت كنيم . پشته يا Stack (نميدونم درست نوشتمش يا نه ) محلي است كه برنامه مقادير ذخيره شده ثباتهاي ديگر را در آن قرار مي دهد . قانوني پشته در اين است كه هر چيز كه اول وارد آن گردد آخر سر خارج مي شود.The 1st input is the last one come out خوب معلوم است كه اين ثبات شماره پشته را در خود نگه مي دارد. براي روشن تر شدن قضيه و چگونه استفاده از پشته يه مثال ميزنم . فرض كنيم يك MsgBox بايد نمايش داده شود . در اين حالت مكان يا آدرس جايي كه رشته مورد نمايش در حاقظه قرار دارد در ثباتي مثل Eax قرار داده مي شود يعني 1- Mov eax,00450F1C eax آدرس رشته مورد نظر در خودش قرار ميده حالا اين ادرس ذخيره ميشه : 2-Push eax در پشته قرار دادن اين آدرس متغير رو صفر ميكنه : Xor eax,eax صفر كردن متغير يا ثبات براي فرا خواني تابع صدا زدن تابع : [jmp dword ptr [004121F0 برنامه به محلي كه رويه Messageboxa توسط برنامه مورد مثال فرا خواني مي شود ارسال مي گردد. ( دستوارت بعدا توضيح داده مي شود). همانطور كه ديده ميشه براي انتقال متغير به تابع سه راه حل وجود داره استفاده از ثباتها ويا تركيبي از اونها استفاده از پشته استفاده هم از پشته هم از ثباتها توي مثال بالا هم از از پشته هم از eax استفاده شد ثبات( EDI (Data Index اين ثبات براي نگه داري اطلاعات مورد نظر برنامه استفاده مي شود. تقريبا مثل ثبات همه كاره ثبات(ESI(Segment Index همانند EDI ثباتهاي همه منظوره به دو نيم ثبات تك بايتي تقسيم ميشوند . بايت بالائي با نمادH و بايت پائيني با نمادL نشان داده ميشود . مثلا ثبات AX داراي دو نيم- ثبات AH,AL است . در داس: اگر AX را بصورت ABCD نمايش دهيم CD درAl و AB درAh قرار مي گيرد حال اگر مقدار 1234h (h نمايينده قرار گرفتن در مد Hex مي باشد) درAX قرار داده شود ( هنگامي كه از حافظه برنامه مقدار دهي شود .) مقدار 12 درAl و مقدار 34 درAh قرار مي گيرد.(Eax=3412) در حالت ويندوز اين حالت بر قرار است اماEax=XXXXABCD AB معرف Ah وCD معرف Al مي باشد. در درس بعدي اعداد پايه 16 تايي و 8 تايي و 10 تاي و چند دستور آموزش داده مي شود. منبع:[Hidden Content]