الجلسة (1)
النظام الحاسوبي
يتألف نظام الحاسب من 3 عناصر أساسية هي:CPU , Memory , I/O Devices.
الذاكرة:
إن أصغر وحدة ذاكرية تكون مؤلفة من قلاب من النوع D-FF, لأنه يتميز بأنه يحتفظ بالقيمة المطبقة على الدخل D عند الخرج Q, ومن أجل التحكم بعملية القراءة أو الكتابة من/إلى الذاكرة نستخدم ما يسمى بالعازل Buffer وهو على نوعين: بقطب تحكم, وبدون قطب تحكم.
ميزات استخدام العازل:
1. العزل بين وحدة التخزين والوحدات الأخرى.
2. يمكن اعتباره كمنبع للتيار.
3. إذا كان مطبقاً على قطب التحكم القيمة (0) فالعازل يقابل قاطع مفتوح
و= = = = (1) = = سلك
عمليات الذاكرة الأساسية:
أولاً: عملية الكتابة(Write Cycle):
1. وضع المعطيات على خط المعطيات.
2. تفعيل خط التحكم بالكتابة(Write = 1).
3. تفعيل التحكم بالوحدة الذاكرية(Enable = 1).
سبب الفارق بين إشارة المعطيات و إشارات التحكم هو أن إشارة التحكم تأتي بعد أن تستقر قيمة إشارة المعطيات عند قيمتها النهائية.
ثانياً:عملية القراءة (Read Cycle):
1. Read = 1.
2. E = 1.
توسع مفهوم الذاكرة:
لقد شرحنا بنية العنصر الأساسي في الذاكرة والذي يستخدم لتخزين بت واحدة 1bit, أما لتخزين مجموعة من البتات فنحتاج إلى مجموعة من هذه العناصر كما في الشكل التالي:
إن التمثيل السابق يحتاج إلى تخصيص دخل مفرد لكل حجرة, وهذا أمر غير مجدي لأننا من أجل ذاكرة بـ 1KB سنحتاج إلى 1024 مدخل عنوان, لحل هذه المشكلة نستخدم فاك شيفرة يقوم بتحديد الحجرة الذاكرية التي سيتم تفعيلها وهكذا سيكون عدد المداخل من رتبة log2(n)حيث n تمثل حجم الذاكرة بالبايت, والشكل التالي يوضح ذلك:
التعامل مع الذاكرة يتم وفق النظام الست عشري لسببين:
1. سهولة التحويل إلى الثنائي.
2. استخدام خانات عددها أقل لتمثيل أعداد أكبر.
الجلسة(2)
برمجة الذواكر EPROM
تتم عملية برمجة الذواكر من النوع EPROM على مرحلتين:
1. مرحلة التفريغ:
ويتم في هذه المرحلة جعل خانات الذاكرة تأخذ القيمة 1 أي أنه سيتم تخزين القيمة الست عشرية FF في جميع بايتات الذاكرة,
2. مرحلة التخزين:
تجري عملية مقارنة بين القيمة المراد تسجيلها والقيمة الموجودة أصلاً في الذاكرة , حيث يتم قلب قيمة الخانات التي تحوي القيمة 1 إذا كانت القيمة المراد تسجيلها هي 0 ولا يمكن أن يحدث العكس.
مثال:
1 1 1 1 1 1 1 1
1 1 1 0 1 0 0 1
نستخدم برنامج Power من أجل عملية البرمجة بعد أن نصل جهاز البرمجة إلى الحاسب عن طريق منفذ الطابعة ونأخذ كمثال عن الذواكر EPROM الذاكرة 27c256 .
مكونات البرنامج:
يحتوي البرنامج على القوائم التالي:
1. Device: لتحديد نوع الذاكرة التي نريد برمجتها واسم الشركة الصانعة لها, ورقم هذه الدارة.
2. Edit: تحتوي على الأمر Buffer الذي يقوم بعرض محرر نصوص نكتب فيه القيم التي نريد نقلها إلى الذاكرة.
3. RunFunction:
- Program : نقل معلومات ال Buffer إلى الذاكرة.
- Read : قراءة محتويات الذاكرة.
- Verify : يجري مقارنة بين الذاكرة وال Buffer فإذا عثر على أي اختلاف يشير إليه ويتوقف.
- Compare : = = = = = ثم يعرض ملخصاً عن الاختلافات.
- BlankCheck : يفحص هل الذاكرة فارغة أم لا, وهذه العملية ضرورية لأنه حتى تتم عملية التخزين بأمان يجب أن نكون متأكدين من أن الذاكرة فارغة بالكامل أي أن خاناتها تأخذ القيمة 1.
4. File :
- Load File : نقل محتويات ملف موجود في الكمبيوتر إلى ال Buffer.
- Quite : للخروج من البرنامج.
إمكانيات البرنامج:
يمكن أن نضع IC لا نعرف أية معلومات عنها فيقوم البرنامج بفحصها وسرد المعلومات الهامة عنها.
- انتهت المحاضرة -
الجلسة (3)
وحدة المعالجة المركزية
تتألف وحدة المعالجة المركزية من ثلاثة أجزاء رئيسية:
1. ALU (Arithmetic Logic Unit):
تقوم بإجراء العمليات الحسابية والمنطقية
ويتم تمييز معالج عن آخر من بقوة
العمليات التي ينفذها.
2. CU (Control Unit):
تعطي الإشارات اللازمة لتنظيم عمل المعالج
مثل تفعيل الذاكرة وإشارات المقاطعات
للأجهزة الأخرى.
3. Registers :
تختلف المعالجات بطول المسجلات 4 و 8 و 16 ..
يتميز المعالج ب:
1. السعة : أ- عرض المسجلات
ب- عرض ممر المعطيات.
2. التردد (السرعة)
3. قوة التعليمات: إزاحة , دوران , جمع , ..
المسجلات
بنية المسجل:هو حجرة ذاكرية واحدة مؤلفة من عدد من الخانات موجود ضمن المعالج ويتم تمييز كل مسجل من خلال اسمه وليس من خلال عنوانه كما هو الحال بالنسبة للذاكرة.
لمحة تاريخية عن تطور المعالجات
عرض ممر المعطيات(bit) عرض المسجلات(bit) الموديل الشركة المنتجة
4 4 4040 Intel
8 8 8080 =
8 8 Z-80 Zilog
8 16 8088 Intel
16 16 8086 =
المعالج Z-80
يعنون ذاكرة 64 KB, تردده 3.5à4.5 MHz.
ملاحظة: في التطبيقات الصناعية يمكن قبول معالجات بسرعات تصل حتى 300 MHz لتجنب حدوث أخطاء ناجمة عن السرعة.
تقسم المسجلات إلى أقسام رئيسية هي:
1. المسجلات العامة وعددها 7 :
ليس لها وظيفة محددة ويمكن أن تشترك في أي عملية أسمائها(A, B, C, D, E, H, L) وكل منها بطول 8 bit .
المراكم Accumulator:
مسجل موجود في كل المعالجات , هام لأنه قريب من وحدة الحساب والمنطق وهو المسجل العام A.
يتم تخزين ناتج العمليات الحسابية ضمنه .
عندما يكون هناك أعداد ب 16 bit يتم تجميع المسجلات على الشكل التالي: AF , HL , DE , BC أما عند وجود أعداد ب 32 bit فيتم تجزئة العملية على مرحلتين.
2. المسجلات النظيرة وعددها 7 ( 8 bit ):
هي (A', B', C', D', E', H', L') لا يمكن إجراء عمليات مباشرة عليها وإنما يمكن إجراء عملية تبديل لمحتواها مع محتوى المسجلات العامة.
3. مسجلات الفهرسة وعددها 2 وهي (Ix, Ty) كل منها بطول(16 bit) :
تخزن عنوان قيمة معينة في الذاكرة وتتميز بأنها تتعامل مع الإزاحة بمقدار بايت واحد.
مثال: Ix + 07
4. مسجلات التأشير عددها 2 كل منها بطول (16 bit) وهي:
- PC : Program Counter
يشير إلى التعليمة الأولى عند بدء تنفيذ البرنامج ثم يشير إلى التعليمة التالية أثناء التنفيذ بشكل آلي.
- SP : Stack Pointer
يشير إلى عنوان القمة للمكدّس.
مثال: آلية عمل مسجلات التأشير:
Stack
عند تنفيذ محتوى العنوان 100 يجب أن يكون PC=111 لكن انتقل PC إلى 400, من أجل عدم ضياع قيمة PC السابقة يتم تخزين قيمة PC في ال Stack , وعند العودة يتم إعادة محتوى البايتين السابقين إلى ال PC. وبالمثل إذا تم القفز من الحجرة 405 يتم تخزين القيمة 406 في قمة المكدس ويتم تحديث المكدس بتناقص قيمة ال SP الذي يشير إلى قمة المكدس. في نهاية البرنامج الثاني يتم العودة إلى التعليمة التالية من البرنامج الفرعي الأول.
ملاحظة: كل تعليمة قفز توجد تعليمة عودة مقابلة لها وفي حال وجود خلل يفقد البرنامج السيطرة.
ملاحظة: المكدس ينبغي أن يكون بعيداً عن حجرات الذاكرة التي يجري التعامل معها.
5. مسجل الأعلام:
مسجل واحد بطول 8 bit يحتوي عدة أعلام وكل علم مختص بشيء معين يأخذ قيمة 0 أو 1 للدلالة إلى حدوث عملية ما, ومسجل الأعلام هو المسجل F, والأعلام هي:
1- (Zero Flag) ZF: يأخذ قيمة 1 عندما يكون ناتج عملية ما هو الصفر, يفيد في تساوي العددين إذا كانت العملية هي الطرح.
2- (Carry Flag) CF: يأخذ القيمة 1 عندما يحدث حمل ناتج عن عملية معينة, ويحل محل الخانة الأكثر أهمية.
3- (Half-Carry Flag) HF: يشير إلى حدوث حمل من الخانة الرابعة إلى الخانة الخامسة.
يستخدم في حال استخدام شيفرات بمجال 4bit مثل BCD .
4- (Overflow Flag) VF: يشير إلى حدوث طفحان في العمليات على أعداد ذات خانة إشارة عند حدوث حمل من الخانة قبل الأخيرة إلى الخانة الأخيرة, أي أنه لم يتم استيعاب الناتج ضمن 7 خانات.
5- (Sign Flag) SF: يشير إلى إشارة الناتج (0 موجبة, 1 سالبة), أي مطابق لخانة الإشارة.
6- (Negative Flag) NF:يشير إذا كانت العملية سالبة أو موجبة(0 موجبة, 1 سالبة)
7- (Parity Flag) PF: يشير إلى عدد الواحدات ضمن العدد:
إذا كان عدد الواحدات فردي يأخذ القيمة 0
وإذا كان عدد الواحدات زوجي يأخذ القيمة 1.
الجلسة (4)
Assembly Language(1)
1- LD d , s
تقوم بتحمبل محتوى s إلى d كما في المثال التالي:
B = 30h B = 30h
A = 10h A = 30h
طرق العنونة:
1. الكتابة إلى المسجلات:
2. العنونة الفورية: LD A , 20h
3. العنونة المسجلية: LD B , E
4. العنونة المباشرة: LD A , (0300h)
5. العنونة غير المباشرة: LD A , (HL)
الكتابة إلى الذاكرة:
LD (HL) , A
ملاحظة: يجب الانتباه إلى أن الطرفين يجب أن يكون لهما نفس الحجم.
فائدة العنونة غير المباشرة:
عدم ذكر العنوان بشكل صريح وإنما تحميله إلى مسجل يعطي مرونة في التعامل مع الذاكرة ويقلل من عدد التعليمات المكتوبة.
مثال توضيحي:
إذا كان لدينا بلوك من الذاكرة بطول 50 بايت ونريد إجراء عملية تتكرر على جميع هذه البايتات مثل ضرب محتوياتها برقم ما, نستخدم حلقة تمر على جميع الحجرات نذكر الأمر ضمنها لمرة واحدة, حيث نقوم بتحميل عنوان بداية البلوك إلى مسجل بطول 16 bit وفي كل مرة نقوم بزيادة محتوى هذا المسجل بعدد المرات التي نريدها.
جداول ترميز العمليات OpeCode
الفائدة من استخدام هذه الجداول التأكد من وجود تعليمة معينة أو عدم وجودها.
أمثلة:
LD BC , (0615h) à ED4B 15 06
LD BC , DE غير متوفرة
لإيجاد الحل لتنفيذ مثل هذه التعليمة توجد عدة طرق منها:
1. LD C , E
LD B , D
2. Stack
Push BC وضع محتويات المسجل في موقع الذاكرة الذي يشير إليه مؤشر المكدس
POP HL تحميل محتوى العنوان الذي يشير إليه مؤشر المكدّس إلى المسجل
في بداية أي برنامج يجب أن نحدّد مكان المكدّس مثلاً:
LD SP , 0900h
فائدة استخدام المكدّس: عند وجود برنامج فرعي يستخدم المسجلات ونحتاج إلى قيمها بعد انتهاء تنفيذ البرنامج الفرعي نقوم بإلحاق هذه القيم إلى المكدّس ثم نستعيدها كمايلي:
Push DE
Push BC
……..
…….
POP BC
POP DE
Return Statement
عمليات أخرى بلغة الأسمبلي:
ADD A , S A + S à A الجمع بدون حمل
ADC A , S A + S + CF à A الجمع مع وجود حمل
SUB A , S A – S à A الطرح بدون استعارة
SBC A , S A – S – CF à A الطرح مع وجود استعارة
AND A , S
OR A , S
XOR A , S
CP A , S تطرح بشكل وهمي وتؤثر على الأعلام فقط
INC S زيادة محتوى المسجل بمقدار 1
DEC S إنقاص محتوى المسجل بمقدار 1
برنامج بلغة الأسمبلي:
المطلوب كتابة برنامج بلغة الأسمبلي لحساب ناتج جمع عددين بطول 16bit الأول مخزّن بدءاً من العنوان 100 والثاني مخزّن بدءاً من العنوان 102 ووضع الناتج بدءاً من العنوان 104, وكتابة الـ OpeCode لهذا البرنامج.
Assembly OpeCode
LD A , (0100h)ADD A , (0102h)LD (0104h) , ALD A , (0101h)ADC A , (0103h)LD (0105h) , A 0A 00 018E20013204010A0101BE0301320501
الجلسة(5)
Assembly Language(2)
Ex AF , AF' لتبديل محتويات المسجلات مع المسجلات النظيرة
Exx لتبديل محتويات المسجلات
Ex (SP) , HL
يبدل L مع محتوى SP, و H مع محتوى SP-1
ملاحظة: لا يتم تغيير الحجرة التي يشير إليها المكدّس.
Block Transfer Group
يتم تمييز البلوك بمعرفة عنوان البداية وطول البلوك, أو عنوان النهاية وطول البلوك(عدد الحجرات)
للقيام بعملية النسخ يجب أن يكون عنوان البداية مخزناً في HL وعدد الحجرات في BC كما يجب أن يكون عنوان المستقر مخزناً في DE.
LD HL , 0500h حجز بلوك بدايته 500
LD BC , 0020h وعد حجراته 20
1. LDI (Increment)
(HL) à (DE)
HL = HL + 1
DE = DE + 1
BC = BC - `
2. LDIR Repeat Until BC = 0
3. LDD
(HL) à (DE)
HL = HL – 1
DE = DE – 1
BC = BC – 1
4. LDDR Repeat Until BC = 0
Block Search Group
مقارنة قيمة موجودة في المراكم مع بلوك إذا كانت القيمتان متساويتان يتوقف التنفيذ ويأخذ ZF القيمة 1:
1. CPI (Increment)
A – (HL)
HL = HL + 1
BC = BC – 1
2. CPIR
3. CPD
A – (HL)
HL = HL – 1
BC = BC – 1
4. CPDR
Jump Call And Return Group
1. JP Label قفز غير مشروط
2. JP C , Next قفز مشروط(إذا وجد حمل, اقفز)
مثال عن القفز:
Assemply OpeCode MachineCode
Next:LD A , 20h LD B , 10h Add A , B JP C , Next 3E 20D6 1080DA 00 01 0100h0102h0104h0105
وهناك تعليمة CALL لتنفيذ برنامج فرعي, تختلف عن تعليمة القفز في أنها يجب أن يتم تنفيذ مايليها, ولكن بعد كل تعليمة قفز يجب أن تكون هنالك تعليمة عودة:
1. CALL
2. CALL C , Next
3. DJNZ
Bنستخدمها عندما نريد تنفيذ عملية القفز عدد من المرات, وهذا العدد ينبغي أن يخزّن في المسجل
4. RET
الجلسة (6)
Assembly Language(3)
أمثلة عن برمجة المعالج Z-80 بلغة الأسمبلي
1- يراد وضع القيمة CC في بلوك يبدأ بالعنوان 50 وبطول 10h:
LD HL , 050
LD B , 10
LD (HL) , 0CC
INC HL
DJNZ 0FB
2- أكتب تعليمات الأسمبلي للمعالج Z-80 التي تقوم بجمع عددين بطول 6Byte, العدد الأول موجود في الذاكرة بدءاً من العنوان 50, والعدد الثاني موجود في الذاكرة بدءاً من العنوان 56, مع وضع الناتج بدءاً من العنوان 60.
LD HL , 0050
LD DE , 0056
LD IX , 0060
LD B , 06
AND A ,A
LD A , (DE)
ADC A , (HL)
LD (IX + 00) , A
INC HL
INC DE
INC IX
DJNZ 0F5
JRNZ 04
LD A , 01
JR 02
LD A , 00
LD (0066) , A
3- أكتب برنامج يعطي عدد مرات تكرار القيمة FF في بلوك من الذاكرة يبدأ من العنوان 50 وبطول 10h Byte.
LD HL , 0050
LD B , 10
LD C , 00
LD A , 0FF
CP A , (HL)
JRNZ 1
INC C
INC HL
DJNZ 0F7
LD A , C
LD (0060) , A
تمرين:
أكتب برنامج بلغة الأسمبلي لإيجاد عدد الأعداد الزوجية في بلوك من الذاكرة يبدأ بالعنوان 50 وطوله 10h ويوضع الناتج في العنوان 60H.
LD HL , 0050
LD B ,10
LD C , 00
LD A , 01
AND A , (HL)
JRNZ 01
INC C
INC HL
DJNZ 0F7
LD A , C
LD (0060) , A
الجلسة (7)
Assembly Language(4)
المثال الأول:
يراد إيجاد أكبر عدد في بلوك من الذاكرة يبدأ من العنوان 50 وبطول 10h , يتم وضع هذا العدد في العنوان 60.
Flow Chart
تمرين:
تعديل البرنامج السابق
بحيث يتم وضع عنوان أكبر عدد في الحجرتين 61 و 62.
المثال الثاني:
المطلوب ترتيب أعداد موجودة في الذاكرة بدءا من
العنوان 50h وبطول 10h باستخدام خوارزمية الفرز الفقاعي:
تمرين:
يطلب عزل الأعداد الموجبة عن الأعداد السالبة في بلوك من الذاكرة يبدأ من العنوان 50h وبطول 20h حيث : توضع الأعداد الموجبة ابتداء من العنوان 70h والأعداد السالبة ابتداء من العنوان 90h.
و يوضع عدد الأعداد الموجبة في الحجرة 0B0h, ويوضع عدد الأعداد السالبة في الحجرة 0B1h.
LD HL , 00F4
LD B , 10
LD DE , 0000
LD IX , 0070
LD IY , 0090
INC HL
LD A , (HL)
AND A , 80
JRNZ 09
LD A , (HL)
LD (IX+00) , A
INC IX
INC D
DJNZ 0F1
LD A , (HL)
LD (IY+00) , A
INC IY
INC E
DJNZ 0E8
LD A , D
LD (00B0) , A
LD A , E
LD (00B1) , A
Ahmad Jakalan
اللهم إني أسألك علماً نافعاً وقلباً خاشعاً وعملاً متقبّلاً صالحاً