<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 سوالات
---
### ۱. الگوریتم و پردازش را توضیح دهید. (۱ نمره)
#### **۱. تعریف الگوریتم**
الگوریتم مجموعهای از **دستورالعملهای مرحلهبهمرحله، دقیق و محدود** است که برای **حل یک مسئله یا انجام یک کار مشخص** طراحی میشود.
#### **۲. تعریف پردازش (Processing)**
پردازش به **اجرای عملیاتهای محاسباتی یا منطقی روی دادهها** توسط یک سیستم کامپیوتری (مثل ریزپردازنده) گفته میشود.
**مراحل پردازش در ریزپردازنده:**
1. دریافت دادهها (Fetch): دادهها از حافظه خوانده میشوند.
2. رمزگشایی (Decode): دستورالعمل تفسیر میشود.
3. اجرا (Execute): عملیات موردنظر (مثل جمع، ضرب، مقایسه) انجام میشود.
4. ذخیره نتیجه (Store): نتیجه در حافظه یا رجیسترها ذخیره میشود.
<hr style="border: 4px solid GREEN;">
### ۲. بزرگ بودن Add.Bus و DataBus هر یک چه مزایایی دارند؟ (۱ نمره)
### **مزایای بزرگ بودن Address Bus:**
۱. **دسترسی به حافظه بیشتر:** با افزایش عرض Address Bus، تعداد مکانهای قابل آدرسدهی حافظه به صورت نمایی رشد میکند.
۲. **پشتیبانی از برنامههای سنگین:** سیستمهای عامل و نرمافزارهای پیشرفته به فضای آدرس بزرگتری نیاز دارند.
### **مزایای بزرگ بودن Data Bus:**
۱. **سرعت انتقال داده بالاتر:** عرض بیشتر Data Bus باعث انتقال حجم بیشتری از داده در هر سیکل کلاک میشود.
۲. **بهبود عملکرد پردازش:** برای عملیاتهایی مثل پردازش تصویر یا محاسبات سنگین، گذرگاه عریضتر کارایی را افزایش میدهد.
<hr style="border: 4px solid GREEN;">
### ۳. یک حافظه ۴ گیگابایتی به چه اندازه Add.Bus نیازمند است؟ (۱ نمره)
#### **۱. تبدیل ۴ گیگابایت به بایت:**
$$
4 \text{ GB} = 4 \times 1024 \times 1024 \times 1024 = 2^{32} \text{ byte}
$$
#### **۲. محاسبهی تعداد خطوط Address Bus:**
$$
2^n = 2^{32} \implies n = 32
$$
**جواب نهایی:**
✅ یک حافظهی **۴ گیگابایتی** به **گذرگاه آدرس ۳۲ بیتی (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**
```mermaid
flowchart LR
Fetch --> Decode --> Execute --> Store
Store --> Fetch
```
<hr style="border: 4px solid GREEN;">
### ۶. وقفه چیست و انواع یادآوری وقفه را بنویسید؟ (۱ نمره)
#### **۱. تعریف وقفه (Interrupt)**
وقفه یک **مکانیسم سیگنال دهی** است که توسط سختافزار یا نرمافزار به CPU ارسال میشود تا پردازنده را از انجام برنامه جاری منحرف کرده و به یک **روال خاص (ISR - Interrupt Service Routine)** هدایت کند. پس از اتمام روال، CPU به برنامه اصلی بازمیگردد.
#### **۴. انواع وقفه از نظر قابلیت Mask شدن**
| نوع | قابلیت مسدودسازی | مثال |
|-----|------------------|-------|
| **قابل Mask (Maskable)** | قابل غیرفعال کردن توسط دستور CLI | وقفه تایمر |
| **غیرقابل Mask (Non-Maskable - NMI)** | همیشه فعال | خطای حافظه، قطع برق |
**نمودار فرآیند وقفه:**
```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 |
| :----: | :------: | :------: | :------: | :----: | :-----: | :------: | :----: | :-----: |
آموزش داده نشده.
<hr style="border: 4px solid GREEN;">
### ۸. در 8279 (Key Board & Disp.) به سوالات زیر پاسخ دهید. (۵ نمره)
**الف)** مفهوم over run در قسمت کلید چیست؟
**ب)** نحوه نمایش دو نمایشگر را به اختصار یا بلوکی توضیح دهید؟
**پ)** کلیدهای ۱۷ و ۶ از صفحه دوم و ۴۵ تاچ می شود کدهای تولید شده از کلیدها را در مود 2Key_Lockout بنویسید؟
#### الف) **Overrun** خطایی است که هنگامی رخ میدهد که **بافر کیبورد پر باشد** (دو کلید یا بیشتر فشرده شده باشند)
#### ب) تدریس نشده
#### پ) تدریس نشده
### **جمعبندی نهایی**
| بخش | پاسخ |
|------|-------|
| **Overrun** | خطای ناشی از پر بودن بافر کیبورد |
| **نمایشگر دوگانه** | تدریس نشده |
| **کدهای کلید** | تدریس نشده |
<hr style="border: 4px solid GREEN;">
### ۹. تفاوت Risc و Cisc را بنویسید و دلیل استفاده از Cisc را بیان کنید. (۱ نمره)
### **تفاوتهای اصلی RISC و CISC**
| **مشخصه** | **RISC (Reduced Instruction Set Computer)** | **CISC (Complex Instruction Set Computer)** |
|------------------|--------------------------------------------|--------------------------------------------|
| **تعداد دستورالعملها** | کم (~100 دستور) | زیاد (~300-500 دستور) |
| **اجرا در چرخه کلاک** | معمولاً ۱ چرخه | چند چرخه (بسته به پیچیدگی) |
| **طراحی دستورات** | ساده و بهینه | پیچیده با قابلیتهای چندگانه |
| **مصرف توان** | پایین (مناسب موبایل/سیستمهای نهفته) | بالا (سرور/دسکتاپ) |
| **سرعت اجرا** | بالاتر به دلیل خط لوله کارآمد | کندتر به دلیل پیچیدگی |
| **فضای اشغالی تراشه** | کوچکتر | بزرگتر |
### **دلیل استفاده از CISC**
۱. **سازگاری با نرمافزارهای قدیمی**: امکان اجرای کدهای نوشته شده برای نسلهای قبلی پردازندهها (مثل برنامههای x86).
۲. **کاهش حجم کد برنامه**: به دلیل وجود دستورات پیچیده و همهکاره، یک دستور میتواند کار چند دستور ساده را انجام دهد.
۳. **سهولت در برنامهنویسی سطح پایین**: برای برنامهنویسان اسمبلی، دستورات پیچیده میتوانند کار را سادهتر کنند.
۴. **کاربرد در سیستمهای عمومی**: مناسب برای اجرای برنامههای سنگین و متنوع (مثل ویرایش ویدیو، بازیها) روی کامپیوترهای رومیزی و سرورها.
### **دلیل استفاده از RISC**
۱. **سرعت اجرای بالا**: به دلیل سادگی، اکثر دستورالعملها در یک سیکل ساعت اجرا میشوند و این معماری برای پردازش خط لوله (Pipelining) بسیار کارآمد است.
۲. **مصرف انرژی کمتر**: سختافزار سادهتر و اجرای سریعتر دستورات منجر به مصرف توان بسیار پایین میشود که آن را برای دستگاههای قابل حمل (موبایل، تبلت) ایدهآل میکند.
۳. **هزینه و پیچیدگی کمتر**: با داشتن مجموعه دستورات کوچک، فضای کمتری روی تراشه اشغال میشود که هزینه تولید و پیچیدگی طراحی را کاهش میدهد.
۴. **کارایی کامپایلر**: در معماری RISC، تمرکز بر بهینهسازی کد توسط کامپایلر است تا بهترین ترکیب از دستورات ساده برای اجرای یک وظیفه انتخاب شود.
### **جمعبندی: کجا از کدام معماری استفاده میشود؟**
| **کاربرد** | **معماری ترجیحی** | **دلیل** |
| :--- | :--- | :--- |
| موبایل/تبلت | RISC (ARM) | مصرف انرژی پایین و حرارت کمتر |
| سرور/دسکتاپ | CISC (x86) | سازگاری و قدرت محاسباتی بالا |
| سیستمهای نهفته | RISC | سادگی، هزینه پایین و مصرف بهینه |
| پردازش ابری | هر دو (ARM/x86) | بسته به نیاز (صرفهجویی در انرژی یا سازگاری) |
**نتیجه:**
- **RISC:** سرعت بالا، مصرف انرژی کمتر (مناسب موبایل سیستم).
- **CISC:** انعطافپذیری بیشتر، سازگاری بهتر (مناسب دسکتاپ و سرورها).
<hr style="border: 4px solid GREEN;">
<hr style="border: 4px solid GREEN;">
<hr style="border: 4px solid GREEN;">
## 2 سوالات
---
### ۱. الگوریتم را به اختصار شرح دهید؟ (۱)
.سوال 1 سری 1 پاسخ داده شد
<hr style="border: 4px solid GREEN;">
### ۲. ظرفیت یک حافظه با خط آدرس ۱۰ بیت چقدر است؟ (۰.۵)
#### **محاسبه برای ۱۰ بیت آدرس:**
$$
2^{10} = 1024 \ \text{خانه حافظه}
$$
$$
1024 \ \text{بایت} = \textbf{۱ کیلوبایت (KB)}
$$
#### **نتیجه نهایی:**
یک حافظه با **۱۰ بیت خط آدرس** میتواند **۱ کیلوبایت (KB)** داده را آدرسدهی کند.
<hr style="border: 4px solid GREEN;">
### ۳. مزیت بزرگ بودن گذرگاه داده چیست؟ (۰.۵)
- **Address Bus بزرگتر → حافظه بیشتر در دسترس.**
- **Data Bus بزرگتر → سرعت بالاتر در پردازش.**
<hr style="border: 4px solid GREEN;">
### ۴. مفهوم بیتهای فلگ رجیستر واحد ALU را به اختصار شرح دهید؟ (۱.۵)
| S | Z | --- | AC | --- | P | --- | CY |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
تکراری
<hr style="border: 4px solid GREEN;">
### ۵. تفاوت رجیسترهای General Purpose با Special Purpose در ۸۰۸۵ را بنویسید و دو رجیستر قابل دسترس را نام ببرید؟ (۲)
#### **۱. رجیسترهای 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. Register Pair HL**
- **کاربرد:**
- اشارهگر به حافظه (مثال: `MOV A, M` داده را از آدرس HL به A میآورد).
- محاسبات ۱۶ بیتی (مثل `DAD H` که HL = HL + HL).
- **دسترسی:** هر دو بخش H و L قابل نوشتن/خواندن هستند (مثال: `MOV H, B`).
**2. Accumulator (A)**
- **کاربرد:** ذخیره نتایج عملیات محاسباتی (مثل `ADD B` نتیجه را در A میریزد).
- **دسترسی:** مستقیماً در دستورالعملها استفاده میشود (مثال: `MOV A, 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 را همراه با وقفه رسم کنید؟ (۱)
``` mermaid
graph TD
Start[شروع] --> Fetch["دریافت دستور - Fetch"]
Fetch --> Decode["رمزگشایی - Decode"]
Decode --> Execute["اجرا - Execute"]
Execute --> CheckInterrupt{"بررسی وقفه؟"}
CheckInterrupt -->|خیر| Fetch
CheckInterrupt -->|بله| SaveState["ذخیره وضعیت"]
SaveState --> JumpToISR["پرش به ISR"]
JumpToISR --> RunISR["اجرای ISR"]
RunISR --> RestoreState["بازگردانی وضعیت"]
RestoreState --> Fetch
```
ISR (Interrupt Service Routine) یک روتین یا تابع ویژه است که وقتی یک دستگاه (مثل کیبورد) نیاز به توجه فوری CPU دارد، به طور خودکار اجرا میشود. وظیفه آن انجام کار مربوط به آن دستگاه (مثلاً خواندن کلید فشرده شده) است تا CPU بتواند به سرعت به کار اصلی خود بازگردد.
<hr style="border: 4px solid GREEN;">
### ۷. وقفه چیست و انواع وقفه را نام ببرید ضمنا نحوه اعمال وقفه را نام ببرید؟ (۲)
تعریف و انواع بالاتر بود
#### **۳. نحوه اعمال وقفه در ۸۰۸۵**
۱. **فعالسازی وقفه:**
- دستور `EI` (Enable Interrupts) برای فعالسازی وقفههای Maskable.
- وقفههای NMI همیشه فعال هستند.
۲. **دریافت وقفه:**
- دستگاه خارجی (مثل تایمر) سیگنال وقفه (مثل `RST 5.5`) را فعال میکند.
۳. **پاسخ CPU:**
- ذخیره PC و وضعیت فعلی در پشته.
- پرش به آدرس ثابت در **بردار وقفه** (مثال: `RST 5.5 → 002Ch`).
۴. **اجرای ISR:**
- کدهای مدیریت وقفه اجرا میشوند (مثل خواندن داده از پورت).
۵. **بازگشت:**
- دستور `RETI` (Return from Interrupt) برای بازگردانی وضعیت.
<hr style="border: 4px solid GREEN;">
### ۸. نحوه عملیات آیسی ۸۲۵۹ (توسعه وقفه) را به اختصار شرح دهید؟ (۱)
#### **1. مراحل پاسخ به وقفه توسط ۸۲۵۹:**
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 ریست شود.
<hr style="border: 4px solid GREEN;">
### ۹. مودهای عملیاتی ۸۲۵۵ (توسعه GPIO) را به اختصار شرح دهید؟ (۱)
### حالتهای عملیاتی آیسی ۸۲۵۵ (PPI - Programmable Peripheral Interface)
آیسی **۸۲۵۵** یک تراشه **ورودی/خروجی برنامهپذیر (GPIO)** است که برای **افزایش پورتهای I/O** در سیستمهای مبتنی بر ریزپردازنده (مانند ۸۰۸۶) استفاده میشود. این تراشه دارای **۳ پورت ۸ بیتی (A, B, C)** است که میتوانند در **حالتهای مختلف** پیکربندی شوند.
#### **1. حالتهای عملیاتی ۸۲۵۵:**
#### **الف) Mode 0: حالت I/O ساده (Basic Input/Output)**
- **ویژگیها:**
- هر پورت (**A, B, C**) میتواند به صورت مستقل **ورودی یا خروجی** باشد.
- پورت **C** را میتوان به دو نیمه **Cupper (PC4-PC7)** و **Clower (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 ارسال میشود.
- **کاربرد:**
- ارتباط با حافظهها یا دستگاههای دوطرفه مانند **هارددیسکهای قدیمی**.
---
### **2. مقایسه حالتها:**
| **حالت** | **نوع ارتباط** | **پورتهای مورد استفاده** | **کاربرد** |
|------------|----------------------|--------------------------|-----------------------------|
| **Mode 0** | ساده (بدون Handshake)| A, B, C (مستقل) | LED، سوئیچ، صفحهکلید |
| **Mode 1** | با Handshake | A/B (داده) + C (کنترل) | پرینتر، ADC |
| **Mode 2** | دوطرفه | A (داده) + C (کنترل) | حافظه، هارددیسک |
---
### **3. نکته مهم:**
- **پورت C** در حالتهای ۱ و ۲ به عنوان **پورت کنترل** عمل میکند و نمیتوان از تمام پینهای آن به صورت I/O ساده استفاده کرد.
<hr style="border: 4px solid GREEN;">
### ۱۰. مطابق جدول زیر و رجیسترهای مربوط به ۸۲۵۵ ابتدا آیسی را در مود Simple قرار دهید، سپس بیت ۱ و ۲ از پورت A و ۷ و ۵ از پورت C را خروجی صفر قرار دهید؟ (۴)
آموزش داده نشده
<hr style="border: 4px solid GREEN;">
### ۱۱. نحوه کار آیسی ۸۲۵۴ (کانتر) را شرح دهید؟ (۱)
Intel 8254 یک تایمر/کانتر قابل برنامهریزی است که سه کانتر مستقل ۱۶ بیتی دارد. جریان کار هر کانتر به این صورت است:
**1. تنظیم کلمه کنترلی (Control-Word Setup)**
CPU یک «کلمه کنترلی» به رجیستر کنترل ۸۲۵۴ مینویسد و مشخص میکند:
- کدام کانتر (۰، ۱ یا ۲)
- کدام مد عملیاتی (۰ تا ۵)
- چگونه بایتهای شمارش بارگذاری شوند (فقط LSB، فقط MSB، یا ابتدا LSB سپس MSB)
**2. بارگذاری مقدار اولیه شمارش (Load Initial Count)**
- CPU مقدار شمارش ۱۶ بیتی اولیه را در کانتر انتخابشده مینویسد (دو بار نوشتن ۸ بیت طبق تنظیم LSB/MSB).
**3. مرحله شمارش (Counting Phase)**
- با هر لبه بالا رونده سیگنال CLK کانتر یک واحد کم میشود.
- ورودی GATE میتواند شمارش را فعال یا غیرفعال کند (بسته به مد).
**4. عمل نهایی و خروجی (Terminal Action & Output)**
- وقتی شمارش به صفر میرسد، خروجی OUT بر اساس مد انتخابی تغییر وضعیت میدهد.
**5. (اختیاری) بارگذاری مجدد / تحریک مجدد (Reloading / Retriggering)**
- در بعضی مدها (مثلاً Mode 2 و 3)، کانتر پس از رسیدن به صفر مقدار اولیه را دوباره بارگذاری و شمارش را تکرار میکند.
- در مدهای یکتنه (Mode 1 و 5)، برای شروع مجدد نیاز به پالس جدید GATE یا نوشتن دوباره در نرمافزار است.
با توالی «نوشتن کلمه کنترلی → بارگذاری مقدار شمارش → اجرا → مشاهده خروجی (و در صورت نیاز بارگذاری مجدد)»، آیسی ۸۲۵۴ امکان تولید تأخیرهای دقیق، وقفههای دورهای، پالسهای یکتنه یا موجهای مربعی را تنها با یک چیپ فراهم میکند.
<hr style="border: 4px solid GREEN;">
### ۱۲. حافظه FIFO به چه صورت عمل میکند؟ (۰.۵)
### **حافظه FIFO (First In, First Out)**
- **مکانیزم کار:** دادهها به ترتیب ورود ذخیره و خوانده میشوند (**اولین دادهی واردشده، اولین دادهی خارجشده**).
- **ساختار:** مانند یک **صف (Queue)** عمل میکند با دو اشارهگر:
- **ورودی (Write Pointer):** محل نوشتن داده جدید.
- **خروجی (Read Pointer):** محل خواندن داده قدیمی.
- **انواع:**
- **سختافزاری (IC مانند 7201):** برای سرعت بالا در انتقال داده.
- **نرمافزاری (با آرایه در CPU):** برای مدیریت بافرها.
- **کاربردها:**
- ارتباط بین سیستمهای ناهمگام (مثل UART).
- بافرینگ داده در پردازش تصویر یا شبکه.
**مثال:**
- در ارسال داده از سنسور به CPU، دادههای قدیمیتر اول پردازش میشوند.
**نکته:** برخلاف **LIFO** (مثل پشته)، FIFO ترتیب زمانی را حفظ میکند.
<hr style="border: 4px solid GREEN;">
### ۱۳. پروگرام کانتر و استک پوینتر را به اختصار شرح دهید؟ (۱)
#### **۱. پروگرام کانتر (Program Counter - PC)**
- **تعریف:** یک رجیستر **۱۶ یا ۳۲ بیتی** در CPU که آدرس دستور بعدی برای اجرا را نگه میدارد.
#### **۲. استک پوینتر (Stack Pointer - SP)**
- **تعریف:** یک رجیستر **۱۶ یا ۳۲ بیتی** که آدرس بالای استک (Last Used Address) را نشان میدهد.
<hr style="border: 4px solid GREEN;">
### ۱۴. راههای اعلان کلید را بنویسید و هر یک را به اختصار شرح دهید؟ (۲)
آیسی ۸۲۷۹ در بخش کیبورد، دو روش اصلی برای تشخیص و ثبت فشردن کلید (Key Detection) ارائه میدهد:
**1. Key Lockout**
- در این حالت، وقتی یک کلید فشرده میشود، اسکن ادامه پیدا میکند تا کلید دوم هم شناسایی شود.
- اما پس از فشرده شدن دو کلید، کلیهٔ کلیدهای بعدی تا زمان آزاد شدن هردو کلید اول نادیده گرفته میشوند (Lockout).
- این روش از «شبحزدن» (Ghosting) در ماتریس کیبورد جلوگیری میکند ولی تنها دو کلید همزمان قابل ثبت هستند.
**2. N-Key Rollover**
- امکان فشردن و ثبت همزمان هر تعداد کلید (تا ظرفیت ماتریس) را فراهم میکند.
- بردار وضعیت (Status Buffer) همهٔ کلیدهای فشرده را نگهداری میکند و در هر اسکن، فهرست کاملی از کلیدهای فعال را به CPU گزارش میدهد.
- این روش ضمن حفظ ترتیب فشردن، در ماتریسهای بزرگ و کاربردهای حرفهای (مانند کیکاستیشن) بسیار کاربردی است.
**نکته:**
* حالت ۲-Key Lockout سادهترین و کمهزینهترین روش است، مناسب کیبوردهای معمولی با نیاز به حداکثر دو کلید همزمان.
* حالت N-Key Rollover برای بازیها یا محیطهایی که فشردن چندکلیدهای همزمان ضروری است، کاربرد دارد.
<hr style="border: 4px solid GREEN;">
### ۱۵. بایت تولید شده از فشردن کلید ۱۲ از صفحه کلید اول در مود 2Key بنویسید؟ (۱)
تدریس نشده
<hr style="border: 4px solid GREEN;">
### ۱۶. معماری Risc و Cisc را تعریف و مقایسه کنید؟ همچنین علت اصلی استفاده از ریسک را بنویسید. (۱)
مقایسه و علت ریبسک بالاتر بود.
**معماری CISC (Complex Instruction Set Computer)**
این معماری دارای مجموعهای بزرگ از **دستورالعملهای پیچیده** است. هدف اصلی آن، انجام چندین کار سطح پایین (مانند خواندن از حافظه، انجام محاسبه و نوشتن در حافظه) تنها در یک دستورالعمل است تا کار کامپایلر و برنامهنویس سادهتر شود.
**معماری RISC (Reduced Instruction Set Computer)**
این معماری بر مجموعهای کوچک از **دستورالعملهای ساده و بهینه** تمرکز دارد. هر دستورالعمل یک کار بسیار ساده را انجام میدهد و در یک سیکل کلاک اجرا میشود. وظایف پیچیده از طریق ترکیب این دستورات ساده توسط کامپایلر پیادهسازی میشوند.
**علت اصلی استفاده از RISC**
علت اصلی روی آوردن به معماری RISC، **افزایش سرعت و کارایی پردازنده** با سادهسازی سختافزار بود.
<hr style="border: 4px solid GREEN;">
<hr style="border: 4px solid GREEN;">
## جداول
لازم نیست چون کار باهاشون تدریس نشده
<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) را به اختصار شرح دهید؟ (۱)
آیسی **۸۲۳۷** یک **Direct Memory Access (DMA) Controller** با چهار کانال مستقل است که امکان انتقال دادهها بین حافظه و دستگاههای جانبی را بدون دخالت مستقیم CPU فراهم میکند. روند کلی کار هر انتقال به این صورت است:
**1. پیکربندی اولیه (Initialization)**
- CPU بایتهای **Base Address** و **Base Count** را به رجیسترهای آدرس و شمارش کانال انتخابشده مینویسد.
- CPU یک **Mode** مشخص میکند (مثلاً حافظه→حافظه، ورودی از دستگاه→حافظه، حافظه→دستگاه).
- کانال مورد نظر از حالت Masked خارج میشود تا آماده پذیرش درخواستهای DRQ گردد.
**2. درخواست DMA (DMA Request)**
- دستگاه جانبی با فعالکردن ورودی **DRQₙ** (n = 0…3) درخواست انتقال میدهد.
- اگر کانال آزاد باشد و Mask نباشد، کنترلر DMA سیگنال **HRQ** (Hold Request) را به CPU میفرستد.
**3. واگذاری باس (Bus Hold/Grant)**
- CPU پس از پایان چرخه فعلی، با فعالکردن **HLDA** (Hold Acknowledge) باس داده/آدرس را آزاد میکند.
- کنترلر DMA باس را در اختیار میگیرد و انتقال شروع میشود.
**4. انتقال داده (Data Transfer)**
- در هر پالس **DACKₙ** (DMA Acknowledge)، یک بایت (یا واژه) بین رجیستر داخلی کانال و باس داده جابجا میشود.
- پس از هر انتقال، **Address** و **Count** داخلی کانال یک واحد افزایش/کاهش مییابند.
**5. اتمام انتقال (Terminal Count / EOP)**
- وقتی شمارش به صفر رسید، کنترلر
- سیگنال **EOP** (End Of Process) میدهد،
- کانال را مجدداً Mask میکند،
- و **HLDA** را غیرفعال میکند تا CPU بار دیگر باس را بازپس گیرد.
با این مکانیزم، CPU تنها در زمان تنظیم و پایان انتقال درگیر است و بار اصلی جابجایی داده توسط ۸۲۳۷ انجام میشود، که موجب افزایش کارایی سیستم خصوصاً در انتقالهای حجیم میگردد.
---
### ۸. مودهای عملیاتی 8255 (توسعه GPIO) را به اختصار شرح دهید؟ (۱)
---
### ۹. مطابق جدول زیر و رجیسترهای مربوط به 8255 ابتدا آیسی را در مود Simple قرار دهید سپس بیت ۱ و ۲ از پورت A و ۷ و ۵ از پورت C را خروجی صفر قرار دهید؟ (۴)
---
### ۱۰. نحوه کار آیسی 8259 (توسعه وقفه) را شرح دهید؟ (۱)
---
### ۱۱. حافظه FIFO به چه صورت عمل میکند؟ (۰.۵)
---
### ۱۲. پروگرام کانتر و استک پوینتر را به اختصار شرح دهید و موارد استفاده آن را بنویسید؟ (۱)
---
### ۱۳. راههای اعلان کلید را بنویسید و هر یک را به اختصار شرح دهید؟ (۲)
---
### ۱۴. بایت تولید شده از فشردن کلید 12 از صفحه کلید اول و 53 از صفحه دوم در مود 2Key بنویسید؟ (۱)
---
### ۱۵. نحوه کار بخش Display در آیسی 8279 را شرح دهید؟ (۱)
بخش نمایش (Display) در آیسی ۸۲۷۹ به صورت زیر عمل میکند:
**1. Display RAM**
* دارای 16 بایت حافظه داخلی است.
* هر بایت برای یک ستون یا رقم (Digit) در ماتریس یا ۷-سگمنت نگهداری میشود.
**2. Scan Counter**
* یک شمارنده داخلی (۰-۱۵) که بهطور متوالی برای انتخاب آدرس Display RAM و فعالسازی خطوط دیجیت (Digit) استفاده میشود.
* در هر چرخهٔ اسکن یک شماره افزایش یافته و یک رقم جدید را ران میکند.
**3. Multiplexing**
* خروجیهای Digit (Y0-Y3 یا Y0-Y7 بسته به پیکربندی) برای فعالکردن کاتد مشترک یا آند مشترک هر رقم.
* خطوط Segment (A-G و DP) برای شکلدهی الگوی نمایش روی رقم فعالشده.
**4. Auto-Refresh**
* پس از هر بار نوشتن در Display RAM، آیسی بهصورت خودکار اسکن و تازهسازی (Refresh) نمایش را ادامه میدهد تا تصویر پایداری داشته باشد.
**5. کنترل نرمافزاری**
CPU با نوشتن دستور (Command) در Control Register میتواند:
* حالت نمایش (ماتریسی یا ۷-سگمنت) را تنظیم کند.
* شدت روشنایی (Intensity) را در چند سطح مشخص کند.
* ترتیب اسکن (کرنر به کرنر یا سراسری) را انتخاب نماید.
با این ساختار، ۸۲۷۹ بدون نیاز به مداخلهٔ مداوم CPU، نمایش را به صورت خودکار اسکن و تازهسازی میکند و تنها کافی است دادهٔ مورد نظر در Display RAM نوشته شود.
---
### ۱۶. نحوه کار اعلام کلید در مود ۲ و ۱ در آیسی 8279 را شرح دهید؟ (۱)
در آیسی 8279 سه روش اصلی برای «اعلان» (Key Detection) یا ثبت فشرده شدن کلید وجود دارد:
**1. Scanned Keyboard Mode با 2-Key Lockout**
* ۸ خطوط اسکن (Scan Lines) یکییکی فعال میشوند و ۸ خطوط بازگشت (RL0–RL7) خوانده میشوند تا ماتریس کلید بررسی شود.
* هر کلیدی که فشار داده شود پس از عبور از مدار دمپینگ (Debounce) شناسایی شده و کُد آن همراه با وضعیت SHIFT/CTRL در FIFO ثبت میشود.
* در حالت 2-Key Lockout اگر دو کلید همزمان فشرده شوند، فقط اولین کلید ثبت خواهد شد و تا رها شدن آن، کلید دوم نادیده گرفته میشود.
* با ورود اولین کد به FIFO سیگنال IRQ فعال میشود و CPU میتواند از طریق خواندن KDATA آن را دریافت کند.
**2. Scanned Keyboard Mode با N-Key Rollover**
* مانند حالت قبل اسکن ماتریس انجام میشود و هر کلید فشرده (تا ۸ کلید همزمان) پس از دمپینگ ثبت میگردد.
* تمام کدها به ترتیب فشرده شدن در FIFO قرار میگیرند و وضعیت SHIFT/CTRL همراه هر کد ذخیره میشود.
* تا زمانی که FIFO پر نشود (ظرفیت ۸ کد)، کلیدهای جدید پذیرفته میشوند. CPU با دریافت IRQ و خواندن چندباره KDATA میتواند همهٔ کدها را دریافت کند.
**3. Strobed Input Mode (CNTL/STB)**
* در این حالت آیسی خودش ماتریس را اسکن نمیکند. بهجای آن، وقتی خط CNTL/STB از سمت کیبورد (یا مدار خارجی) به صفر کشیده شود، وضعیت خطوط بازگشت (RL0–RL7) «یکباره» خوانده شده و همان لحظه در FIFO ذخیره میشود.
* این روش برای کاربردهایی مناسب است که اسکن سختافزاری توسط 8279 انجام نشود یا کیبورد سادهای استفاده شود.
* پس از هر پالس استروب، یک بایت حاوی کد کلید و بیتهای SHIFT/CTRL وارد FIFO شده و IRQ صادر میگردد.
---
## جداول
لازم نیست چون کار باهاشون تدریس نشده