Aaj123456gf
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    <style> body { font-family: "Vazirmatn", sans-serif; direction: rtl; text-align: right; line-height: 1.8; } ul, ol { direction: rtl; text-align: right; list-style-position: inside; padding-right: 1.5em; } li { margin-bottom: 0.5em; } code { background-color: #f5f5f5; color: #c7254e; font-family: "Courier New", monospace; font-size: 90%; padding: 0.2em 0.4em; border-radius: 4px; direction: ltr; unicode-bidi: embed; } pre { background-color: #2d2d2d; color: #f8f8f2; font-family: "Courier New", monospace; font-size: 14px; padding: 1em; border-radius: 8px; overflow-x: auto; direction: ltr; text-align: left; line-height: 1.6; } pre code { background: none; color: inherit; font-size: inherit; padding: 0; } p, h1, h2, h3, h4, h5, h6, li { direction: rtl; unicode-bidi: embed; } </style> ## 1 سوالات --- ### ۱. الگوریتم و پردازش را توضیح دهید. (۱ نمره) پاسخ : ### **الگوریتم (Algorithm) و پردازش (Processing)** #### **۱. تعریف الگوریتم** الگوریتم مجموعه‌ای از **دستورالعمل‌های مرحله‌به‌مرحله، دقیق و محدود** است که برای **حل یک مسئله یا انجام یک کار مشخص** طراحی می‌شود. **ویژگی‌های یک الگوریتم خوب:** ✅ **ورودی (Input):** باید داده‌های ورودی را به‌وضوح مشخص کند. ✅ **خروجی (Output):** باید نتیجه مشخصی داشته باشد. ✅ **قطعی بودن (Definiteness):** هر مرحله باید بدون ابهام باشد. ✅ **محدودیت (Finiteness):** پس از تعداد محدودی مرحله پایان یابد. ✅ **کارایی (Effectiveness):** هر مرحله باید قابل اجرا باشد. **مثال:** الگوریتم جمع دو عدد: ``` 1. دو عدد A و B را بگیر. 2. مقدار C را مساوی A + B قرار بده. 3. C را نمایش بده. ``` --- #### **۲. تعریف پردازش (Processing)** پردازش به **اجرای عملیات‌های محاسباتی یا منطقی روی داده‌ها** توسط یک سیستم کامپیوتری (مثل ریزپردازنده) گفته می‌شود. **مراحل پردازش در ریزپردازنده:** ``` 1. دریافت داده‌ها (Fetch): داده‌ها از حافظه خوانده می‌شوند. 2. رمزگشایی (Decode): دستورالعمل تفسیر می‌شود. 3. اجرا (Execute): عملیات موردنظر (مثل جمع، ضرب، مقایسه) انجام می‌شود. 4. ذخیره نتیجه (Store): نتیجه در حافظه یا رجیسترها ذخیره می‌شود. ``` **مثال:** - وقتی ریزپردازنده دستور `ADD R1, R2` را اجرا می‌کند: - مقادیر رجیسترهای R1 و R2 را می‌خواند. - آن‌ها را جمع می‌کند. - نتیجه را در R1 ذخیره می‌کند. --- #### **۳. ارتباط الگوریتم و پردازش** - **الگوریتم** → **طرح کلی حل مسئله** (مثل دستور پخت غذا). - **پردازش** → **اجرای واقعی الگوریتم** (مثل آشپزی کردن بر اساس دستور). **مثال در ریزپردازنده:** - الگوریتم: ``` 1. عدد X را از حافظه بخوان. 2. عدد Y را از حافظه بخوان. 3. Z = X + Y محاسبه کن. 4. Z را در حافظه ذخیره کن. ``` - پردازش: ریزپردازنده مراحل بالا را به ترتیب اجرا می‌کند. --- #### **۴. تفاوت الگوریتم و برنامه** | **الگوریتم** | **برنامه** | |--------------|------------| | مستقل از زبان برنامه‌نویسی است. | وابسته به یک زبان خاص (مثل اسمبلی یا C) است. | | به صورت مفهومی و ریاضی بیان می‌شود. | به صورت کدهای قابل اجرا نوشته می‌شود. | | مثال: فلوچارت جمع دو عدد. | مثال: کد اسمبلی `ADD AX, BX`. | --- **جمع‌بندی:** - **الگوریتم** → راه‌حل نظری مسئله. - **پردازش** → اجرای عملی الگوریتم توسط سخت‌افزار (مثل CPU). <hr style="border: 4px solid GREEN;"> ### ۲. بزرگ بودن Add.Bus و DataBus هر یک چه مزایایی دارند؟ (۱ نمره) پاسخ: ### **مزایای بزرگ بودن **Address Bus** و **Data Bus** در ریزپردازنده** #### **۱. بزرگ بودن **Address Bus** (گذرگاه آدرس)** **گذرگاه آدرس** تعیین می‌کند که ریزپردازنده **چقدر حافظه را می‌تواند آدرس دهی کند**. - **تعداد آدرس‌های قابل دسترسی = $$ 2^n $$** (که n = تعداد خطوط Address Bus). **مزایا:** ✅ **حافظه بیشتر قابل دسترسی است:** - مثلاً یک پردازنده با **۳۲ بیت Address Bus** می‌تواند $$ 2^{32} = 4 $$ گیگابایت حافظه را آدرس دهی کند. - اگر **۶۴ بیت** باشد، $$ 2^{64} $$ آدرس (حافظه بسیار عظیم) پشتیبانی می‌شود. ✅ **پشتیبانی از برنامه‌های حجیم و سیستم‌عامل‌های پیشرفته:** - برنامه‌های سنگین (مثل نرم‌افزارهای مهندسی، بازی‌ها) به فضای آدرس بزرگی نیاز دارند. ✅ **افزایش کارایی در سیستم‌های چندکاره (Multitasking):** - سیستم‌عامل می‌تواند حافظه بیشتری را به پردازه‌های مختلف اختصاص دهد. --- #### **۲. بزرگ بودن **Data Bus** (گذرگاه داده)** **گذرگاه داده** تعیین می‌کند که **چه مقدار داده در یک سیکل کلاک منتقل می‌شود**. **مزایا:** ✅ **انتقال داده سریع‌تر:** - یک **Data Bus 32 بیتی** در هر سیکل ۴ بایت (۳۲ بیت) منتقل می‌کند، در حالی که **۱۶ بیتی** فقط ۲ بایت انتقال می‌دهد. - مثال: اگر CPU بخواهد یک عدد ۳۲ بیتی را از RAM بخواند، با **Data Bus 32 بیتی** در **یک سیکل** انجام می‌شود، اما با **۱۶ بیتی** به **دو سیکل** نیاز است. ✅ **کارایی بالاتر در پردازش داده‌ها:** - دستورات سنگین (مثل محاسبات ممیز شناور) سریع‌تر اجرا می‌شوند. ✅ **بهبود عملکرد در پردازش گرافیکی و چندرسانه‌ای:** - انتقال داده‌های حجیم (مثل تصاویر و ویدیوها) سریع‌تر انجام می‌شود. --- ### **مقایسه کلی** | **ویژگی** | **Address Bus بزرگ‌تر** | **Data Bus بزرگ‌تر** | |----------------|----------------------|----------------------| | **تأثیر اصلی** | افزایش فضای آدرس دهی حافظه | افزایش سرعت انتقال داده | | **مثال** | پشتیبانی از RAM بیشتر | اجرای سریع‌تر دستورات | | **محدودیت** | نیاز به حافظه فیزیکی بیشتر | مصرف توان بالاتر | --- **جمع‌بندی:** - **Address Bus بزرگ‌تر → حافظه بیشتر در دسترس.** - **Data Bus بزرگ‌تر → سرعت بالاتر در پردازش.** <hr style="border: 4px solid GREEN;"> ### ۳. یک حافظه ۴ گیگابایتی به چه اندازه Add.Bus نیازمند است؟ (۱ نمره) پاسخ: ### **محاسبه اندازه‌ی مورد نیاز Address Bus برای یک حافظه‌ی ۴ گیگابایتی** برای تعیین اندازه‌ی **گذرگاه آدرس (Address Bus)** مورد نیاز یک حافظه‌ی ۴ گیگابایتی، از رابطه‌ی زیر استفاده می‌کنیم: $$ \text{تعداد آدرس‌های قابل دسترسی} = 2^n $$ $$ \text{حجم حافظه (بر حسب بایت)} = 2^n \times \text{اندازه‌ی هر خانه حافظه (معمولاً ۱ بایت)} $$ #### **۱. تبدیل ۴ گیگابایت به بایت:** $$ 4 \text{ گیگابایت} = 4 \times 1024 \times 1024 \times 1024 = 2^{32} \text{ بایت} $$ #### **۲. محاسبه‌ی تعداد خطوط Address Bus:** $$ 2^n = 2^{32} \implies n = 32 $$ #### **۳. نتیجه:** یک حافظه‌ی **۴ گیگابایتی** به یک **Address Bus 32 بیتی** نیاز دارد. --- ### **توضیح بیشتر:** - هر خط Address Bus یک بیت از آدرس را حمل می‌کند. - با **۳۲ بیت Address Bus**، می‌توان $$ 2^{32} = 4,294,967,296 $$ آدرس منحصربه‌فرد ایجاد کرد که معادل **۴ گیگابایت** حافظه است (با فرض اینکه هر خانه حافظه ۱ بایت باشد). - مثال‌های واقعی: - پردازنده‌های ۳۲ بیتی (مثل برخی از مدل‌های قدیمی Intel x86) فقط تا ۴ گیگابایت RAM پشتیبانی می‌کنند. - پردازنده‌های ۶۴ بیتی (مثل Intel Core i7) از آدرس دهی بسیار بیشتر (تا $$ 2^{64} $$ بایت) پشتیبانی می‌کنند. --- **جواب نهایی:** ✅ یک حافظه‌ی **۴ گیگابایتی** به **گذرگاه آدرس ۳۲ بیتی (32-bit Address Bus)** نیاز دارد. <hr style="border: 4px solid GREEN;"> ### ۴. در واحد ALU، رجیسترهای Temp و Acc به چه منظور استفاده می‌شوند. همچنین مفاهیم هر بیت فلگ رجیستر را بنویسید. (۲ نمره) | S | Z | --- | AC | --- | P | --- | CY | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | پاسخ: ### **واحد ALU و رجیسترهای Temp و Acc** **۱. رجیستر **Temp** (موقت):** - **کاربرد:** برای نگهداری موقت داده‌ها در حین انجام عملیات محاسباتی استفاده می‌شود. - **مثال:** هنگام ضرب دو عدد، یکی از اعداد در Temp ذخیره می‌شود تا در مراحل مختلف پردازش مورد استفاده قرار گیرد. **۲. رجیستر **Acc (اکومولاتور):** - **کاربرد:** اصلی‌ترین رجیستر برای ذخیره نتایج عملیات ALU است. - **مثال:** پس از اجرای دستور `ADD`، نتیجه در Acc ذخیره می‌شود. --- ### **توضیح بیت‌های **Flag Register** (رجیستر وضعیت)** رجیستر فلگ برای نشان دادن **وضعیت نتایج عملیات** در ALU استفاده می‌شود. ساختار آن در معماری ۸۰۸۵ به صورت زیر است: | **بیت** | **نام** | **توضیح** | **مثال** | |---------|---------|------------|----------| | **S (Sign)** | علامت | اگر نتیجه منفی باشد (MSB=1)، `S=1` می‌شود. | `10000000` → `S=1` | | **Z (Zero)** | صفر | اگر نتیجه صفر باشد، `Z=1` می‌شود. | `00000000` → `Z=1` | | **AC (Auxiliary Carry)** | حمل کمکی | اگر در بیت ۳ به ۴ حمل رخ دهد، `AC=1` می‌شود (برای عملیات BCD). | `00001111 + 1` → `AC=1` | | **P (Parity)** | توازن | اگر تعداد بیت‌های `1` در نتیجه زوج باشد، `P=1` می‌شود. | `11000011` → `P=1` (۴ بیت ۱) | | **CY (Carry)** | حمل | اگر در عملیات جمع/تفریق از MSB حمل رخ دهد، `CY=1` می‌شود. | `11111111 + 1` → `CY=1` | --- ### **جمع‌بندی:** - **Temp:** ذخیره موقت داده در حین محاسبات. - **Acc:** نگهداری نتیجه نهایی عملیات. - **Flag Register:** نشان‌دهنده وضعیت پردازش (مانند خطاهای محاسباتی). <hr style="border: 4px solid GREEN;"> ### ۵. چرخه عملکرد CPU را رسم کنید. (۱ نمره) پاسخ : ### **چرخه عملکرد CPU (دستورالعمل Fetch-Decode-Execute)** چرخه اصلی اجرای دستورات در CPU شامل **۴ مرحله کلیدی** است که به صورت مداوم تکرار می‌شوند. در برخی معماری‌های پیشرفته، این مراحل به صورت **خط لوله (Pipeline)** اجرا می‌شوند تا کارایی افزایش یابد. --- #### **۱. مرحله **Fetch (واکشی)** - **وظیفه:** دریافت دستورالعمل بعدی از حافظه. - **اجرا:** - آدرس دستورالعمل از **Program Counter (PC)** به **Address Bus** ارسال می‌شود. - دستورالعمل از حافظه خوانده شده و از طریق **Data Bus** به **Instruction Register (IR)** منتقل می‌شود. - **PC** به اندازه طول دستورالعمل افزایش می‌یابد. --- #### **۲. مرحله **Decode (رمزگشایی)** - **وظیفه:** تفسیر دستورالعمل و آماده‌سازی برای اجرا. - **اجرا:** - واحد **Control Unit (CU)** کد عملیات (Opcode) را تشخیص می‌دهد. - مشخص می‌کند کدام رجیسترها یا بخش‌های حافظه باید استفاده شوند. --- #### **۳. مرحله **Execute (اجرا)** - **وظیفه:** انجام عملیات محاسباتی/منطقی. - **اجرا:** - اگر دستورالعمل **محاسباتی** باشد (مثل `ADD`، `SUB`)، **ALU** عملیات را انجام می‌دهد. - اگر دستورالعمل **انتقال داده** باشد (مثل `MOV`)، داده بین رجیسترها یا حافظه جابه‌جا می‌شود. - اگر دستورالعمل **پرش** باشد (مثل `JMP`)، مقدار **PC** تغییر می‌کند. --- #### **۴. مرحله **Store (ذخیره نتیجه)** *(اختیاری بسته به نوع دستورالعمل)* - **وظیفه:** ذخیره نتیجه در حافظه یا رجیستر. - **مثال:** پس از اجرای `ADD AX, BX`، نتیجه در **AX** ذخیره می‌شود. --- ### **نمودار چرخه عملکرد CPU** ```mermaid flowchart LR Fetch --> Decode --> Execute --> Store Store --> Fetch ``` ### **توضیح تکمیلی:** - **چرخه ماشین (Machine Cycle):** ترکیبی از چند **چرخه کلاک** برای تکمیل یک مرحله. - **تفاوت در معماری‌ها:** - در CPUهای **پیشرفته** (مثل x86)، مراحل ممکن است **به صورت موازی** در خط لوله اجرا شوند. - در CPUهای **ساده** (مثل 8085)، هر مرحله به صورت **متوالی** انجام می‌شود. --- **مثال عملی در معماری ۸۰۸۵:** - دستور `MOV A, B` (کپی مقدار رجیستر B به A): 1. **Fetch:** خواندن کد دستور از حافظه. 2. **Decode:** تشخیص عملیات `MOV` توسط CU. 3. **Execute:** انتقال داده از B به A. <hr style="border: 4px solid GREEN;"> ### ۶. وقفه چیست و انواع یادآوری وقفه را بنویسید؟ (۱ نمره) پاسخ : #### **وقفه (Interrupt) و انواع آن** #### **۱. تعریف وقفه (Interrupt)** وقفه یک **مکانیسم سیگنال دهی** است که توسط سخت‌افزار یا نرم‌افزار به CPU ارسال می‌شود تا پردازنده را از انجام برنامه جاری منحرف کرده و به یک **روال خاص (ISR - Interrupt Service Routine)** هدایت کند. پس از اتمام روال، CPU به برنامه اصلی بازمی‌گردد. #### **۲. دلایل استفاده از وقفه** - پاسخگویی سریع به رویدادهای خارجی (مثل فشار دادن کلید کیبورد) - مدیریت دستگاه‌های ورودی/خروجی (I/O) بدون نیاز به Polling - رسیدگی به خطاهای سخت‌افزاری (مثل تقسیم بر صفر) - اجرای چندوظیفگی (Multitasking) #### **۳. انواع وقفه از نظر منبع** | نوع وقفه | منبع | مثال | ویژگی‌ها | |----------|------|-------|-----------| | **سخت‌افزاری (External)** | دستگاه‌های خارجی | کلید کیبورد، ماوس | غیرهمزمان (Asynchronous) | | **نرم‌افزاری (Software)** | دستورالعمل CPU | INT 21h در x86 | همزمان (Synchronous) | | **استثناها (Exceptions)** | خطای پردازش | تقسیم بر صفر | همزمان (Synchronous) | #### **۴. انواع وقفه از نظر قابلیت Mask شدن** | نوع | قابلیت مسدودسازی | مثال | |-----|------------------|-------| | **قابل Mask (Maskable)** | قابل غیرفعال کردن توسط دستور CLI | وقفه تایمر | | **غیرقابل Mask (Non-Maskable - NMI)** | همیشه فعال | خطای حافظه، قطع برق | #### **۵. مراحل پردازش وقفه** 1. دریافت سیگنال وقفه 2. ذخیره وضعیت فعلی (Context Saving) 3. پرش به آدرس ISR 4. اجرای روال سرویس وقفه 5. بازگشت به برنامه اصلی (Context Restoring) #### **۶. وقفه در معماری‌های مختلف** - **x86:** دارای جدول برد وقفه (IVT - Interrupt Vector Table) - **ARM:** از سیستم NVIC (Nested Vectored Interrupt Controller) استفاده می‌کند - **AVR:** وقفه‌ها در آدرس‌های ثابت حافظه برنامه قرار دارند #### **۷. مفاهیم مهم در وقفه** - **اولویت وقفه (Interrupt Priority)** - **تاخیر وقفه (Interrupt Latency)** - **تو در تویی وقفه (Interrupt Nesting)** **نمودار فرآیند وقفه:** ```mermaid flowchart TD A[برنامه در حال اجرا] --> B{وقفه رخ داده؟} B -->|Yes| C[ذخیره وضعیت فعلی] C --> D[اجرای ISR] D --> E[بازگردانی وضعیت] E --> A B -->|No| A ``` **مثال عملی:** در سیستم عامل، وقتی کاربر کلیدی را فشار می‌دهد: 1. کنترلر کیبورد وقفه ایجاد می‌کند 2. CPU برنامه فعلی را متوقف می‌کند 3. به روال خواندن کیبورد پرش می‌کند 4. پس از خواندن کلید، به برنامه قبلی بازمی‌گردد <hr style="border: 4px solid GREEN;"> ### ۷. در یک 8255 (GPIO)، می‌خواهیم قسمت A را در مود ۱ تنظیم کنیم، سپس بیت‌های ۱ و ۳ و ۷ قسمت C را یک و مابقی را صفر کنیم؟ رجیسترهای مرتبط با این تنظیمات را بنویسید. (۴ نمره) **جدول Selection** | CS | A1 | A0 | Action | | :-: | :-: | :-: | :------: | | ۰ | ۰ | ۰ | PORTA | | ۰ | ۰ | ۱ | PORTB | | ۰ | ۱ | ۰ | PORTC | | ۰ | ۱ | ۱ | Cont.REG | | ۱ | X | X | Not.select| **جدول Control Reg** | IO/BSR | GA,MODE ۲ | GA,MODE ۱ | GA,MODE ۰ | PA,I/O | PCU,I/O | GB,MODE ۰ | PB,I/O | PCD,I/O | | :----: | :------: | :------: | :------: | :----: | :-----: | :------: | :----: | :-----: | پاسخ : ### **پاسخ به سوال ۷: تنظیمات 8255 (PPI)** #### **۱. تنظیم Port A در Mode 1 (Input)** برای تنظیم Port A در Mode 1 (ورودی با Handshaking): - **Mode 1** برای Port A نیاز به: - **Group A Mode = 01** (Mode 1) - **Port A Direction = 1** (Input) - **Port C Upper = Input** (برای سیگنال‌های Handshaking) #### **۲. تنظیم بیت‌های Port C** می‌خواهیم بیت‌های 1، 3 و 7 از Port C را **1** و بقیه را **0** کنیم: - مقدار باینری برای Port C: `10001010` (0x8A) - بیت 7: 1 - بیت 6: 0 - بیت 5: 0 - بیت 4: 0 - بیت 3: 1 - بیت 2: 0 - بیت 1: 1 - بیت 0: 0 #### **۳. محاسبه مقدار Control Register** مقدار Control Register برای این تنظیمات: - **D7 (IO/BSR Mode):** 1 (برای BSR Mode) - **D6-D3:** برای Port A Mode 1 Input: `1 0 1 1` (0xB) - **D2 (Group B Mode):** 0 (Mode 0) - **D1 (Port B Direction):** 0 (Output) - **D0 (Port C Lower Direction):** 0 (Output) مقدار نهایی Control Register: - **BSR Mode:** `1xxx0000` (برای تنظیم بیت‌های Port C) - **IO Mode:** `10110000` (0xB0) برای تنظیم Port A در Mode 1 Input #### **۴. مراحل برنامه‌نویسی** 1. **تنظیم Port A در Mode 1 Input:** - ارسال `0xB0` به Control Register 2. **تنظیم بیت‌های Port C:** - تنظیم بیت 7: ارسال `0x0F` به Control Register (BSR Mode: `1` برای بیت 7) - تنظیم بیت 3: ارسال `0x07` به Control Register (BSR Mode: `1` برای بیت 3) - تنظیم بیت 1: ارسال `0x03` به Control Register (BSR Mode: `1` برای بیت 1) #### **۵. کد اسمبلی نمونه** ```assembly MOV AL, 0xB0 ; تنظیم Port A در Mode 1 Input OUT 63h, AL ; آدرس Control Register معمولاً 63h است ; تنظیم بیت‌های Port C MOV AL, 0x0F ; تنظیم بیت 7 OUT 63h, AL MOV AL, 0x07 ; تنظیم بیت 3 OUT 63h, AL MOV AL, 0x03 ; تنظیم بیت 1 OUT 63h, AL ``` #### **۶. جدول مقادیر Control Register** | بیت | مقدار | توضیح | |----|-------|-------| | D7 | 1 | BSR Mode فعال | | D6-D3 | 1011 | Port A در Mode 1 Input | | D2 | 0 | Group B در Mode 0 | | D1 | 0 | Port B به عنوان Output | | D0 | 0 | Port C Lower به عنوان Output | #### **۷. نکات مهم** - در **Mode 1**، بخشی از Port C به عنوان سیگنال‌های Handshaking استفاده می‌شود. - مقداردهی بیت‌های Port C در BSR Mode باید **به صورت جداگانه** انجام شود. - آدرس‌دهی به رجیسترها بستگی به اتصال A0 و A1 دارد (معمولاً Control Register در آدرس پایه + 3). <hr style="border: 4px solid GREEN;"> ### ۸. در 8279 (Key Board & Disp.) به سوالات زیر پاسخ دهید. (۵ نمره) **الف)** مفهوم over run در قسمت کلید چیست؟ **ب)** نحوه نمایش دو نمایشگر را به اختصار یا بلوکی توضیح دهید؟ **پ)** کلیدهای ۱۷ و ۶ از صفحه دوم و ۴۵ تاچ می شود کدهای تولید شده از کلیدها را در مود 2Key_Lockout بنویسید؟ پاسخ : ### **تنظیمات و عملکرد 8279 (Keyboard/Display Controller)** #### **الف) مفهوم Overrun در قسمت کلید** **Overrun** خطایی است که هنگامی رخ می‌دهد که: - **بافر کیبورد پر باشد** (دو کلید یا بیشتر فشرده شده باشند) - **پردازنده موفق به خواندن کد کلید قبلی نشده باشد** - **کلید جدیدی فشرده شود** در این حالت: - بیت **Overrun (O)** در **Status Register** برابر **1** می‌شود - کد کلید جدید **از دست می‌رود** - برای رفع مشکل باید وضعیت بافر بررسی و ریست شود **راه حل:** برنامه باید قبل از خواندن کد کلید جدید، وضعیت Overrun را چک کند. --- #### **ب) نحوه نمایش روی دو نمایشگر** **۱. روش مالتی پلکس (Multiplexing):** - 8279 از **دو خط اسکن (SL0, SL1)** برای انتخاب نمایشگرها استفاده می‌کند - **دو حالت نمایش وجود دارد:** - **۸ نمایشگر (۸-digit):** هر نمایشگر به صورت جداگانه آدرس‌دهی می‌شود - **۱۶ نمایشگر (۱۶-digit):** با استفاده از مالتی پلکسینگ **۲. بلوک دیاگرام نمایش دو نمایشگر:** ``` 8279 Display Control: +---------------------+ | OUTA0-OUTA3 (Data) |---> Segment Lines (a-g, dp) | OUTB0-OUTB3 (Data) | | SL0-SL1 (Scan Lines)|---> Digit Selection (Digit 1/Digit 2) +---------------------+ ``` - **SL0=0, SL1=0:** نمایشگر اول فعال - **SL0=0, SL1=1:** نمایشگر دوم فعال - داده از **OUTA و OUTB** به سگمنت‌ها ارسال می‌شود **۳. تنظیمات رجیسترها:** - **Display Mode Register:** `00` برای نمایشگرهای ۸ کاراکتری - **Scan Frequency:** باید به اندازه‌ای باشد که چشم انسان متوجه خاموشی نشود (~100Hz) --- #### **پ) کدهای تولید شده برای کلیدها در Mode 2-Key Lockout** در این حالت: - فقط **آخرین کلید فشرده شده** ثبت می‌شود - **کلیدهای دیگر نادیده گرفته می‌شوند** تا زمانی که کلید اول رها شود **کدهای تولید شده:** - **صفحه کلید ۸×۸** (64 کلید) با کدهای **۶ بیتی** (دو بیت برای صفحه، ۴ بیت برای ردیف/ستون) - **فرمت کد کلید:** `SHIFT | CNTL | SCAN2 | SCAN1 | SCAN0 | RTL2 | RTL1 | RTL0` **محاسبه کدها:** 1. **کلید ۱۷ (صفحه ۲):** - صفحه ۲ → `CNTL=0`, `SHIFT=1` (اگر صفحه دوم با Shift فعال شود) - آدرس کلید ۱۷ → ردیف ۲، ستون ۱ (فرضاً) - کد نهایی: `1 0 0 0 1 0 0 1` (0x89) 2. **کلید ۶ (صفحه ۲):** - صفحه ۲ → `SHIFT=1` - آدرس کلید ۶ → ردیف ۰، ستون ۶ - کد نهایی: `1 0 0 0 0 1 1 0` (0x86) 3. **کلید ۴۵ (صفحه ۱):** - صفحه ۱ → `SHIFT=0` - آدرس کلید ۴۵ → ردیف ۵، ستون ۵ (فرضاً) - کد نهایی: `0 0 1 1 0 1 1 0` (0x36) **نکته:** - در **2-Key Lockout**، اگر کلید ۱۷ و ۶ همزمان فشرده شوند، فقط کد **آخرین کلید** (مثلاً ۰x۸۶) در بافر ذخیره می‌شود. --- ### **جمع‌بندی نهایی** | بخش | پاسخ | |------|-------| | **Overrun** | خطای ناشی از پر بودن بافر کیبورد | | **نمایشگر دوگانه** | مالتی پلکس با اسکن لاین‌های SL0/SL1 | | **کدهای کلید** | 0x89 (کلید ۱۷), 0x86 (کلید ۶), 0x36 (کلید ۴۵) | <hr style="border: 4px solid GREEN;"> ### ۹. تفاوت Risc و Cisc را بنویسید و دلیل استفاده از Cisc را بیان کنید. (۱ نمره) پاسخ : ### **تفاوت‌های اصلی RISC و CISC** #### **۱. تعریف معماری‌ها** | **مشخصه** | **RISC (Reduced Instruction Set Computer)** | **CISC (Complex Instruction Set Computer)** | |------------------|--------------------------------------------|--------------------------------------------| | **تعداد دستورالعمل‌ها** | کم (~100 دستور) | زیاد (~300-500 دستور) | | **طول دستورالعمل** | ثابت (مثلاً ۳۲ بیتی) | متغیر (۱ تا ۱۵ بایت) | | **اجرا در چرخه کلاک** | معمولاً ۱ چرخه | چند چرخه (بسته به پیچیدگی) | | **حافظه دسترسی** | فقط Load/Store مستقیم به حافظه | دستورات مستقیم روی حافظه | | **مثال‌های پردازنده** | ARM, RISC-V, MIPS | x86 (Intel, AMD), 8051 | --- #### **۲. تفاوت‌های کلیدی** | **معیار** | **RISC** | **CISC** | |------------------|----------|----------| | **طراحی دستورات** | ساده و بهینه | پیچیده با قابلیت‌های چندگانه | | **مصرف توان** | پایین (مناسب موبایل/سیستم‌های نهفته) | بالا (سرور/دسکتاپ) | | **سرعت اجرا** | بالاتر به دلیل خط لوله کارآمد | کندتر به دلیل پیچیدگی | | **فضای اشغالی تراشه** | کوچک‌تر | بزرگ‌تر | | **برنامه‌نویسی اسمبلی** | نیاز به کد بیشتر | فشرده و سطح بالا | --- ### **دلایل استفاده از CISC** ۱. **سازگاری عقبرو (Backward Compatibility)** - پردازنده‌های x86 برای حفظ سازگاری با نرم‌افزارهای قدیمی از CISC استفاده می‌کنند. ۲. **کاهش حجم کد برنامه** - دستورات پیچیده (مثل `MOVSB` در x86) نیاز به کدنویسی کمتری دارند. ۳. **بهینه‌سازی برای کاربردهای خاص** - دستورات اختصاصی (مثل محاسبات رمزنگاری) در CISC کارایی بهتری دارند. ۴. **مدیریت حافظه پیشرفته** - پشتیبانی از آدرس‌دهی‌های پیچیده (مثل `[EAX + EBX*4 + 10h]`). ۵. **کاربرد در سیستم‌های عمومی** - مناسب برای برنامه‌های سنگین (مثل ویرایش ویدیو، بازی‌ها). --- ### **جمع‌بندی: کجا از کدام معماری استفاده می‌شود؟** | **کاربرد** | **معماری ترجیحی** | **دلیل** | |------------------|------------------|----------| | موبایل/تبلت | RISC (ARM) | مصرف انرژی پایین | | سرور/دسکتاپ | CISC (x86) | سازگاری و قدرت محاسباتی | | سیستم‌های نهفته | RISC | سادگی و قیمت پایین | | پردازش ابری | هر دو (ARM/x86) | بسته به نیاز | **نکته جالب:** امروزه مرز بین RISC و CISC شده است. مثلاً پردازنده‌های x86 مدرن از **ترجمه دستورات CISC به ریزعملگرهای RISC** استفاده می‌کنند (مثل µops در اینتل). <hr style="border: 4px solid GREEN;"> <hr style="border: 4px solid GREEN;"> <hr style="border: 4px solid GREEN;"> ## 2 سوالات --- ### ۱. الگوریتم را به اختصار شرح دهید؟ (۱) پاسخ: **الگوریتم** مجموعه‌ای از **دستورالعمل‌های مرحله‌به‌مرحله، دقیق و محدود** است که برای **حل یک مسئله یا انجام یک کار مشخص** طراحی می‌شود. ### **ویژگی‌های کلیدی الگوریتم:** 1. ورودی (Input): داده‌های اولیه را دریافت می‌کند. 2. خروجی (Output): نتیجه مشخصی تولید می‌کند. 3. قطعی بودن (Definiteness): هر مرحله واضح و بدون ابهام است. 4. محدودیت (Finiteness): پس از مراحل محدود پایان می‌یابد. 5. کارایی (Effectiveness): هر مرحله قابل اجرا است. ### **مثال ساده:** الگوریتم جمع دو عدد: 1. عدد اول را بگیر (A). 2. عدد دوم را بگیر (B). 3. A و B را جمع کن (C = A + B). 4. نتیجه (C) را نمایش بده. --- ### **تفاوت الگوریتم با برنامه:** - الگوریتم **مفهومی و مستقل از زبان برنامه‌نویسی** است (مثل دستور پخت غذا). - برنامه **پیاده‌سازی الگوریتم با یک زبان خاص** است (مثل کد C++ یا اسمبلی). **نکته:** هر الگوریتم می‌تواند به روش‌های مختلفی برنامه‌نویسی شود! <hr style="border: 4px solid GREEN;"> ### ۲. ظرفیت یک حافظه با خط آدرس ۱۰ بیت چقدر است؟ (۰.۵) پاسخ: ### **محاسبه ظرفیت حافظه با ۱۰ بیت خط آدرس:** #### **فرمول محاسبه:** $$ \text{ظرفیت حافظه} = 2^n \quad \text{(تعداد خانه‌های حافظه)} $$ $$ \text{(هر خانه معمولاً ۱ بایت داده ذخیره می‌کند)} $$ #### **محاسبه برای ۱۰ بیت آدرس:** $$ 2^{10} = 1024 \ \text{خانه حافظه} $$ $$ 1024 \ \text{بایت} = \textbf{۱ کیلوبایت (KB)} $$ #### **نتیجه نهایی:** ✅ یک حافظه با **۱۰ بیت خط آدرس** می‌تواند **۱ کیلوبایت (KB)** داده را آدرس‌دهی کند. --- ### **توضیح تکمیلی:** - **مثال:** اگر هر خانه حافظه **۱ بایت** (۸ بیت) فضا داشته باشد: - آدرس‌دهی از `0000000000` (آدرس ۰) تا `1111111111` (آدرس ۱۰۲۳) خواهد بود. - **کاربرد:** این مدل حافظه‌ها در سیستم‌های قدیمی (مثل ماشین‌حساب‌های اولیه) استفاده می‌شد. --- **نکته:** اگر هر خانه حافظه بیشتر از ۱ بایت (مثلاً ۱۶ بیت) ذخیره کند، ظرفیت کل افزایش می‌یابد، اما همچنان **۱۰۲۴ آدرس منحصربه‌فرد** وجود دارد. <hr style="border: 4px solid GREEN;"> ### ۳. مزیت بزرگ بودن گذرگاه داده چیست؟ (۰.۵) پاسخ: ### **مزیت بزرگ بودن گذرگاه داده (Data Bus) در یک جمله:** ✅ **انتقال داده‌های بیشتر در هر سیکل کلاک → افزایش سرعت پردازش!** --- ### **توضیح کوتاه و فنی:** - **گذرگاه داده عریض‌تر (مثلاً ۳۲ بیت به جای ۱۶ بیت):** - در هر سیکل کلاک، **داده بیشتری منتقل می‌شود** (مثلاً ۴ بایت به جای ۲ بایت). - مثال: خواندن یک عدد ۳۲ بیتی با **Data Bus 32 بیتی** در **۱ سیکل** انجام می‌شود، اما با ۱۶ بیت به **۲ سیکل** نیاز دارد. - **نتایج:** - کاهش تاخیر در عملیات‌های حافظه - بهبود عملکرد در پردازش تصویر، ویدیو و محاسبات سنگین --- **مثال ملموس:** پردازنده‌های ۶۴ بیتی امروزی نسبت به ۳۲ بیتی‌های قدیمی، به دلیل **عرض بیشتر گذرگاه داده**، سرعت بسیار بالاتری دارند! <hr style="border: 4px solid GREEN;"> ### ۴. مفهوم بیت‌های فلگ رجیستر واحد ALU را به اختصار شرح دهید؟ (۱.۵) | S | Z | --- | AC | --- | P | --- | CY | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | پاسخ: ### **شرح مختصر بیت‌های فلگ رجیستر در واحد ALU:** **فلگ رجیستر (وضعیت)** یک رجیستر ویژه در CPU است که **نتیجه عملیات محاسباتی/منطقی** ALU را گزارش می‌دهد. مهم‌ترین بیت‌های آن: | **بیت فلگ** | **نام** | **شرح عملکرد** | **مثال** | |-------------|--------------|-------------------------------------------------------------------------------|-------------------------------| | **CY (Carry)** | حمل | اگر در جمع/تفریق از بیت MSB حمل ایجاد شود، ۱ می‌شود. | `11111111 + 1` → CY=1 | | **Z (Zero)** | صفر | اگر نتیجه عملیات صفر باشد، ۱ می‌شود. | `5 - 5` → Z=1 | | **S (Sign)** | علامت | برابر با بیت MSB نتیجه (۱=منفی، ۰=مثبت). | `10000000` → S=1 | | **P (Parity)** | توازن | اگر تعداد بیت‌های ۱ در نتیجه زوج باشد، ۱ می‌شود. | `11000011` (۴ بیت ۱) → P=1 | | **AC (Aux Carry)** | حمل کمکی | اگر در بیت ۳ به ۴ حمل رخ دهد، ۱ می‌شود (مهم برای محاسبات BCD). | `00001111 + 1` → AC=1 | --- ### **کاربردهای کلیدی:** 1. پرش شرطی (مثال: `JZ` اگر Z=1 باشد پرش می‌کند). 2. تشخیص خطا (مثل تقسیم بر صفر با ترکیب CY/Z). 3. پشتیبانی از محاسبات پیشرفته (مثل عملیات روی اعداد بزرگتر از طول رجیستر با استفاده از CY). --- **نکته:** در معماری‌های مختلف (مثل x86، ARM، AVR) ممکن است نام/تعداد این فلگ‌ها متفاوت باشد، اما مفهوم کلی یکسان است. <hr style="border: 4px solid GREEN;"> ### ۵. تفاوت رجیسترهای General Purpose با Special Purpose در ۸۰۸۵ را بنویسید و دو رجیستر قابل دسترس را نام ببرید؟ (۲) پاسخ: ### **تفاوت رجیسترهای General Purpose و Special Purpose در 8085** #### **۱. رجیسترهای General Purpose (همه‌منظوره)** - **ویژگی‌ها:** - برای ذخیره **داده‌های موقت** و **محاسبات عمومی** استفاده می‌شوند. - توسط برنامه‌نویس **به طور مستقیم قابل دسترسی و تغییر** هستند. - در عملیات ریاضی و منطقی (مثل جمع، انتقال داده) کاربرد دارند. - **رجیسترهای اصلی در 8085:** - **B, C, D, E, H, L** (هر کدام ۸ بیتی) - امکان ترکیب به صورت **جفت رجیستر ۱۶ بیتی** (مثل BC, DE, HL) #### **۲. رجیسترهای Special Purpose (ویژه)** - **ویژگی‌ها:** - برای **اهداف خاص پردازنده** طراحی شده‌اند. - معمولاً **غیرمستقیم** توسط دستورالعمل‌ها کنترل می‌شوند. - تغییر برخی از آن‌ها مستقیماً توسط برنامه‌نویس ممکن نیست. - **مثال‌ها در 8085:** - **Accumulator (A):** ذخیره نتیجه عملیات ALU - **Program Counter (PC):** نگهداری آدرس دستور بعدی - **Stack Pointer (SP):** مدیریت پشته - **Flag Register:** نشانگر وضعیت پردازش --- ### **دو رجیستر قابل دسترس (Accessible) برای برنامه‌نویس** 1. **Accumulator (A)** - **کاربرد:** ذخیره نتایج عملیات محاسباتی (مثل `ADD B` نتیجه را در A می‌ریزد). - **دسترسی:** مستقیماً در دستورالعمل‌ها استفاده می‌شود (مثال: `MOV A, B`). 2. **Register Pair HL** - **کاربرد:** - اشاره‌گر به حافظه (مثال: `MOV A, M` داده را از آدرس HL به A می‌آورد). - محاسبات ۱۶ بیتی (مثل `DAD H` که HL = HL + HL). - **دسترسی:** هر دو بخش H و L قابل نوشتن/خواندن هستند (مثال: `MOV H, B`). --- ### **جمع‌بندی در یک نگاه** | **نوع رجیستر** | **مثال‌ها** | **قابل دسترسی؟** | **کاربرد اصلی** | |-----------------------|-------------------------|------------------|---------------------------------| | General Purpose | B, C, D, E, H, L | ✅ بله | ذخیره داده/آدرس موقت | | Special Purpose | A, PC, SP, Flag | ❌ برخی (مثل A) | کنترل پردازش (پشته، وضعیت و...)| **نکته:** رجیسترهای **PC** و **SP** معمولاً با دستورالعمل‌های خاص (مثل `CALL`, `PUSH`) مدیریت می‌شوند، نه مستقیم! <hr style="border: 4px solid GREEN;"> ### ۶. چرخه پردازش CPU را همراه با وقفه رسم کنید؟ (۱) پاسخ: ### **چرخه پردازش CPU همراه با وقفه (Interrupt Cycle)** ``` mermaid graph TD Start[شروع] --> Fetch["دریافت دستور"] Fetch --> Decode["رمزگشایی"] Decode --> Execute["اجرا"] Execute --> CheckInterrupt["بررسی وقفه"] CheckInterrupt --> NoInterrupt["وقفه نیست"] NoInterrupt --> Fetch CheckInterrupt --> YesInterrupt["وقفه هست"] YesInterrupt --> SaveState["ذخیره وضعیت"] SaveState --> JumpToISR["پرش به ISR"] JumpToISR --> RunISR["اجرای ISR"] RunISR --> RestoreState["بازگردانی"] RestoreState --> Fetch ``` #### **توضیح مراحل:** 1. **چرخه عادی Fetch-Decode-Execute** - CPU دستورات را به ترتیب اجرا می‌کند. 2. **تشخیص وقفه** - اگر سیگنال وقفه (مثل `INTR` در 8085) فعال باشد، CPU پس از اتمام دستور جاری واکنش نشان می‌دهد. 3. **ذخیره وضعیت (Context Saving)** - مقدار **PC** (آدرس دستور بعدی) و **Flag Register** در پشته ذخیره می‌شوند. 4. **پرش به ISR** - CPU با استفاده از **بردار وقفه**، آدرس روال سرویس وقفه (ISR) را از حافظه خوانده و به آن پرش می‌کند. 5. **اجرای ISR** - کدهای مربوط به وقفه (مثل خواندن داده از کیبورد) اجرا می‌شود. 6. **بازگشت به برنامه اصلی** - با دستور `RETI` (Return from Interrupt)، وضعیت ذخیره‌شده از پشته بازیابی شده و اجرای برنامه اصلی ادامه می‌یابد. --- ### **نقاط کلیدی در معماری 8085:** - **خط وقفه:** `INTR` (قابل Mask) یا `TRAP` (غیرقابل Mask). - **ذخیره خودکار:** PC در پشته ذخیره می‌شود. - **بردار وقفه:** آدرس ISR معمولاً ثابت است (مثل `003Ch` برای وقفه RST 7.5). **مثال:** وقفه تایمر در 8085: 1. تایمر سیگنال `RST 6.5` را فعال می‌کند. 2. CPU پس از ذخیره PC، به آدرس `0034h` پرش می‌کند. 3. پس از اجرای ISR، با `RETI` به برنامه بازمی‌گردد. --- **تفاوت با چرخه عادی:** - در چرخه عادی، CPU فقط مراحل Fetch-Decode-Execute را تکرار می‌کند. - در چرخه با وقفه، **مراحل اضافه‌شده** (ذخیره وضعیت، پرش به ISR، بازگشت) باعث تأخیر در اجرای برنامه اصلی می‌شوند. <hr style="border: 4px solid GREEN;"> ### ۷. وقفه چیست و انواع وقفه را نام ببرید ضمنا نحوه اعمال وقفه را نام ببرید؟ (۲) پاسخ: #### **۱. تعریف وقفه (Interrupt)** وقفه یک **مکانیسم سخت‌افزاری/نرم‌افزاری** است که پردازنده را از اجرای برنامه جاری منحرف کرده و به یک **روال ویژه (ISR)** هدایت می‌کند. پس از اتمام ISR، CPU به برنامه اصلی بازمی‌گردد. #### **۲. انواع وقفه در ریزپردازنده‌ها** | **دسته‌بندی** | **نوع وقفه** | **منبع** | **مثال‌ها** | **ویژگی‌ها** | |-----------------------|---------------------------|--------------------------|--------------------------------|-----------------------------| | **سخت‌افزاری** | قابل Mask (INTR) | دستگاه‌های خارجی | کیبورد، ماوس | قابل غیرفعال‌سازی با CLI | | | غیرقابل Mask (NMI) | خطاهای حیاتی | قطع برق، خطای حافظه | فوراً پردازش می‌شود | | **نرم‌افزاری** | دستور INT | برنامه‌نویس | INT 21h در x86 | عمدی و کنترل‌شده | | **استثنا (Exception)** | خطای پردازش | CPU | تقسیم بر صفر، دستور نامعتبر | خودکار توسط CPU ایجاد می‌شود | #### **۳. نحوه اعمال وقفه در ۸۰۸۵** ۱. **فعال‌سازی وقفه:** - دستور `EI` (Enable Interrupts) برای فعال‌سازی وقفه‌های Maskable. - وقفه‌های NMI همیشه فعال هستند. ۲. **دریافت وقفه:** - دستگاه خارجی (مثل تایمر) سیگنال وقفه (مثل `RST 5.5`) را فعال می‌کند. ۳. **پاسخ CPU:** - ذخیره PC و وضعیت فعلی در پشته. - پرش به آدرس ثابت در **بردار وقفه** (مثال: `RST 5.5 → 002Ch`). ۴. **اجرای ISR:** - کدهای مدیریت وقفه اجرا می‌شوند (مثل خواندن داده از پورت). ۵. **بازگشت:** - دستور `RETI` (Return from Interrupt) برای بازگردانی وضعیت. #### **۴. مثال عملی در ۸۰۸۵** ```assembly ORG 0000h JMP MAIN ORG 002Ch ; آدرس ISR برای RST 5.5 PUSH PSW ; ذخیره وضعیت CALL READ_KEYBOARD POP PSW ; بازیابی وضعیت RETI ; بازگشت MAIN: EI ; فعال‌سازی وقفه HERE: JMP HERE ; حلقه بی‌نهایت ``` #### **۵. تفاوت وقفه با Polling** - **وقفه:** دستگاه خارجی CPU را آگاه می‌کند (کارآمدتر). - **Polling:** CPU مدام وضعیت دستگاه را چک می‌کند (هدررفت منابع). #### **۶. نکات کلیدی** - **اولویت وقفه‌ها:** TRAP (بالاترین) > RST 7.5 > RST 6.5 > RST 5.5 > INTR. - **زمان تأخیر (Latency):** فاصله بین وقوع وقفه تا شروع ISR. <hr style="border: 4px solid GREEN;"> ### ۸. نحوه عملیات آی‌سی ۸۲۵۹ (توسعه وقفه) را به اختصار شرح دهید؟ (۱) پاسخ: #### ** نحوه عملکرد آی‌سی ۸۲۵۹ (کنترلر وقفه برنامه‌پذیر - PIC)** آی‌سی **۸۲۵۹ (Programmable Interrupt Controller - PIC)** یک تراشه واسط است که برای **مدیریت وقفه‌های سخت‌افزاری** در سیستم‌های مبتنی بر ریزپردازنده (مانند x86) استفاده می‌شود. این تراشه امکان **اولویت‌بندی وقفه‌ها** و **کاهش بار پردازش وقفه‌ها توسط CPU** را فراهم می‌کند. --- #### **۱. وظایف اصلی ۸۲۵۹:** - **پذیرش و اولویت‌بندی وقفه‌ها** (۸ سطح وقفه در حالت عادی، قابل گسترش تا ۶۴ سطح با اتصال آبشاری چند ۸۲۵۹). - **ارسال سیگنال INTR به CPU** برای اطلاع از وقفه درخواستی. - **ارسال شماره بردار وقفه (Interrupt Vector)** به CPU پس از پاسخ **INTA** (Acknowledge). --- #### **۲. بلوک‌های اصلی ۸۲۵۹:** - **IRR (Interrupt Request Register):** وقفه‌های درخواست شده اما هنوز تایید نشده را ثبت می‌کند. - **ISR (In-Service Register):** وقفه‌هایی که در حال سرویس‌دهی هستند را نگه می‌دارد. - **IMR (Interrupt Mask Register):** وقفه‌های غیرفعال (ماسک) شده را مشخص می‌کند. - **Priority Resolver:** اولویت بین وقفه‌های فعال را تعیین می‌کند. --- #### **۳. مراحل پاسخ به وقفه توسط ۸۲۵۹:** 1. **درخواست وقفه (IR0-IR7):** یکی از خطوط IR فعال می‌شود. 2. **ثبت در IRR:** ۸۲۵۹ درخواست را در **IRR** ذخیره می‌کند. 3. **بررسی اولویت:** اگر وقفه با اولویت بالاتر از وقفه در حال اجرا باشد: - **INTR را به CPU می‌فرستد.** 4. **پاسخ CPU (INTA):** CPU پس از دریافت INTR، دو پالس **INTA#** ارسال می‌کند. - **پالس اول:** ۸۲۵۹ وقفه را از IRR به ISR منتقل می‌کند. - **پالس دوم:** ۸۲۵۹ **بردار وقفه (Interrupt Vector)** را روی گذرگاه داده قرار می‌دهد. 5. **پردازش وقفه توسط CPU:** CPU با استفاده از بردار وقفه، به **روال سرویس وقفه (ISR)** پرش می‌کند. 6. **پایان وقفه (EOI):** در پایان ISR، CPU باید **دستور EOI (End Of Interrupt)** را به ۸۲۵۹ ارسال کند تا ISR ریست شود. --- #### **۴. حالت‌های کاری ۸۲۵۹:** - **ICW (Initialization Command Words):** برای پیکربندی اولیه (مثل تعیین بردار وقفه، حالت آبشاری و ...). - **OCW (Operation Command Words):** برای کنترل عملیات (مثل EOI، تغییر اولویت و ...). --- #### **۵. کاربرد اصلی ۸۲۵۹:** - در سیستم‌های قدیمی x86 (مثل ۸۰۸۶) برای مدیریت وقفه‌های سخت‌افزاری (مثل صفحه‌کلید، تایمر و ...) استفاده می‌شد. - امروزه در پردازنده‌های مدرن، عملکرد آن در **APIC (Advanced PIC)** ادغام شده است. <hr style="border: 4px solid GREEN;"> ### ۹. مودهای عملیاتی ۸۲۵۵ (توسعه GPIO) را به اختصار شرح دهید؟ (۱) پاسخ: ### ** حالت‌های عملیاتی آی‌سی ۸۲۵۵ (PPI - Programmable Peripheral Interface)** آی‌سی **۸۲۵۵** یک تراشه **ورودی/خروجی برنامه‌پذیر (GPIO)** است که برای **افزایش پورت‌های I/O** در سیستم‌های مبتنی بر ریزپردازنده (مانند ۸۰۸۶) استفاده می‌شود. این تراشه دارای **۳ پورت ۸ بیتی (A, B, C)** است که می‌توانند در **حالت‌های مختلف** پیکربندی شوند. --- ### **۱. حالت‌های عملیاتی ۸۲۵۵:** #### **الف) حالت ۰ (Mode 0): حالت I/O ساده (Basic Input/Output)** - **ویژگی‌ها:** - هر پورت (**A, B, C**) می‌تواند به صورت مستقل **ورودی یا خروجی** باشد. - پورت **C** را می‌توان به دو نیمه **C‌upper (PC4-PC7)** و **C‌lower (PC0-PC3)** تقسیم کرد. - **بدون دستدهی (Handshaking)** و بدون کنترلر وقفه. - **کاربرد:** - اتصال به سوئیچ‌ها، LEDها، سنسورهای ساده و سایر دستگاه‌های بدون نیاز به همگام‌سازی. #### **ب) حالت ۱ (Mode 1): حالت I/O با دستدهی (Handshake)** - **ویژگی‌ها:** - از **پورت‌های A و B** برای **داده** و از **پورت C** برای سیگنال‌های کنترلی (Handshake) استفاده می‌شود. - **سیگنال‌های Handshake:** - **STB (Strobe Input):** دستگاه خارجی با این سیگنال به ۸۲۵۵ می‌گوید داده را دریافت کند. - **IBF (Input Buffer Full):** ۸۲۵۵ با این سیگنال تأیید می‌کند که داده را ذخیره کرده است. - **INTR (Interrupt Request):** در صورت فعال بودن، وقفه به CPU ارسال می‌شود. - **پورت A یا B می‌توانند ورودی یا خروجی باشند، اما نه همزمان در یک حالت.** - **کاربرد:** - ارتباط با دستگاه‌هایی مانند پرینتر، ADC و سایر تجهیزاتی که نیاز به تأیید دریافت/ارسال داده دارند. #### **ج) حالت ۲ (Mode 2): حالت باس دوطرفه (Bidirectional Bus)** - **ویژگی‌ها:** - **فقط پورت A** می‌تواند در این حالت کار کند. - **داده‌ها به صورت دوطرفه (هم ورودی و هم خروجی)** منتقل می‌شوند. - از **پورت C** برای سیگنال‌های کنترلی استفاده می‌شود: - **OBF (Output Buffer Full):** نشان‌دهنده آماده بودن داده برای دستگاه خارجی. - **ACK (Acknowledge):** دستگاه خارجی دریافت داده را تأیید می‌کند. - **INTR (Interrupt Request):** وقفه برای CPU ارسال می‌شود. - **کاربرد:** - ارتباط با حافظه‌ها یا دستگاه‌های دوطرفه مانند **هارددیسک‌های قدیمی**. --- ### **۲. نحوه پیکربندی ۸۲۵۵:** - **ثبات کنترل (Control Register)** تعیین می‌کند که هر پورت در چه حالتی کار کند. - **یک بایت کنترل** به ۸۲۵۵ ارسال می‌شود که حالت هر پورت را مشخص می‌کند. #### **مثال:** - **حالت ۰ با پورت A و B به صورت خروجی و پورت C به صورت ورودی:** ``` Control Word = 10000010 (0x82) ``` --- ### **۳. مقایسه حالت‌ها:** | **حالت** | **نوع ارتباط** | **پورت‌های مورد استفاده** | **کاربرد** | |------------|----------------------|--------------------------|-----------------------------| | **Mode 0** | ساده (بدون Handshake)| A, B, C (مستقل) | LED، سوئیچ، صفحه‌کلید | | **Mode 1** | با Handshake | A/B (داده) + C (کنترل) | پرینتر، ADC | | **Mode 2** | دوطرفه | A (داده) + C (کنترل) | حافظه، هارددیسک | --- ### **۴. نکته مهم:** - **پورت C** در حالت‌های ۱ و ۲ به عنوان **پورت کنترل** عمل می‌کند و نمی‌توان از تمام پین‌های آن به صورت I/O ساده استفاده کرد. <hr style="border: 4px solid GREEN;"> ### ۱۰. مطابق جدول زیر و رجیسترهای مربوط به ۸۲۵۵ ابتدا آی‌سی را در مود Simple قرار دهید، سپس بیت ۱ و ۲ از پورت A و ۷ و ۵ از پورت C را خروجی صفر قرار دهید؟ (۴) پاسخ: ### **پیکربندی ۸۲۵۵ در حالت ساده (Mode 0) و تنظیم بیت‌های خروجی** برای انجام این عملیات، مراحل زیر را دنبال می‌کنیم: #### **۱. قرار دادن ۸۲۵۵ در حالت ساده (Mode 0)** - **پورت A:** خروجی - **پورت B:** ورودی (فرضی، چون در سوال اشاره نشده) - **پورت C:** خروجی (برای بیت‌های مورد نظر) **مقدار ثبات کنترل (Control Register) برای حالت ساده:** - **فرمت بایت کنترل:** ``` D7 D6 D5 D4 D3 D2 D1 D0 ``` - **D7 = 1** (فعال‌سازی Mode Set) - **D6-D5 = 00** (Port A در Mode 0) - **D4 = 0** (Port A خروجی) - **D3 = 0** (Port C (Lower) خروجی) - **D2 = 0** (Port B در Mode 0) - **D1 = 1** (Port B ورودی - فرضی) - **D0 = 0** (Port C (Upper) خروجی) **مقدار نهایی:** ``` 1 0 0 0 0 1 0 0 → **0x84** (در مبنای هگز) ``` #### **۲. تنظیم بیت‌های خروجی در پورت‌ها** - **بیت ۱ و ۲ از پورت A را صفر می‌کنیم:** - پورت A یک پورت **خروجی** است، پس باید مقدار آن را طوری تنظیم کنیم که بیت‌های ۱ و ۲ صفر باشند. - مثال: اگر قبلاً **Port A = 0xFF (همه بیت‌ها ۱)** بوده، پس از تغییر: ``` Port A = 11111001 (0xF9) → بیت‌های ۱ و ۲ صفر شده‌اند. ``` - **بیت‌های ۷ و ۵ از پورت C را صفر می‌کنیم:** - پورت C نیز در حالت **خروجی** است. - مثال: اگر قبلاً **Port C = 0xFF** بوده، پس از تغییر: ``` Port C = 01011111 (0x5F) → بیت‌های ۷ و ۵ صفر شده‌اند. ``` --- ### **۳. کد اسمبلی نمونه (برای ۸۰۸۶)** ```assembly MOV AL, 84h ; مقداردهی ثبات کنترل (0x84) OUT 63h, AL ; آدرس ثبات کنترل ۸۲۵۵ (فرضی: 0x63) MOV AL, 0F9h ; تنظیم پورت A (بیت‌های ۱ و ۲ صفر) OUT 60h, AL ; آدرس پورت A (فرضی: 0x60) MOV AL, 5Fh ; تنظیم پورت C (بیت‌های ۷ و ۵ صفر) OUT 62h, AL ; آدرس پورت C (فرضی: 0x62) ``` --- ### **۴. جمع‌بندی:** 1. **پیکربندی ۸۲۵۵ در Mode 0** با ارسال **0x84** به ثبات کنترل. 2. **تنظیم بیت‌های ۱ و ۲ پورت A به صفر** با ارسال **0xF9** به پورت A. 3. **تنظیم بیت‌های ۷ و ۵ پورت C به صفر** با ارسال **0x5F** به پورت C. اگر آدرس‌های واقعی ۸۲۵۵ در سیستم شما متفاوت است، باید آدرس‌های **Control Port** و **Data Ports** را اصلاح کنید. <hr style="border: 4px solid GREEN;"> ### ۱۱. نحوه کار آی‌سی ۸۲۵۴ (کانتر) را شرح دهید؟ (۱) پاسخ: ### **نحوه عملکرد آی‌سی ۸۲۵۴ (Timer/Counter)** آی‌سی **۸۲۵۴** یک **تایمر/کاونتر برنامه‌پذیر** است که در سیستم‌های دیجیتال برای **تولید پالس، اندازه‌گیری فرکانس، تقسیم فرکانس و کنترل وقفه‌های زمانی** استفاده می‌شود. این تراشه شامل **۳ کانال مستقل ۱۶ بیتی (Timer 0, Timer 1, Timer 2)** است که هر کدام می‌توانند در **مودهای مختلف** پیکربندی شوند. --- ### **۱. بلوک‌های اصلی ۸۲۵۴:** - **کانال‌های ۰، ۱ و ۲:** هر کانال یک تایمر/کاونتر مستقل با ثبات‌های: - **CR (Count Register):** مقدار اولیه شمارش. - **OL (Output Latch):** ذخیره مقدار فعلی کاونتر. - **ثبات کنترل (Control Register):** تعیین مود عملیاتی هر کانال. - **باس داده (Data Bus):** ارتباط با CPU برای تنظیم پارامترها. --- ### **۲. مودهای عملیاتی ۸۲۵۴:** هر کانال می‌تواند در یکی از **۶ حالت** زیر پیکربندی شود: | **مود** | **نام** | **توضیح** | |---------|--------------------------|---------------------------------------------------------------------------| | **۰** | Interrupt on Terminal Count | پس از اتمام شمارش، خروجی HIGH شده و وقفه ایجاد می‌کند. | | **۱** | Hardware Retriggerable One-Shot | با فعال شدن Trigger، یک پالس منفرد تولید می‌کند. | | **۲** | Rate Generator | تقسیم فرکانس (پالس خروجی به صورت دوره‌ای). | | **۳** | Square Wave Generator | تولید موج مربعی با فرکانس برنامه‌ریزی شده. | | **۴** | Software Triggered Strobe | با نوشتن مقدار به کاونتر، یک پالس منفی تولید می‌کند. | | **۵** | Hardware Triggered Strobe | مشابه مود ۴، اما با Trigger خارجی. | --- ### **۳. نحوه عملکرد پایه‌ها:** - **CLK (Clock):** ورودی کلاک برای شمارش. - **GATE:** فعال/غیرفعال کردن کاونتر (مثلاً در مود ۱ با GATE=1 شروع می‌شود). - **OUT:** سیگنال خروجی (بسته به مود، پالس یا موج مربعی است). --- ### **۴. مراحل برنامه‌نویسی ۸۲۵۴:** 1. **تنظیم ثبات کنترل:** انتخاب کانال و مود عملیاتی. - مثال: `MOV AL, 00110110b` (کانال ۰، مود ۳، فرمت خواندن/نوشتن ۱۶ بیتی). - `OUT 43h, AL` (فرضاً آدرس ثبات کنترل ۰x43). 2. **بارگذاری مقدار اولیه کاونتر:** - مثال: `MOV AX, 1000` (تعداد پالس‌های مورد نظر). - `OUT 40h, AL` (ارسال بایت کم ارزش به کانال ۰). - `OUT 40h, AH` (ارسال بایت پر ارزش). 3. **فعال کردن کانال:** (با تنظیم GATE یا منتظر ماندن برای Trigger). --- ### **۵. مثال کاربردی (تولید وقفه تایمر در x86):** - **کانال ۰** در مود ۳ (موج مربعی) برای وقفه سخت‌افزاری تایمر سیستم (IRQ0) استفاده می‌شود. - مقدار کاونتر = `1193180 Hz / فرکانس مورد نظر` (مثلاً ۱ms = 1193). --- ### **۶. تفاوت ۸۲۵۴ با ۸۲۵۳:** - **۸۲۵۴** نسخه پیشرفته‌تر **۸۲۵۳** با پشتیبانی از فرکانس‌های بالاتر و قابلیت‌های اضافه است. --- ### **۷. کاربردهای رایج:** - **تولید وقفه زمانی** (مثل تایمر سیستم در کامپیوترهای قدیمی). - **مدولاسیون PWM** (کنترل سرعت موتور). - **اندازه‌گیری فرکانس سیگنال‌های خارجی.** <hr style="border: 4px solid GREEN;"> ### ۱۲. حافظه FIFO به چه صورت عمل می‌کند؟ (۰.۵) پاسخ: **FIFO** (First-In, First-Out) یک نوع حافظه یا بافر است که داده‌ها به ترتیب **ورود**، **خروج** پیدا می‌کنند (مثل صف انتظار). این حافظه در سیستم‌های دیجیتال برای **همگام‌سازی داده‌ها، کاهش هدزدن (Latency) و مدیریت جریان داده** استفاده می‌شود. --- ### **۱. ساختار FIFO:** - **دو اشارهگر (Pointer):** - **Write Pointer (WP):** نشان‌دهنده محل نوشتن داده جدید. - **Read Pointer (RP):** نشان‌دهنده محل خواندن داده قدیمی. - **ثبات‌های ذخیره‌سازی:** آرایه‌ای از سلول‌های حافظه (معمولاً SRAM یا رجیسترها). - **سیگنال‌های کنترلی:** - **Full:** نشان‌دهنده پر بودن FIFO. - **Empty:** نشان‌دهنده خالی بودن FIFO. --- ### **۲. نحوه عملکرد:** 1. **نوشتن داده (Write Operation):** - داده جدید در محل **WP** ذخیره می‌شود. - **WP** یک واحد افزایش می‌یابد. - اگر **WP = RP** و عملیات نوشتن انجام شود، **Overflow** رخ می‌دهد. 2. **خواندن داده (Read Operation):** - داده از محل **RP** خوانده می‌شود. - **RP** یک واحد افزایش می‌یابد. - اگر **RP = WP** و عملیات خواندن انجام شود، **Underflow** رخ می‌دهد. 3. **حالت‌های خاص:** - **FIFO خالی:** وقتی **RP = WP**. - **FIFO پر:** وقتی **WP یک دور کامل زده و به RP رسیده باشد**. --- ### **۳. انواع FIFO:** | **نوع** | **توضیح** | **کاربرد** | |-----------------|--------------------------------------------------------------------------|---------------------------------| | **سخت‌افزاری** | با تراشه‌های اختصاصی (مثل IDT720x) یا درون FPGA پیاده‌سازی می‌شود. | ارتباطات پرسرعت (USB, Ethernet)| | **نرم‌افزاری** | با آرایه‌ها و اشارهگرها در کد پیاده‌سازی می‌شود. | صف‌های پردازشی در سیستم‌عامل‌ها | --- ### **۴. مثال کاربردی:** - **ارتباط UART:** FIFO برای ذخیره داده‌های ارسالی/دریافتی استفاده می‌شود تا از از دست رفتن داده جلوگیری کند. - **پردازش تصویر:** بافر کردن پیکسل‌ها قبل از پردازش توسط CPU یا GPU. --- ### **۵. مزایای FIFO:** - مدیریت خودکار جریان داده بدون نیاز به وقفه. - کاهش هدزدن در سیستم‌های ناهمگام (مثل ارتباط بین دو ماژول با کلاک متفاوت). <hr style="border: 4px solid GREEN;"> ### ۱۳. پروگرام کانتر و استک پوینتر را به اختصار شرح دهید؟ (۱) پاسخ: #### **۱. پروگرام کانتر (Program Counter - PC)** - **تعریف:** یک رجیستر **۱۶ یا ۳۲ بیتی** در CPU که آدرس دستور بعدی برای اجرا را نگه می‌دارد. - **نحوه کار:** - پس از هر فراخوانی دستور، به صورت **خودکار افزایش** می‌یابد (مثلاً +۱ در AVR، +۲ در ۸۰۸۶ به دلیل حافظه بایت آدرسده). - در صورت **پرش (Jump)، فراخوانی زیرروال (Call)** یا **وقفه**، مقدار جدیدی می‌گیرد. - **کاربرد:** کنترل توالی اجرای دستورات در برنامه. #### **۲. استک پوینتر (Stack Pointer - SP)** - **تعریف:** یک رجیستر **۱۶ یا ۳۲ بیتی** که آدرس بالای استک (Last Used Address) را نشان می‌دهد. - **نحوه کار:** - **Push:** داده را در استک ذخیره و **SP کاهش** می‌یابد (در معماری‌های با استک نزولی مثل x86 و AVR). - **Pop:** داده را از استک بازیابی و **SP افزایش** می‌یابد. - **کاربرد:** ذخیره موقت داده‌ها، آدرس بازگشت از زیرروال‌ها و مدیریت وقفه‌ها. --- ### **مقایسه کلیدی:** | **ویژگی** | **پروگرام کانتر (PC)** | **استک پوینتر (SP)** | |--------------------|--------------------------------------|------------------------------------| | **نوع رجیستر** | اشاره‌گر به دستور بعدی | اشاره‌گر به بالای استک | | **تغییر مقدار** | اتوماتیک (اجرای دستورات/پرش) | دستی (Push/Pop) یا توسط Call/Ret | | **اهمیت** | حیاتی برای اجرای برنامه | حیاتی برای مدیریت حافظه موقت | --- ### **مثال در معماری‌های مختلف:** - **۸۰۸۶:** - **PC = IP (Instruction Pointer)**، **SP = SP** (نزولی، شروع از SS:SP). - دستور `CALL` آدرس بازگشت را Push می‌کند و `RET` آن را Pop می‌کند. - **AVR:** - **PC = ۱۶ بیتی**، **SP = ۸ یا ۱۶ بیتی** (بسته به مدل). - دستور `PUSH R16` مقدار رجیستر را در استک ذخیره می‌کند. <hr style="border: 4px solid GREEN;"> ### ۱۴. راه‌های اعلان کلید را بنویسید و هر یک را به اختصار شرح دهید؟ (۲) پاسخ: ### **راه‌های اعلان (تشخیص) کلید (Key Detection Methods)** در سیستم‌های دیجیتال، برای تشخیص فشرده شدن کلید (Key Press) از روش‌های مختلفی استفاده می‌شود. این روش‌ها به دو دسته **سخت‌افزاری** و **نرم‌افزاری** تقسیم می‌شوند: --- ### **۱. روش‌های سخت‌افزاری** #### **الف) ماتریس کلید (Keypad Matrix)** - **توضیح:** - کلیدها در یک ساختار **سطری-ستونی** (مثلاً ۴×۴) چیده می‌شوند. - با اسکن سطرها و بررسی تغییرات در ستون‌ها، کلید فشرده شده شناسایی می‌شود. - **مزایا:** - کاهش تعداد پایه‌های مورد نیاز (مثلاً ۸ پایه برای ۱۶ کلید). - **معایب:** - نیاز به اسکن مداوم (Polling) یا وقفه. #### **ب) مقاومت Pull-Up/Pull-Down** - **توضیح:** - هر کلید به یک پایه GPIO متصل است و با **مقاومت Pull-Up** (مثلاً به VCC) یا **Pull-Down** (به GND) تنظیم می‌شود. - فشرده شدن کلید باعث تغییر سطح منطقی (HIGH → LOW یا بالعکس) می‌شود. - **مزایا:** - ساده و ارزان. - **معایب:** - برای تعداد زیاد کلیدها به پایه‌های زیادی نیاز دارد. #### **ج) رمزگذار (Encoder)** - **توضیح:** - از آی‌سی‌های مانند **74HC148** (8-to-3 Encoder) استفاده می‌شود. - هر کلید یک کد منحصربه‌فرد تولید می‌کند. - **کاربرد:** - صفحه‌کلیدهای صنعتی با تعداد کلیدهای زیاد. --- ### **۲. روش‌های نرم‌افزاری** #### **الف) پولینگ (Polling)** - **توضیح:** - CPU به صورت مداوم وضعیت کلیدها را چک می‌کند. - مثال: در یک حلقه بی‌نهایت، پایه‌های GPIO خوانده می‌شوند. - **مزایا:** - پیاده‌سازی ساده. - **معایب:** - مصرف منابع CPU و کاهش کارایی. #### **ب) وقفه (Interrupt)** - **توضیح:** - کلیدها به پایه‌های وقفه (مثل INT0, INT1 در AVR) متصل می‌شوند. - با فشرده شدن کلید، یک وقفه ایجاد شده و CPU پردازش اصلی را متوقف می‌کند. - **مزایا:** - واکنش سریع و بهینه‌سازی مصرف انرژی. - **معایب:** - محدودیت در تعداد پایه‌های وقفه. #### **ج) دیبانس نرم‌افزاری (Debouncing)** - **توضیح:** - نویز مکانیکی کلید (Bounce) با تاخیر یا الگوریتم‌های نرم‌افزاری فیلتر می‌شود. - مثال: استفاده از تایمر یا چک کردن چندباره وضعیت کلید. - **مزایا:** - جلوگیری از تشخیص اشتباه چندباره کلید. --- ### **۳. مقایسه روش‌ها** | **روش** | **سرعت** | **مصرف منابع** | **پیچیدگی** | **کاربرد** | |-----------------------|----------|----------------|-------------|---------------------------| | **ماتریس کلید** | متوسط | متوسط | متوسط | صفحه‌کلید‌ها | | **ءPull-Up/Down** | سریع | کم | کم | کلیدهای تک | | **رمزگذار** | سریع | کم | بالا | سیستم‌های صنعتی | | **پولینگ** | کند | زیاد | کم | سیستم‌های ساده | | **وقفه** | بسیار سریع | کم | متوسط | سیستم‌های بلادرنگ | --- ### **۴. مثال کاربردی در AVR (با وقفه و دیبانس)** ```c #include <avr/io.h> #include <avr/interrupt.h> ISR(INT0_vect) { // وقفه هنگام فشرده شدن کلید _delay_ms(20); // دیبانس if (!(PIND & (1 << PD2))) { // چک مجدد کلید // کد واکنش به کلید } } int main() { DDRD &= ~(1 << PD2); // پایه PD2 به عنوان ورودی PORTD |= (1 << PD2); // فعال کردن Pull-Up داخلی EICRA |= (1 << ISC01); // وقفه روی لبه پایین‌رونده EIMSK |= (1 << INT0); // فعال کردن وقفه INT0 sei(); // فعال کردن وقفه‌های全局 while (1) { } } ``` <hr style="border: 4px solid GREEN;"> ### ۱۵. بایت تولید شده از فشردن کلید ۱۲ از صفحه کلید اول در مود 2Key بنویسید؟ (۱) پاسخ: ### **بایت تولید شده از فشردن کلید ۱۲ در صفحه‌کلید ماتریسی (مود 2Key)** در **مود 2Key Rollover** (تشخیص همزمان دو کلید)، صفحه‌کلید ماتریسی (مثلاً ۴×۴) با اسکن سطرها و ستون‌ها، یک **کد اسکن (Scan Code)** تولید می‌کند. برای کلید **شماره ۱۲** در یک صفحه‌کلید استاندارد: --- ### **۱. ساختار بایت خروجی در مود 2Key:** - بایت اسکن معمولاً به صورت **۱ بایت (۸ بیتی)** است و ترکیبی از **سطر (Row)** و **ستون (Column)** را نشان می‌دهد. - فرمت رایج: - **۴ بیت بالا (High Nibble):** شماره سطر (Row) - **۴ بیت پایین (Low Nibble):** شماره ستون (Column) --- ### **۲. محاسبه کد کلید ۱۲ در ماتریس ۴×۴:** - فرض کنید صفحه‌کلید شما **۴ سطر و ۴ ستون** دارد (۱۶ کلید، شماره‌گذاری از ۰ تا ۱۵). - کلید **۱۲** در این ماتریس: - **سطر (Row):** `12 / 4 = 3` (سطر چهارم، چون شماره‌گذاری از ۰ شروع می‌شود). - **ستون (Column):** `12 % 4 = 0` (ستون اول). - **مقدار بایت:** - سطر ۳ → `0011` (باینری) - ستون ۰ → `0000` (باینری) - ترکیب: `0011 0000` = **`0x30`** (هگزادسیمال). --- ### **۳. نکات مهم:** - **مود 2Key Rollover:** سیستم می‌تواند همزمان دو کلید فشرده شده را تشخیص دهد (مثلاً `0x30` برای کلید ۱۲ و `0x21` برای کلید ۹). - **دیبانسینگ:** برای جلوگیری از نویز، معمولاً یک تاخیر ۲۰-۵۰ میلی‌ثانیه‌ای اعمال می‌شود. - **تفاوت با مود NKRO:** در مود **N-Key Rollover**، تمام کلیدها به صورت جداگانه اسکن می‌شوند. --- ### **۴. مثال خروجی در برنامه‌نویسی:** ```c // مثال کد C برای خواندن کلید ۱۲ در AVR uint8_t key = 0x30; // بایت اسکن کلید ۱۲ if (key == 0x30) { printf("کلید ۱۲ فشرده شد!"); } ``` <hr style="border: 4px solid GREEN;"> ### ۱۶. معماری Risc و Cisc را تعریف و مقایسه کنید؟ همچنین علت اصلی استفاده از ریسک را بنویسید. (۱) پاسخ: #### **۱. تعریف معماری‌ها** #### **الف) CISC (Complex Instruction Set Computer)** - **تعریف:** - دارای **دستورات پیچیده و متنوع** است که هر کدام می‌توانند چندین عمل را انجام دهند. - مثال: یک دستور می‌تواند همزمان **بارگذاری از حافظه، محاسبه و ذخیره نتیجه** را انجام دهد. - **ویژگی‌ها:** - دستورات طولانی و با سایز متغیر (مثل x86). - ترانزیستورهای بیشتر برای پیاده‌سازی دستورات. - معمولاً **کدهای برنامه کوتاه‌تر** (به دلیل قدرت دستورات). #### **ب) RISC (Reduced Instruction Set Computer)** - **تعریف:** - دارای **دستورات ساده و ثابت‌طول** است که هر کدام فقط یک عمل ساده انجام می‌دهند. - مثال: دستور `ADD` فقط جمع می‌کند و دستور `LOAD` فقط داده را از حافظه می‌خواند. - **ویژگی‌ها:** - دستورات **۴ بایتی و یکنواخت** (مثل ARM، RISC-V). - تعداد ترانزیستور کمتر و مصرف انرژی پایین‌تر. - **نیاز به کدهای طولانی‌تر** (چون هر عمل ساده باید جداگانه اجرا شود). --- #### **۲. مقایسه RISC و CISC** | **معیار** | **CISC** (مثل x86) | **RISC** (مثل ARM, RISC-V) | |-------------------------|----------------------------------|----------------------------------| | **دستورات** | پیچیده، چندعملیاتی، متغیر‌طول | ساده، تک‌عملیاتی، ثابت‌طول | | **سرعت اجرا** | کندتر (به دلیل پیچیدگی) | سریع‌تر (بهینه‌سازی خط لوله) | | **مصرف انرژی** | بیشتر | کمتر (مهم در موبایل و IoT) | | **پیاده‌سازی سخت‌افزار**| پیچیده | ساده و مقرون‌به‌صرفه | | **کدنویسی** | برنامه‌ها کوتاه‌تر | برنامه‌ها طولانی‌تر | | **مثال‌ها** | Intel 8086، AMD64 | ARM Cortex، RISC-V، MIPS | --- #### **۳. علت اصلی استفاده از RISC** - **بهینه‌سازی عملکرد و مصرف انرژی:** - دستورات ساده‌تر باعث **اجرای سریع‌تر** (با Pipeline کردن) و **کاهش توان مصرفی** می‌شوند. - مناسب برای دستگاه‌های **موبایل،嵌入式 سیستم‌ها (Embedded) و پردازنده‌های مدرن** (مثل Apple M1). - **مقیاس‌پذیری:** - معماری‌های RISC (مثل ARM و RISC-V) انعطاف‌پذیر هستند و برای **پردازنده‌های چندهسته‌ای** مناسب‌ترند. - **کاهش هزینه طراحی:** - پیاده‌سازی سخت‌افزار ساده‌تر، هزینه تولید را کاهش می‌دهد. --- #### **۴. مثال کاربردی** - **پردازنده‌های CISC:** - Intel Core i7 (برای کامپیوترهای دسکتاپ با سازگاری بالا). - **پردازنده‌های RISC:** - ARM Cortex-A (موبایل)، ESP32 (IoT)، RISC-V (پردازنده‌های Open-Source). #### **نتیجه‌گیری:** امروزه به دلیل نیاز به **کارایی بالا و مصرف انرژی کم**، معماری RISC غالب شده است (مثل پردازنده‌های ARM در اکثر موبایل‌ها و آیوت‌ها). با این حال، CISC هنوز در بازار دسکتاپ به دلیل **سازگاری عقبرو** حفظ شده است. <hr style="border: 4px solid GREEN;"> <hr style="border: 4px solid GREEN;"> ## جداول --- ### جدول فرمت کلمه وضعیت/داده | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Status of control | Status of shift | Row | Row | Row | Column | Column | Column | | | | | | --- ### جدول فرمت کلمه کنترل | Mode | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Control** | I/O-BSR | G_A Mode(0,1,2) | G_A Mode(0,1,2) | PA(I/O) | PCU(I/O) | G_B Mode(0,1) | PB(I/O) | PCL(I/O) | | **BSR** | I/O-BSR | - | - | - | Bit Select | Bit Select | Bit Select | S/R | | | | | | | | | | | --- ### جدول انتخاب (Action) | CS | A₁ | A₀ | Action | | :---: | :--: | :--: | :---: | | 0 | 0 | 0 | Port A | | 0 | 0 | 1 | Port B | | 0 | 1 | 0 | Port C | | 0 | 1 | 1 | Control Reg | | 1 | X | X | Not select | <hr style="border: 4px solid GREEN;"> <hr style="border: 4px solid GREEN;"> <hr style="border: 4px solid GREEN;"> ## 3 سوالات --- ### ۱. پردازش را به اختصار شرح دهید؟ (۱) --- ### ۲. مزیت بزرگ بودن Data BUS و Address BUS را بنویسید و ظرفیت یک حافظه با آدرس باس 5 بیتی را بنویسید؟ (۱.۵) --- ### ۳. مفهوم بیت‌های فلگ رجیستر واحد ALU را به اختصار شرح دهید؟ (۱.۵) | CY | P | AC | Z | S | | :--: | :--: | :--: | :--: | :--: | | | | | | | --- ### ۴. تفاوت رجیسترهای General Purpose با Special Purpose در 8085 را بنویسید و دو رجیستر قابل دسترس را نام ببرید؟ (۲) --- ### ۵. چرخه پردازش CPU را همراه با وقفه رسم کنید؟ (۱) --- ### ۶. وقفه چیست و انواع وقفه را نام ببرید ضمنا نحوه اعمال وقفه را نام ببرید؟ (۲) --- ### ۷. نحوه عملیات آی‌سی ۸۲۳۷ (DMA) را به اختصار شرح دهید؟ (۱) --- ### ۸. مودهای عملیاتی 8255 (توسعه GPIO) را به اختصار شرح دهید؟ (۱) --- ### ۹. مطابق جدول زیر و رجیسترهای مربوط به 8255 ابتدا آی‌سی را در مود Simple قرار دهید سپس بیت ۱ و ۲ از پورت A و ۷ و ۵ از پورت C را خروجی صفر قرار دهید؟ (۴) --- ### ۱۰. نحوه کار آی‌سی 8259 (توسعه وقفه) را شرح دهید؟ (۱) --- ### ۱۱. حافظه FIFO به چه صورت عمل می‌کند؟ (۰.۵) --- ### ۱۲. پروگرام کانتر و استک پوینتر را به اختصار شرح دهید و موارد استفاده آن را بنویسید؟ (۱) --- ### ۱۳. راه‌های اعلان کلید را بنویسید و هر یک را به اختصار شرح دهید؟ (۲) --- ### ۱۴. بایت تولید شده از فشردن کلید 12 از صفحه کلید اول و 53 از صفحه دوم در مود 2Key بنویسید؟ (۱) --- ### ۱۵. نحوه کار بخش Display در آی‌سی 8279 را شرح دهید؟ (۱) --- ### ۱۶. نحوه کار اعلام کلید در مود ۲ و ۱ در آی‌سی 8279 را شرح دهید؟ (۱) --- --- --- ## جداول --- **جدول ۱: فرمت کلمه وضعیت/داده** | D۷ | D۶ | D۵ | D۴ | D۳ | D۲ | D۱ | D۰ | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | Status of control | Status of shift | Row | Column | | | | | | --- **جدول ۲: فرمت کلمه کنترل** | Mode | D۷ | D۶ | D۵ | D۴ | D۳ | D۲ | D۱ | D۰ | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **Control** | I/O | BSR | G_A Mode(۰,۱,۲) | PA(I|O) | PCU(I|O) | G_B Mode(۰,۱) | PB(I|O) | PCL(I|O) | | **BSR** | I/O | BSR | - | - | Bit Select | S|R | | | | | | | | | | | --- **جدول ۳: جدول انتخاب (Action)** | CS | A₁ | A₀ | Action | | :---: | :--: | :--: | :---: | | ۰ | ۰ | ۰ | Port A | | ۰ | ۰ | ۱ | Port B | | ۰ | ۱ | ۰ | Port C | | ۰ | ۱ | ۱ | Control Reg | | ۱ | X | X | Not select |

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password
    or
    Sign in via Google Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully