پردازنده های 8086 دارای گذرگاه 20 بيتی هستند، بنابراين Ù…ÛŒ تواند تا 1 مگابايت ØاÙظه را آدرس دهد(از آدرس 00000 تا 1MB=1048575=FFFFF). اين آدرس ها به ÙŠÚ© عدد 20 بيتی اØتياج دارند. روشن است Ú©Ù‡ ÙŠÚ© عدد 20 بيتی را نمی توان در ثبات های 16 بيتی 8086 جا داد. اينتل اين مشکل را با آدرس دهی سگمنتی (segment addressing) ØÙ„ کرد. سگمنت ÙŠÚ© تکه از ØاÙظه با اندازه 64 کيلوبايت است. ÙŠÚ© Ù…ØÙ„ از ØاÙظه با ÙŠÚ© آدرس سگمنت Ùˆ ÙŠÚ© Ø¢Ùست (offset) مشخص Ù…ÛŒ شود Ú©Ù‡ به صورت دو عدد 16 بيتی نشان داده Ù…ÛŒ شوند. آدرس سگمنت به سگمنتی در ØاÙظه اشاره Ù…ÛŒ کند Ú©Ù‡ Øاوی Ù…ØÙ„ مورد نظر است. هر سگمنت از ÙŠÚ© پاراگرا٠می تواند شروع شود. هر پاراگرا٠16 بايـت دارد، بنابراين سگمنت از آدرسی Ú©Ù‡ مضربی از 16 است شروع Ù…ÛŒ شود. يعنی سگمنت اول از آدرس 00000ØŒ سگمنت دوم از آدرس 00010ØŒ بعدی از آدرس 00020 Ùˆ الی آخر شروع Ù…ÛŒ شود. در نتيجه آدرس شروع هر سگمنت از سمت راست به صÙر ختم Ù…ÛŒ شود Ú©Ù‡ از آن صرÙنظر Ù…ÛŒ شود. بنابراين آدرس سگمنت هميشه به صورت ÙŠÚ© عدد 4 رقمی هگز نوشته Ù…ÛŒ شود.
Ø¢Ùست Ùاصله بايت مورد نظر از ابتدای سگمنت را مشخص Ù…ÛŒ کند. با توجه به اينکه هر سگمنت 64KB ØاÙظه دارد، Ø¢Ùست Ù…ÛŒ تواند بين 0000 تا ffff باشد. بنابراين Ø¢Ùست نيز هميشه ÙŠÚ© عدد 4 رقمی هگز است.
آدرس سگمنتی به صورت Ø¢Ùست:سگمنت نوشته Ù…ÛŒ شود.
مثال 1. آدرس Ùيزيکی 18A3:5B27 به بايتی در سگمنت 18A30 اشاره دارد Ú©Ù‡ از ابتدای اين سگمنت 5B27 بايت Ùاصله دارد.
مثال 2. آدرس Ùيزيکی 04808 Ù…ÛŒ تواند توسط 047C:0048 رجوع شود.
آدرس های سگمنت-Ø¢Ùست ÙŠÚ© آدرس منطقی را تعيين Ù…ÛŒ کنند. برای ساختن آدرس Ùيزيکی 20 بيتی طبق Ùرمول زير Ù…Øتوای آدرس سگمنت را در 16 ضرب کرده با آدرس Ø¢Ùست جمع Ù…ÛŒ کنيم:
16× segment + offset
ضرب در 16 آسان است کاÙÛŒ است ÙŠÚ© صÙر در سمت راست عدد گذاشته شود.
مثال 3. آدرس Ùيزيکی رجوع شده توسط 047C:0048 برابر است با:
047C0+0048=04808
سگمنت ها روی هم Ù…ÛŒ توانند قرار بگيرند بنابراين ÙŠÚ© بايت، با داشتن آدرس Ùيزيکی منØصر بÙرد در ØاÙظه، Ù…ÛŒ تواند از طريق چندين ترکيب سگمنت:Ø¢Ùست بدست Ù…ÛŒ آيد.
مثال 4. آدرس Ùيزیکی 04808 Ù…ÛŒ تواند توسط 047C:0048ØŒ 047D:0038ØŒ 047E:0028 يا 047B:0058 رجوع شود.
سگمنت های برنامه
سه ناØيه از سگمنت های ØاÙظه Ú©Ù‡ هر ÙŠÚ© Ù…ÛŒ توانند 64KB باشند برای ÙŠÚ© برنامه در نظر گرÙته Ù…ÛŒ شوند:
1. سگمنت کد
• شامل دستورالعمل های زبان ماشين برنامه ای Ú©Ù‡ دارد اجرا Ù…ÛŒ شود. اولين دستور اجرائی برنامه در ابتدای اين سگمنت قرار دارد Ùˆ سيستم عامل CPU را برای اجرای برنامه به اين Ù…ØÙ„ ارجاع Ù…ÛŒ دهد.
2. سگمنت داده
• شامل داده های تعري٠شده Ùˆ ناØيه کاری Ú©Ù‡ برنامه نياز دارد.
3. سگمنت پشته
• شامل آدرس های برگشتی از زيربرنامه ها Ùˆ داده های Ù…ØÙ„ÛŒ است .
نکته 1. برنامه Ùˆ داده در هر سگمنتی از ØاÙظه Ù…ÛŒ توانند قرار گيرند، Ùقط آدرس شروع سگمنت بايد برای CPU تعري٠شده باشد. اين آدرس ها در ثبات های سگمنت ذخيره Ù…ÛŒ شوند Ùˆ اغلب درطول اجرای برنامه ثابت باقی Ù…ÛŒ مانند. در عمل هنگام برنامه نويسی تنها از آدرس 4 رقمی Ø¢Ùست استÙاده Ù…ÛŒ شود.
نکته 2. سگمنت ها Ù…ÛŒ توانند روی همديگر بياÙتند. در بعضی مواقع Ú©Ù‡ برنامه کوتاه است سگمنت داده Ù…ÛŒ تواند از داخل سگمنت کد شروع شود به شرط اينکه تداخل رخ ندهد.
بوک مارک ها