View Full Version : آفست و سگمنت برای ...
_hosseini_
یک شنبه 25 آذر 1386, 22:31 عصر
با سلام
برای اولین سئوال در اسمبلی ، من قدری راجع به سگمنت ها و آفست می خواستم بدونم . سگمنت ها آیا در ( 8088) در واقع قطعه های 64k حافظه هستند ؟ نحوه قرار گرفتن آنها چه جوری است ؟ همچنین در مورد آفست ؟ ( نه به صورت تعریف بلکه به صورت واقعی می خواستم بدونم )
ممنون میشم یه توضیح جامعی در این مورد بدید؟
با تشکر از لطف شما
Delphi Coder
دوشنبه 26 آذر 1386, 03:13 صبح
به صورت واقعی نمیدونم منظورتون چیه. RAM رو کاملا FLAT تو ذهنتون مجسم کنید از اولین خانه تا آخرین خانه ای که با این روش میشه آدرس دهی کردیعنی 65535*16+65535 حالا Segment رو میشه یه واحد 16 بایتی حساب کرد یعنی بگیم هر 16 خانه حافظه یک Segment هست(دقیقا مثل اینکه میگیم هر هزار گرم یک کیلو هست). حالا از اینور شاید بگید پس چرا Offset های بزرکتر از 16 هم داریم جواب خیلی سادس چون می تونیم داشته باشیم هم Segment و هم Offset عددهای 16 بیتی هستند پس میتونن مقادیر 0-65535 رو داشته باشن. طبیعی هست که هر 16 تا که به Offset اضافه میشه قدم به محدوده Segment بعدی میذاریم ولی مشکلی نداره همونطور که اگه به جای 5 کیلو و 500 گرم بگیم 1 کیلو و 4500 گرم مشگلی نداره اینجا هم میتونیم بگیم 0:34 = 1:18 = 2:2
_hosseini_
دوشنبه 26 آذر 1386, 10:15 صبح
با اتشکر از پاسخ تان ،
ببین ما چند تا ثبات سگمنت داریم ( سگمنت داده و ... ) ، از طرفی وقتی آدرس یک اطلاعاتی را می خواهیم بنویسیم به صورت آفست : سگمنت می نویسیم . حال فرض کنیم به قول شما اگه فرض کنیم هر واحد سگمنت ، 16 بیت است ، پس آفست کجا قرار دارد . من دقیقا می خواستم بگم محل آفست کجاست ، آیا داخل خود سگمنت است یا ... . یا چیز خاصی نیست و فقط آدرس جابجایی یگ سگمنت را نسبت آدرس اولین سگمنت حساب می کنند .
ضمنا می خواستم بدونم سگمنت ها ( از نظر نحوه قرار گرفتن ) روی هم قرار میگیرند یا به صورت خطی هستند .
من چون اسمبلی را خودم دارم شروع می کنم ، این سئوالات را میکنم و اگه کمی ابتدایی است ، عذر می خوام .
ممنون از پاسخ تان
Delphi Coder
دوشنبه 26 آذر 1386, 14:03 عصر
به قول شما اگه فرض کنیم هر واحد سگمنت ، 16 بیت است ، پس آفست کجا قرار دارد .
بیت نه بایت.
اگه افست رو نداشته باشید فقط ضرایب 16 رو می تونید نشون بدید. فرض کنید می خواید آدرس پنجاهمین بایت از memory رو به صورت seg:ofs نشون بدین که میشه افست 3یعنی 3*16 بایت به اضافه 2 یعنی افست 2
3:2
ضمنا می خواستم بدونم سگمنت ها ( از نظر نحوه قرار گرفتن ) روی هم قرار میگیرند یا به صورت خطی هستند .
روی هم overlap دارن.
برای درک بهتر میتونید یه جور دیگه هم تو ذهنتون مجسم کنید. میتونید طول هر سگمنت رو 65536 بایت (یعنی Max مقداری که offset میتونه داشته باشه) فرض کنید که با شروع از افستهایی که ضرایب 16 هستند سگمنتهای بعدی شروع میشن.
من چون اسمبلی را خودم دارم شروع می کنم ، این سئوالات را میکنم و اگه کمی ابتدایی است ، عذر می خوام .
خواهش میکنم. هدف اگه یادگیری باشه چه من و چه سایر دوستان واقعا خوشحال میشیم کمکتون کنیم.
_hosseini_
دوشنبه 26 آذر 1386, 19:56 عصر
دلفی عزیز ، از پاسخ شما ممنون ، اما بالاخره نگفتید ، آفست چیه ، اگه میشه قدری راجع به خود آفست توضیح بدین ممنون میشم . آیا همان جابجایی سگمنت ها نسبت به سگمنت اول هست ؟
ممنون
Delphi Coder
سه شنبه 27 آذر 1386, 01:14 صبح
آیا همان جابجایی سگمنت ها نسبت به سگمنت اول هست ؟
نه جابجایی نسبت به شروع سگمنت. مثال وزن مثال خوبی بود اگه دقت کرده باشین افست همون گرم هست تو این مثال.:::::::::::::: 1 کیلو و 2750 گرم یا 3 کیلو و 750 گرم.
در ضمن این مسئله رو هم تو ذهنتون داشته باشید که کل این صحبتها مال RealMode 8086 هست و در Protected Mode قضیه فرق می کنه.
ICEMAN
سه شنبه 27 آذر 1386, 08:22 صبح
سلام ...
http://kaajeesabz.blogfa.com/post-28.aspx
اینجا یه توضیح خوبی داده امید وارم مفید باشه
_hosseini_
سه شنبه 27 آذر 1386, 17:14 عصر
از همگی دوستان به خاطر راهنمایی شان بسیار ممنون و سپاسگزارم ، فقط به عنوان آخرین سئوال ، آدرسی که برای آفست در مبنای 16 در نظر می گیریم ، در کجا ذخیره می شود ؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.