مقاله آموزش-اسمبلي-115-ص (docx) 122 صفحه
دسته بندی : تحقیق
نوع فایل : Word (.docx) ( قابل ویرایش و آماده پرینت )
تعداد صفحات: 122 صفحه
قسمتی از متن Word (.docx) :
آموزش اسمبلي
براي ياد گرفتن اسمبلي بايد با مبناهاي عدد نويسي ، ساختمان داخلي كامپيوتر و برنامه نويسي آشنا باشيم . ما برنامه هايمان را مستقيما با اسمبلر Macro Assembler خواهيم نوشت و گاها از Debugاستفاده خواهيم كرد . بعلاوه چون برنامه هاي حجيم نخواهيم نوشت قالب اكثر رنامه هاي ما COM. خواهد بود . براي شروع ابتدا نگاهي به حافظه ميكنيم : حافظه و آدرس دهي هر كامپيوتر مبتني بر 8086 داراي حداقل 640 كيلوبايت حافظه است . اين 640 كيلوبايت به قطعات 64 كيلوبايتي تقسيم شده و ما اين قطعات را "قطعه " يا Segmentميناميم . هر سگمنت هم به خانه هاي تك بايتي ديگري تقسيم شده است . براي بدست آوردن مقدار يك بايت مشخص از حافظه ما بايد عد مربوط به سگمنت و همچنين شماره آن بايت در سگمنت ( كه آفست Offset ناميده ميشود ) را بدانيم . مثلا اگر مقدار مورد نظر در قطعه 0030h(h( يعني عدد در مبناي 16 است ) و آفست 13C4hباشد ما بايد قطعه اي كه شماره آن 0030h است را بيابيم و بعد در همان قطعه مقدار باين شماره 13C4 را بخوانيم . براي نمايش اين حالت بين عدد سگمنت و آفست علامت (:) قرار ميدهيم . يعني ابتدا عدد مربوط به قطعه را نوشته و سپس عدد آفست را مي آوريم : Segment:Offset مثال : 4D2F:َ9000 **هميشه در آدرس دهي ها از اعداد مبناي 16 استفاده ميكنيم . | | | | CConvertional | 1 Segment=64K | | | | | Memory | | | | | | | | | | | | | | ثباتها Registers رجيسترها مكان هائي از CPU هستند كه براي نگهداري داده ها (DATA) و كنترل اجراي برنامه بكار ميروند . ما ميتوانيم آنها را مقدار دهي كرده و يا بخوانيم و يا باتغيير محتواي آنها CPU را مجبور به انجام يك پروسه (رويه يا Procedure) كنيم دسته اي از رجيسترها كه ما انها را "ثباتهاي همه كاره يا همه منظوره " ميخوانيم و شامل AX/BX/CX/DX هستند ، براي انتقال مقادير بين رجيستر ها و CPU بكار ميروند.اين ثباتها را ميتوانيم به هر نحوي تغيير دهيم و مقاديري را به آنهاارسال كنيم . ثباتهاي ديگري هم كه نام ميبريم كاربردهاي خاص خودشان را دارند و براي مقدار دهي آنها بايد قواعد خاصي (كه توضيح خواهيم داد) را بكار بريم . ميكند عدد كه در اين ثبات وجود دارد شماره يك قطعه است و CPU براي يافتن DS : مخفف Data Segment . محل نگهداري متغييرها و ثابتهاي برنامه را مشخص مقادير لازم به آن قطعه مراجعه ميكند . CS: مخفف Code Segment است و آدرس قطعه اي كه برنامه در آن قرار گرفته را نشان ميدهد . ES: اين يك ثبات كمكي است و معمولا در آدرس دهي ها شماره قطعه را نگهداري ميكند . DIDataIndex:Dبا DS/ESا مرتبط است و عدد آفست را نگهداري ميكند . IP: اين رجيستر معلوم ميكند كه برنامه در حال اجرائي كه در CS قرار دارد از كدام بايت قطقه (يعني كدام آفست ) شروع ميشود . به همين دليل هميشه اين دو ثبات را با هم و بصورت CS:IP نشان ميدهند. و ... تمام رجيسترهاي فوق 16 بيتي (دوبايتي ) هستند و اعداد دوبايتي را نگهداري ميكنند. ثباتهاي همه منظوره به دو نيم ثبات تك بايتي تقسيم ميشوند . بايت بالائي ب نماد H و بايت پائيني با نماد L نشان داده ميشود . مثلا ثبات AX داراي دو نيم - ثبات AH/AL است : | AH - 8 Bit | AL -8 Bit | تمرين : براي ديدن رجيسترها در DOS، DEBUG، را اجرا كنيد و فرمان R را صادر كنيد : D:\MASM>DEBUG-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=17AA ES=17AA SS=17AA CS=17AA IP=0100 NV UP EI PL NZ NA PO NC17AA:0100 0F