تالار گفتمان مانشت

نسخه‌ی کامل: راهنمايي در مورد مبحث "كنترل ترتيب اجراي برنامه"
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
من دارم پیاده سازی را از روی کتاب پارسه میخونم(چون متاسفانه برای پرات وقت ندارم. مقسمی و پوران هم که قحطیش اومده)

این مبحث "کنترل ترتیب اجرای برنامه"را توی کتاب پارسه درست نمیفهمم. میشه از جزوه پرات یا دکتر نوراله یا هرکس دیگه که میدونید خوب گفته، این مبحث را برام بذارید؟
دو نوع کنترل داریم:
* یکی صریح(explicit) هست که توسط برنامه نویس انجام میشه.مثل وارد کردن پرانتز در عبارت ریاضی و استفاده از دستور gotoو...

*یکی ضمنی(implicit)که توسط زبان برنامه نویسی انجام میشه.
----
کنترل ترتیب اجرای دستورات محاسباتی و ریاضی به دو صورت انجام میشه که میشه اونا رو به هم تبدیل کرد:

1-ساختار درختی عبارت ریاضی:
ریشه ی درخت نمایانگر عمل اصلی جهت ارزشیابی عبارت است.برگهای درخت عملوندها هستند و بقیه ی درخت بین ریشه تا برگ ها ،محاسبات میانی را نمایش می دهند.

2-ساختار نحوی یا دستوری عبارت ریاضی: به سه روش تقسیم میشه : پیشوندی+پسوندی+میانوندی
-----------------------
کنترل در بین دستورات خودش به چند بخش تقسیم میشه:
مثلا کنترل ترتیب به کمک دستورات پرشی:
مثلا وقتی میخوایم اجرای برنامه رو پاس بدیم به فلان خط میایم از برچسب و goto یا loop و .... استفاده می کنیم.

استفاده از دستورات switch و select case و این حفا یا حلقه های for و غیره هم توی این بخش مورد بحث قرار می گیرن

---
یه جا دیگه هم کنترل ترتیب توی زیر برنامه ها رو داریم که بحث اجرای زیربرنامه های تو در تو یا فراخوانی و برگشت هست که با call و return و از این حرفا کنترلشو تو دست می گیریم.
بازهم از دید پیاده سازی این بخش یه سری نکته هست :
یک فعالیت شامل دو قسمت سگمنت کد و سگمت فعالیت است.
قسمت سگمنت کد در طی اجرا ثابت است.
به ازای هر call یک رکورد فعالیت بوجود میآید.با دستور return آن رکورد فعالیت از بین می رود.
دو متغیر زیر برای کنترل ترتیب زیربرنامه نگهداری میشن:
الف-اشاره گر فعلی دستور(CIP=current instruction pointer): اشاره به دستوری می کند که در حال اجراست.
ب-اشاره گر فعلی محیط(CEP=current environment pointer) : اشاره به رکورد فعالیتی می کند که فعال می شود.
---
CIP از نگاه سخت افزاری مفهومی شبیه PC یا شمارنده ی برنامه داره که توی درس معماری بحث شد.
---
در زیربرنامه های بازگشتی و غیربازگشتی از جهت پیاده سازی هر دو اشاره گر CIP و CEP باید استفاده بشن.
-------
توی برنامه های بازگشتی به ازای هر call مقدار اشاره گرهای مذکور توی پشته یا stack ذخیره میشه و به ازای هر return از پشته pop میشن.
-----
طی عملیات کنترل ترتیب،زنجیره ای از رکوردهای فعالیت روی پشته تشکیل می شوند.این زنجیره از پیوندها را زنجیر پویا(dynamic chain) گویند.
--------------------------
یه سری زیر برنامه هم داریم به اسم زیربرنامه های برنامه ریزی شده:
در این نوع زیربرنامه ها دیگه از call و return نمیشه زیربرنامه رو کنترل کرد بلکه بوسیله ی زمانبندی کنترل میشن.
انواع مختلف زمانبندها:

الف-قبل و یا بعد از زیربرنامه های دیگه
مثال :
call b after b

ب-برقراری شرایط حاص:
مثال:
(call b when (x=5) and (z>0

ج-براساس زمان(نسبی)
مثال:
call b at time=25
call b at time=current time+10

د-طبق یک اولویت:
مثال:
call b whith priority 7

از نظرپیاده سازی در برنامه main باید لیستی از زیربرنامه های فعال زمانبندی شوندوکنترل زیربرنامه هااز طریق main انجام می شود.
================================
نکته ی آخر اینکه:یک تست از این بخش اومده بود:
مهندسی کامپیوتر سال 75 :
برای انتخاب 10 دستور برای اجرا یک بار از دستورات تودرتوی if then else استفاده کردیم و یک بار از case با توجه به اینکه کامپایلر مورد استفاده case را با روش جدول پرش پیاده سازی کرده است. هزینه ی اجرا و هزینه ی ترجمه ی دو روش را مقایسه کنید.

پاسخ :
هزینه ی اصلی case کمتر و هزینه ی آن بیشتر است.
توضیح :در هنگام اجرای دستور case با استفاده از جدول پرش فقط یک پرش غیر مستقیم به شروع مربوط به آن انجام میگیرد و سپس آدرس دستورات از ردیف مربوطه در جدول با یک تفاوت مکان بدست میآید. برا یدستورات if then else شرطهای زیادی در زمان اجرا باید چک شود که هزینه ی ارای آن را بالا می برند. در دستور case تشکیل جدول پرش در زمان کامپایلر هزینه ی بیشتر نسبت به کامپایلر دستور if then else دارد.
--------
منبع :
تایپ شده از روی کتاب راهیان ارشد
لینک مرجع