|
سگمنت :
به
هر قطعه 64 کيلو بايتي از حافظه اصلي که داراي آدرس شروع معيني باشد يک
سگمنت مي گويند.
هر
سگمنت با آدرس شروع آن مشخص مي شود. تمام بايت هاي واقع در يک قطعه را مي
توان با يک ثبات دوبايتي آدرس دهي کرد.
با
اين ترفند آدرس هر بايت از حافظه اصلي با دو عدد قابل بيان است يک عدد براي
ذخيره کردن آدرس شروع سگمنت و عدد ديگر براي ذخيره کردن فاصله بايت مورد نظر
از ابتداي سگمنت آن.
به
عدد اول مي گويند سگمنت SEGMENT
به
عدد دوم مي گويند آفست OFFSET
کلاً
در دو ثبات آدرس دهي مي شوند. Segment:offset
نتيجه
مي گيريم که آدرس شروع هر سگمنت در حافظه اصلي با گذاشتن يک صفر در سمت راست
شماره سگمنت بدست مي آيد.
نقشه
يک مگا بايتي اول حافظه اصلي:
1
مگابايت 2 بتوان 6 بايت يعني 20 بيت مي باشد.
در
برنامه هايي که زياد بزرگ نيستند اکثر آدرس ها ، متوجه آدرس هاي داخل
سگمنت اصلي است و آدرس کمي به خارج از سگمنت به خارج اشاره مي کند بنابراين
، اکثر آدرس دهي ها را با يک ثبات 16 بيتي ، مي توان انجام داد ، در نتيجه ،
سرعت اجراي برنامه بالا ميرود و حجم فايل اجرايي کوچک تر مي شود براي آنکه
آدرس دهي ها به بهترين نحو براي برنامه انجام شود معمولاًبرنامه ها را ، در
چند سگمنت قرار مي دهند.
برنامه
اجرايي :
کد
دستورالعمل ها : سگمنت کد
محل
ذخيره شدن داده ها سگمنت داده و سگمنت داده اضافي
پشته stack : سگمنت پشته
توضيح
: چون اکثر برنامه ها در يک سگمنت از حافظه نمي توانند اجرا شوند و نياز به
حافظه بيشتري دارند قسمتهاي مختلف هر برنامه را در سگمنت هاي جداگانه اي
تعريف مي کنند. مثلاً براي ذخيره کردن کد دستورالعمل ها ، سگمنت کد تعريف مي
شود. براي دخيره سازي دادها دو سگمنت داده و سگمنت داده اضافي تعريف مي شوند
و پشته نيز در سگمنت ويژه اي تعريف مي شود. با اين حساب مشخص کردن براي رجوع
به ادرسهاي دستور العمل ها، داده ها پشته فقط يک رجيستر براي هر کدام کافي
است که اطلاعات آفست را نگهداري مي کند. چون الزاماً بخشهاي کد ، داده و پشته
تمام 64 کيلو بايت ، فضاي يک سگمنت را استفاده نمي کنند مي توان سگمنت ها را
به نحوي تعريف کرد که با هم ، همپوشاني داشته باشند.
با
جداسازي ، بخشهاي مختلف برنامهدر سگمنت هاي جداگانه ، لازم مي ايد ، آدرس هر
سگمنت در ثبات ويژه اي نگهداري شود. براي اين منظور در زير پردازنده چند
ثبات اختصاص داده شده است.

سگمنت کد:
براي ذخيره کردن سگمنت کد از رجيستر CS
سگمنت
داده : براي ذخيره کردن سگمنت داده از رجيستر DS
سگمنت
داده اضافي: براي ذخيره کردن سگمنت داده اضافي از رجيستر ES
سگمنت
پشته : براي ذخيره کردن سگمنت پشته از رجيستر SS
اين
ثبات ها براي ذخيره سازي آدرس هاي سگمنت برنامه استفاده مي شود.
توضيح
: آدرس کامل دستورالعمل در حال اجرا با سگمنت کد ( محتواي ثبات cs ) و افست آدرس دستورالعمل در اين سگمنت مشخص مي شود.
رجيستر
IP : بيانگر
افست دستورالعمل در حال اجرا نسبت به ابتداي، سگمنت کد است بنابراين آدرس
کامل دستورالعمل درحال اجرا CS:IP مي باشد
( آدرس مطلق)
در
هر لحظه مي توان يکي از داده هاي برنامه را مورد رجوع قرار داد. داده مورد
نظر در هر لحظه در سگمنت داده است و افستي نيز نياز دارد تا موقعيت آن آدرس
را نسبت به ابتداي سگمنت داده مشخص کند.
افست
داده مورد نظر در يک ثبات موسوم به DI ذخيره مي شود: افست آدرس داده مورد نظر .
DS:DI
ES:DI آدرس مطلق داده مورد نظر در حافظه
ثبات
ها عبارتند از:
CS: IP اين سگمنت با افست IP کار ميکند.
DS ES DI
SI
ثبات
پرچم : Flag register
ثباتهاي
همه منظوره : AX,BX,CX,DX
CS : ثباتي براي ذخيره کردن قطعه کدهاي دستورالعمل
IP
: ثباتي براي ذخيره کردن افست کد دستورالعمل در حال اجرا
DS : ثباتي براي ذخيره کردن قطعه داده هاي مورد نياز برنامه(
متغيرها)
ES : ثباتي براي ذخيره کردن قطعه داده هاي اضافي مورد نياز
برنامه ( متغير ها)
DI : ثباتي براي ذخيره کردن افست داده مورد نظر
SI
: ثباتي براي ذخيره کردن افست داده مورد نظر
SS : ثباتي براي پشته برنامه
Flag
register : ثباتي براي ذخيره کردن وضعيت (پرچم ها)
ثبات
هاي همه منظوره : AX,BX,CX,DX
پر
استفاده ترين ثبات همه منظوره که نام ديگرش آکومولاتور نام دارد AX مي باشد.
ثبات پرچم :
بيت
هاي پرچم:
1-
پرچم نقلي
: CAMY flag : ايجاد رقم نقلي پس از انجام جمع و تفريق)
2-
پرچم pf ( پرچم
توازن) : نوع توازن را مشخص مي کند ، زوج: pf=1
3-
پرچم AF پرچم
کمکي : در جمع اعداد BCD به ما کمک مي کند.
4-
پرچم ZF : پرچم
صفر : اگر نتيجه محاسبه صفر شود اين پرچم 1 مي شود
5-
پرچم OF : پرچم
سرريز: اگر نتيجه محاسبه در ثبات اختصاصي داده نشده نگنجد اين پرچم 1 مي
شود.
6-
پرچم SF : پرچم
علامت : اگر علامت حاصل يک محاسبه مثبت يا صفر شود اين پرچم صفر مي شود.
7-
پرچم IF
حافظه پشته:
حافظه
اي است که در ان ، در هر مرحله يک واحد اطلاعاتي ذخيره و در هر مرحله از
خواندن يک واحد اطلاعاتي از آن خوانده مي شود و هميشه اولين اطلاعاتي که از
پشته مي توان خواند، آخرين اطلاعاتي است که در ان ذخيره شده است.
ذخيره
اطلاعات در پشته، دستور PUSH و بازيابي اطلاعات POP صورت مي گيرد .
اگرچه
حافظه پشته در RAM واقع مي شود ولي براي داده هاي آن آدرس معين نمي شود.
مراحل
اجراي برنامه اسمبلي :
1
) در اديتور برنامه را مي نويسيم
2)
برنامه را با پسوند OBJ ذخيره مي کنيم
3)
نرم افزار MASM را نصب مي کنيم و برنامه را بصورت EXE اجرا مي
کنيم.
ALI.ASM ذخيره شود سپس MASM ALI اجرا شود.
مورد هاي
آدرس دهي:
از
انجا که قبل و بعد از هر دستورالعمل اطلاعات بين ثبات ها و حافظه رد وبدل مي
شوند، روشهاي مختلف نقل و انتقال داده ها ، بين ثبات ها و حافظه ، تاثير
بسيار مهمي در کارآيي ريزپردازنده مي گذارد. هر ريز پردازنده پشته به اينکه
با چند روش مختلف بتواند تبادل اطلاعات را پوشش دهد. قردت و کارآيي اش تعيين
مي شود. به هر کدام از روشهاي ذکر شده يک مود آدرس مي گويند.
دستور
MOV : دستور
العملي که باعث انتقال اطلاعات از مبدا به مقصد ميشود.
شکل
کلي : مبدا و مقصد MOV
اولين
نوع آدرس دهي :
مود
آدرس دهي بلافاصل :
در
اين نوع مقصد يک ثبات مي باشد و مبدا يک ثبات مي باشد ( ثبات يک بايتي يا دوبايتي)
ثبات
:
مقصد
MOV CX,2393
MOV AX,AE52
نکته : براي اعداد هگزا ديسيمال
که با حروف شروع مي شوند بايد قبل از ان حرف يک صفر قرار بگيرد.

MOV AX,0e52Dh
ثبات ds را نمي توان با اين مور آدرس دهي مقدار دارد( ممنوع است)
هر گونه آدرس روي flag ها بي
اثر است.
2- مود آدرس دهي ثبات :
در مورد جديد مبدا و مقصد هر دو
ثبات هستند باعث انتقال اطلاعات از مبدا به مقصد مي
شود.
Mov AX , BX
MOV BL,CH
3- مود آدرس دهي مستقيم:
مقصد يک ثبات است و مبدا شماره آدرس
حافظه مي باشد يا مقصد شماره آدرس حافظه و مبدا ثبات است.
MOV AL,[2000]
MOV [3000],BH
MOV AX, [4000]
هر عدد که بين براکد ها ( [] ) آورده شود مشخص کننده ي آدرس از حافظه اصلي است. در اين
نوع آدرس دهي ، محتواي آن آدرس به ثبات مربوطه منتقل مي شود يا بالعکس.
MOV [2000],[3000]
اگر براي اين مود آدرس دهي از
يک ثبات دو بايتي استفاده شود بايت پايين تر ثبات متناظر خواهد شد با آدرس
مزبور و بايت ثبات به آدرس بعدي حافظه مرتبط خواهد شد.
MOV AL, 31
Hبلافاصل
MOV
AH, 78بلافاصل
Mov [2000], ALمستقيم
MOV CH,ALثبات
مود آدرس دهي مستقيم مانند
مقدار دادن به يک متغير است.
بعد از اجراي دستورات بالا
محتواي ثبات CX ، چه عدد هگزا ديسيمال خواهد .
مود آدرس دهي غير مستقيم از
طريق ثبات:
مقصد ثبات مي باشد و مبدا يک برآکد
است که در آن ثبات قرار دارد و بالعکس.
يک آدرس را در يک ثبات ذخيره
کرده و آن ثبات را به يک ثبات ديگر مي دهند.
MOV AL,[BX]
MOV AX;2000H
MOV [AX],CX
MOV [CX],BX
ثبات محتواي آدرس فقط يکي از
اين ثبات ها مي باشد.
BP,BX,DI,SI
مثال :
MOV CX, 1382H
MOV AX,2000H
MOV [AX],CX
MOV DH, [AX]
محتوي CX در ادرس AX قرار
ميگيرد يعني 2000 به بعد
محتوي خانه اي که AX مشخص
ميکند بايد به DH برده شود
محتوي ثبات CX در خانه
اي از حافظه نوشته مي شود که آدرس در ثبات AX قرار
دارد در اين مثال ثبات CX
که مقدار 1382 را گرفته [AX] و DH MOV است در خانه 2000 ام حافظه نوشته مي شود.
مود هاي آدرس دهي مستقيم و غير
مستقيم مترادف با عمل خواندن و نوشتن در حافظه اصلي مي
باشد.
غلط MOV
DH,AX
آدرس دهي پايه نسبي :
در اين نوع آدرس دهي مورد نظر
به دو قسمت شکسته مي شود ، يک قسمت در يک ثبات ذخيره مي شود.
قسمت دوم در خود دستورالعمل قيد
مي گردد.
MOV AL ,7[BX]
MOV AL,[BX]+7
MOV AL,[BX+7]
آدرس مورد نظر حاصلجمع جز ثابت
و جز متغير است.
هر سه معادلند.
از آنجاکه اين نوع ادرس دهي ،
آدرس را يک جز ثابت را به يک جز قابل تغيير تقسيم مي کند براي ادرس دهي
آرايه ها مناسب است. البته ثباتي که در اين آدرس دهي ، براي ذخيره جز متغير
آدرس استفاده مي شود فقط يکي از دئ ثبات BX
يا BP مي تواند
باشد.
آدرس مورد نظر حاصلجمع جز ثابت
و جز متغير است.
آدرس دهي شاخص دار مستقيم :
اين آدرس دهي شبيه به نوع قبلي
است بااين تفاوت که هر دو جز آدرس متغيرند و يکي از اجزا در ثبات و ديگري در
ادرس از حافظه ذخيره شده است.
|