Basic principles
تسمى عملية تحول الشفرات المكتوبة بلغة معينة إلى لغة لأله بالترجمة Translating , هناك ثلاث أنواع من المترجمات, النوع الأول ما يسمى بـcompiler الذي يحول الشفرة المكتوبة بلغة عالية المستوى high level language(HHL) إلى لغة الماكينة,ثم تحميلها إلى الذاكرة RAM أي أن عملية الترجمة هنا تمر بمرحلتين الأولى عملية الترجمة translating والثانية التحميل loading,عملية الترجمة تحدث مره واحدة هنا ويتم تحميل البرنامج إلى الذاكرة عند كل مرة يتم فيها تشغيل البرنامج بعكس النوع الثاني من المترجمات المعروفة بالمفسرinterpreter الذي يقوم بعملية الترجمة كل مرة يتم فيها تشغيل البرنامج , بترجمة كل سطر من اسطر البرنامج بالتتابع إلى لغة وسطية intermediate language ثم يحولها إلى لغة الماكينة machine language ثم يحمل التعليمة إلى الذاكرة ليتم تنفيذها من قبل وحدة المعالجة المركزية central processing unit (CPU) تعتبر هذه العملية بطيئة ,من أنواع المترجمات التي تتبع هذا النمط من الترجمة لغة BASIC , أما النوع الثالث من المترجمات فهي تلك المترجمات التي تحول الشفرات المكتوبة بلغة التجميع Assembly language إلى لغة الماكينة machine language وتعرف بـالمجمعات Assembler .
Some examples of the translator and their languages.
Compiler : c++ , Pascal , Fortran , etc..
Interpreter : BASIC
Assembler : 8086 MPU , 8088 MPU , 8085 MPU etc...
Introduction to computer system:
مقدمة بسيطة إلى نظام الحاسوب الالكتروني.
يتألف نظام الحاسوب من ثلاث وحدات رئيسيه هي الذاكرة memory unit, وحدة المعالجة CPU , وحدات الإدخال والإخراج input/output unit تشكل هذا الوحدات بمجملها نظام الحاسوب computer system وتعبر هذه الوحدات عن المكونات الفيزيائية الملموسة المعروفة بــــ hardware التي تشمل register , memory , i/o unit , ALU , Flags Etc..
أما التعليمات التي تنظم عمل نظام الحاسوب فتعرف بـ software والتي هي عبارة عن سلسلة من التعليمات المنطقية المخصصة لأجل حل مهمة معينة,وتنقسم البرمجيات إلى قسمين أولاً البرمجيات التطبيقية Applications software التي تقوم بهمة معينة مثل برامج الرسم الهندسي Auto-cad أو حل المعادلات الرياضية مثل برنامج Math-cad أما النوع الثاني من البرمجيات فتعرف ببرمجيات المنظومة system software الذي هو محور الموضوع في هذا الكتاب ويشمل هذا النوع من البرمجيات , أنظمة التشغيل operating systems , المترجمات translators التي سنتطرق لها في كتابنا ,
يتألف نظام الحاسب هذا من ثلاث نواقل تستخدم لنقل البيانات بين هذه الوحدات الثلاث وهي, ناقل العناوين Address bus وظيفته نقل العناوين التي يرسلها المعالج إلى الوحدات الأخرى لكي يعرف المعالج في أي مكان سيجد المعلومة المراد تنفيذها أهي ضمن وحدة الذاكرة آم ضمن وحدات الإدخال والإخراج ثم يتم جلب المعلومة إلى المعالج عن طريق ناقل البيانات Data bus ليتم تنفذها,أما الناقل الأخر فهو ناقل السيطرة control bus وظيفته تمكين المعدات Devises التي يريد المعالج التعامل معها مثلاَ تحديد هل هي الذاكرة آم وحدات الإدخال والإخراج المراد للمعالج التعامل معها وهل هي عملية قراءه Read آم هي عملية كتابة Write .
* وحدة المعالجة المركزية CPU
هي اختصار ل central processing unit , يقوم المعالج بتنفيذ ومعالجة البيانات التي يحصل عليها من المستخدم عن طريق البرنامج,عند تشغيل البرنامج فأنة ينتقل إلى الذاكرة المؤقتة RAM بعملية تدعى التحميل loading عن طريق برنامج يدعى المحمل loader, وكما علمنا أن البرنامج عبارة سلسله من التعليمات المنطقية حيث سيقوم المعالج بالتقاط هذه التعليمات تعليمة تلو الأخرى بعملية تدعى Fetching تتضمن هذه العملية الخطوات التالية,
1 – يرسل المعالج العنوان ليحدد مكان المعلومة عن طريق ناقل العناوين.
2 – يتم جلب المعلومة عن طريق ناقل البيانات وفك شفرتها.
3- بعد فك شفرة التعليمة يتعرف المعالج على العملية المراد تنفيذها هل هي عملية جمع أو طرح الخ.. وجلب معاملات operand التعليمة بعملية التقاط أخرى أذا تطلب الأمر,ويتم معالجة البيانات التي حصل عليها المعالج في أجزائه الداخلية التي تتضمن ALU , Flag , Register .
4- يتم تحديث العنوان ليلتقط المعالج التعليمة التي تليها,وتكرر هذه الخطوات الأربع إلى أن ينتهي البرنامج.
مخطط نموذجي بسيط للمعالج ,
يتألف المعالج 8086 microprocessor من وحدتين ,
1- BIU(bus interface unit) وضيفة هذه الوحدة هي ,
أ – أجراء عملية Fetch .
ب – أجراء عمليات القراءة والكتابة .
تتألف هذه الوحدة من مجموعة من المسجلات segment register , هي CS , DS, ES SS , IP , قبل أن نعرف ما وضيفة هذه المسجلات , يجب أن نعلم أن المعالج 8086 قسم الذاكرة العشوائية Ram إلى مجموعة أقسام (مقاطع) كل قسم مخصص لنوعية معينة من التعليمات كل مقطع يخزن 64 k-byte من البيانات هذه التقسيمات هي ,
1- CS(code segment) : مقطع مخصص لخزن الشفرات code.
2- DS(Data segment): مقطع مخصص لخزن البيانات كالمتغيرات Data .
3 - ES(extra segment) : مقطع إضافي لخزن بعض البيانات فيه مثل Data .
4 - SS(Stack segment) : مقطع المكدس أيضا يستخدم لخزن البيانات Data , سنمر علية بشكل أوسع في موضوع المكدس stack .
* أي عنوان يتألف من جزأين , جزء يدعى القاعدة base ممثل بالمسجلات CS,DS,SS,ES
حيث تخزن هذه المسجلات عنوان أول مقطع , والجزء الأخر يدعى الإزاحة ممثل بالمسجلات IP , SI DI , BP , SP حيث تضاف قيمة مسجلات الإزاحة إلى مسجلات القاعدة لتمثيل العنوان الفيزيائي الواجب على المعالج التقاط بياناته ,
Physical address = base + offset
Offset = DI , BP , SP , IP , SI .
Base = CS , DS , SS , ES .
يجب أن تفرق بين المقطع segment وسجل المقطع Register segment , المقطع هو تقسيم وهمي للذاكرة إلى مجموعة مقاطع كل مقطع يسع 64 كيلو بايت من البيانات وهي أربع مقاطع CS,DS,SS,ES , إما سجل المقطع فهو سجل يخزن عنوان أول موقع من المقطع وبإضافة الإزاحة نصل إلى باقي العناوين في المقطع ,
لاحظ أن مسجلات المقاطع المرتبة الأولى منها يجب أن تكون صفر , وأن يقوم بتخصيص أي موقع من الذاكرة ليكون بداية للمقطع , لاحظ إن كل مقطع له سجل مقطع خاص به فمثلاً مقطع الشفرات code segment له سجل CS و مقطع البيانات Data segment له
سجل DS و مقطع الإضافي Extra segment له سجل ES , و مقطع المكدس Stack segment له سجل SS ,
إذا أردت سجل مقطع الشفرات يبدأ من الموقع 00000 كيف تفعل ذلك؟
ترسل القيمة 00000 إلى سجل مقطع الشفرات الذي هو CS أي أن ,
CS=0000
كيف سنعرف إلى أي موقع ينتهي مقطع الشفرات , نحن نعرف أن مقطع البيانات يحتوي على 64 كيلو بايت من المواقع , نضيف هذه القيمة إلى عنوان بداية المقطع base ,
64 كيلو بايت تمثل بالنظام السادس عشر FFFF أذن ,
0000 + FFFF=FFFF
إذن FFFFهو أخر موقع لمقطع الشفرات , ألان كيف نصل إلى العناوين التي تقع بين الموقع 0000 و الموقع FFFF , طبعاً عن طريق offset أي الإزاحة والشكل الذي يمثل بة base و offset الإزاحة في لغة التجميع هو,
segment: offset
CS:IP
أسندنا القيمة 00000 إلى CS وبإسناد قيم معينة ل IP مثلاً ,
إذا كانت IP=5 فأن الموقع الفعلي سيكون CS+IP أّن 00000+5=0005 وبإسناد أي قيمة الإزاحة نحصل على مواقع مختلفة , على شرط إن قيمة الإزاحة لا تتجاوز FFFF
وهذا منطقي لكي لا تتجاوز المقطع المخصص للشفرات ,
* كيف يتم تمثيل ذلك برمجياَ ,
كل ذلك يتم باستخدام لغة التجميع, أول شفرة سنأخذها في هذه الدرس هي شفرة النقل وصيغتها MOV Destination , Source
Destination الهدف الذي سترسل إلية البيانات ,
Source المصدر الذي ستنطلق منة المعلومات ,
MOV AX , 8H
هذه التعليمة معناها خزن العدد 8 ممثلاَ بالنظام السادس عشر إلى المسجل AXوهو أحد المسجلات العامة التي لم نتطرق لها بعد , أي أن AX=8H
س:/ نريد أن نجعل مقطع الشفرات يبدأ عند العنوان 1230 كيف نفعل ذلك ,
ملاحظة مهمة :
لا يمكنك نقل قيمة معينة لأحد مسجلات المقاطع CS,DS,SS,ES مباشرتاَ ,
MOV CS , 12340H
بل يجب عليك إسناد القيمة 1230H لأحد المسجلات العامة ثم إسنادها إلى المسجل CS , أي تصبح التعليمة هكذا ,
MOV AX , 12340H
MOV CS , AX
ألان تمت العملية بنجاح تذكر إن أخر موقع لمقطع الشفرات هو
12340+FFFF=2233F
ألان لتصل لأي موقع بين 12340 و2233F وجب عليك إسناد قيمة الإزاحة عن طريق السجل IP , مثلاً نريد الوصول إلى الموقع 12346 فقط نسند القيمة 6 لمسجل IP حيث سيجمعها المعالج مع القيمة الموجودة في CS التي هي 12340 لنحصل على العنوان الجديد , ستصبح التعليمات هكذا ,
MOV AX , 12340H
MOV CS , AX
MOV IP , 6H
وهكذا مع بقية المقاطع لأكن هناك ملاحظة مهمة جداً,
أن مقطع الشفرات CS يتعامل فقط في إزاحته مع offset الذي هو
pointer) IP(instruction ,
CS:IP
إما مقطع البيانات DS فيتعامل فقط مع SI أو DI أو BP التي سنتطرق لها لاحقاََ
DS:SI
DS:DI
DS:BP
إما مقطع المكدس SS فيتعامل فقط مع SP أو BP التي سنتطرق لها لاحقاََ
SS:SP
SS:BP
إما مقطع المكدس ES فيتعامل فقط مع SP أو BP التي سنتطرق لها لاحقاََ
SS:SP
SS:BP
حاول فهم عمل هذا البرنامج البسيط ,
MOV AX , A1250H
MOV DS , AX
MOV DI , 9H
*وحدات المعالج الداخلية internal unit of C.P.U.
1- وحدت الحساب والمنطق ALU (Arithmetic & Logic Unit)
وضيفة هذه الوحدة هي إجراء العمليات الحسابية جمع , طرح , ضرب , قسمة , والمنطقية And , OR , Not حيث تحتوي على دوائر منطقيه تقوم بعملية الجمع تدعى Half Adder & Full Adder
ومجموعة بوابات منطقية logic Gate للقيام بالعمليات المنطقية ومجموعة دوائر تراكبية وتعاقبية , يمكنك البحث عن معلومات عن عمل هذه الدوائر وكيفية تصميم الدوائر المنطقية , موضوع شيق يستحق الاطلاع علية.
2- المسجلات Registers عبارة عن وحدات خزنيه سريعة,حجمها صغير جداَ يتراوح بين 4,8,16,32 بت حسب نوع المعالج , تصنع المسجلات من دوائر منطقية تدعى Flip-Flop , وضيفة المسجلات هي خزن معاملات التعليمات,ومنها ما يستخدم لخزن العناوين كذلك المسجل الذي يدعى IP (instruction pointer) الذي يخزن عنوان التعليمة المراد تنفيذها وعند انتهاء تنفيذ التعليمة يزيد قيمته بمقدار واحد ليلتقط التعليمة التي تليها , ومن المسجلات ما تستخدم لفك شفرات التعليمات , ومنها ما يستخدم كشروط يمكن الاستعانة بهيا عند البرمجة بواسطة لغة التجميع تدعى الأعلام flags , يمكنك التوسع بهذا الموضوع عن طريق احد الكتب التي تتناول لغة التجميع.
ألان ما هو MPU ؟ هو اختصار لكلمة Microprocessor الذي هو نفسه المعالج CPU , سمي المعالج ب MPU لان جميع وحدات المعالج بما فيها وحدة الحساب والمنطق , المسجلات , الأعلام تم وضعها على رقاقة مفردة Single Chip .
الذاكرة memory
توجد عدة أنواع من الذواكر التي تستخدم في نظام الحاسبات الالكترونية,
1- الذاكرة الرئيسية Main memory ,
2- الذاكرة الثانوية Auxiliary memories ,
1- الذاكرة الرئيسية , هي الذاكرة التي تعرف بذاكرة الولوج العشوائي RAM(Random Access Memory)
أي أن المعالج يستطيع الوصول إلى المعلومة بمجرد معرفة الصف والعمود فقط , نقطة تلاقي الصف مع العمود تدعى خلية Cell ,الخلية تخزن بت واحد أي أما صفر أو واحد ,وتقسم الذاكرة Ram إلى قسمين Static , dynamic ولكل منها استخداماتها , حيث أن Static يكون زمن الوصول لها أسرع من زمن وصول ل dynamic ,سرعتها تقريباً 15 نانو ثانية, لذلك تستخدم static على مستوى مسجلات المعالج , وكذلك تستخدم لصنع الذاكرة الفورية cash , هذا النوع من الذاكرة تفقد محتوياتها عند انقطاع التيار الكهربائي عنها,تستخدم الذاكرة Ram بصورة عامة لخزن البرامج المراد معالجتها (تنفيذها) ,عملياً individual cell الخلية المفردة ل Static Ram تصنع من مجموعة ترانزستورات عادة (4-6) ترانزيستور, خلية Static Ram مفردة موضحة في الشكل أدناه ,
أما النوع الثاني من ذاكرة الولوج العشوائي Dynamic Ram , زمن الوصول لها يتراوح بين (100-150) مايكرو ثانية , كما إن استهلاك الطاقة power consumption له أقل من استهلاك الطاقة ل Static Ram , بالإضافة إلى إن الخلية المفردة individual cell ل Dynamic Ram تطلب فقط ترانزيستور واحد بالإضافة إلى متسعة صغيرة لخزنة الشحنة , بعكس Static Ram التي تتطلب 4-6 ترانزستورات , نستنتج من ذلك إن كثافة التخزين Dynamic Ram أكثر من Static Ram , بالإضافة إلى أن Dynamic Ram هي الأقل كلفةٌ لكثرة إنتاجها , لأكن هناك عيب واحد في Dynamic Ram أنها تخزن البت بشكل شحنة في المتسعة , والمتسعة تفقد شحنتها leakage باستمرار خلال أجزاء من الثانية , لذلك تحتاج Dynamic Ram إلى دوائر إضافية لتقوم بعملية Refresh للمتسعة بشكل مستمر للحفاظ على شحنة المتسعة , الشكل أدناه يوضح خلية مفردة ل Dynamic Ram ,
الذاكرة Ram على نوعيها تستطيع القراءة والكتابة إليها , أحياناً تدعى ذاكرة القراءة والكتابة ,ويوجد أنواع أخرى من الذاكرة Ram نذكر منها ,
أ – SSRAM synchronous static random access memory
ب - SDRAM synchronous dynamic random access memory
هناك نوع أخر من أنواع الذاكرة العشوائية تدعى ذاكرة القراءة فقط ROM(read only memory) هذا النوع من الذواكر غير قابلة للحذف , حيث تبقى محتفظة ببياناتها حتى بعد انقطاع التيار الكهربائي , هذا النوع من الذواكر لا تستطيع الكتابة إلية فقط القراءة منة , تخزن فيها البرامج التي تكون ثابتة أي لا تتغير عادة الشركات المصنعة لهذى النوع من الذواكر تضع فيها البرمجيات الضرورية لعمل وإقلاع الحاسوب,تسمى البرمجيات التي تخزن في مثل هذا النوع من الذاكرة firmware , لكل خلية أو مجموعة خلايا عنوان تذكر ذلك, ثمان خلايا متجاورة تدعى byte, أما أربع خلايا متجاورة تدعى nibble , ستة عشر خلية متجاورة تدعى word وهكذا حسب تصنيف البيانات وبالاعتماد على نوع الجهاز , يتم الوصول إلى ذلك العنوان عن طريق ناقل العناوين , ويتم التقاط محتويات الخلية عن طريق ناقل البيانات لتنقل إلى المعالج , كل ذلك يتم بمجموعة دوائر منطقية تدعى Decoder , multiplexer , De-multiplexer , ذاكرة مبسطة من نوع Romناقل العناوين 2-بت , ناقل البيانات 4- بت موضحة أدناه ,
نقطة تقاطع الصف مع العمود تمثل ب PN junction Diode الذي هو عبارة عن قطعة شبة موصله تمرر التيار باتجاه واحد وهو غني عن التعريف,هناك عدة أنواع من الذاكرة ROM نذكر منها,
أ- ROM
ب- PROM programmable read only memory
ت- EPROM erasable programmable read only memory
ث- EEPROM electrical erasable programmable read only memory
ج- Masked ROM
ح- Fusible link ROM
خ- UV-ROM Ultra-violet read only memory
2 – الذاكرة الثانوية أو المساعدة : تستخدم هذه الذواكر لخزن البرامج بشكل دائم على الحاسب , نذكر منها
Hard Disc , CD-ROM , floppy disc وغيرها , للعلم floppy disc يعمل بطرية متوالية sequential وليس عشوائية random أي أنة يعمل بنفس الطريقة التي يعمل بها شريط الكاسيت الاعتيادي , لكي يصل إلى معلومة تقع في منتصف الشريط لزم علية المرور على كل البيانات التي تسبق تلك النقطة , ولذلك يعتبر وحدة خزن بطيئة بالإضافة إلى سعته القليلة , القرص المرن يعمل بطرية مغناطيسية .
الذاكرة الفورية : Cash الذاكرة الفورية ذاكرة صغيرة الحجم , توضع بين المعالج والذاكرة الرئيسية Ram , وضيفة الذاكرة الفورية هو زيادة سرعة المعالج , حيث أن المعالج يلتقط الكثير من المعلومات المتكررة التي سبق أن التقطها , لذلك قرر مصنعو الحاسبات الالكترونية , وضع ذاكرة تدعى الذاكرة الفورية بين المعالج والذاكرة الرئيسية , لجعل المعالج لا يضطر إلى التقاط المعلومة ملتقطة مسبقاَ بعملية fetch , لان دخول المعالج إلى الذاكرة الرئيسية معناها استهلاك وقت إضافي , وقد تحسن في أداء وسرعة الحاسوب بعد وضع هذه الذاكرة , في كل عملية fetch لا يذهب المعالج إلى الذاكرة الرئيسية مباشرتا ليلتقط المعلومة بل يبحث هنا في الذاكرة الفورية أولاً فإذا وجد المعلومة وفر المعالج الزمن الذي كان سيستغرقه في البحث عن المعلومة في الذاكر الرئيسية الضخمة,إما إذ لم يجد المعلومة وجب على المعالج الذهاب إلى الذاكر الرئيسية لالتقاط المعلومة , وبعد التقاط المعلومة يتم خزنها في الذاكرة الفورية ثم يتم إرسالها إلى المعالج ليتم تنفيذها ,
موضوع الذواكر وأنواعها وكيفية تصميمها موضوع ضخم ونكتفي بهذا القدر ..
س:/ لدينا التعليمة ,
MOV AL,8D
كيف سيتم معالجة هذه التعليمات ,
أكيد يتم تحول هذه التعليمات إلى لغة الماكينة أولاَ , ثم يتم تحميلها إلى الذاكرة RAM ليتم تنفيذها من قبل المعالج , التعليمة العنوان
0000 6B
0001 00
0002 8
تم توليد شفرة التعليمة MOV التي هي 6B , وتم توليد شفرة AL التي هي 00 , وتم تحميل التعليمة إلى الذاكرة بواسطة برنامج المحمل loader بعد أن خصص لكل تعليمة عنوان ,
1- يتم تحديث محتويات المسجل IP بعنوان أول تعلية أي أن IP = 0000
2 – يرسل المعالج قيمة IP التي هي 0000 عن طريق ناقل العناوين , ليحدد الموقع الذي عنوانه 0000 ليتم جلب محتوياته عن طريق ناقل البيانات والتي هي شفرة العملية OPCODE أي يتم نقل 6B إلى المعالج ليتم فك شفرتها بواسطة مسجل خاص يدعى RD(Register Decoder) ثم خزن التعليمة في سجل خاص داخل المعالج يدعى IR(instruction register) ألان المعالج عرفة أن الشفرة معناها عملية إسناد أو نقل بمعنى أخر.
3 – يطالب المعالج بعملية التقاط Fetch أخرى , سيقوم المعالج بزيادة قيمة المسجل IP أي أن محتويات المسجل IP تساوي 0001 , يرسل المعالج العنوان عن طريق ناقل العناوين ليلتقط محتويات الموقع الذي عنوانه 0001 , فيجلب شفرة AL التي هي 00 ليتم فك شفرتها وخزنها , ثم يطالب المعالج بعملية ألتقط أخرى فيزيد محتوى المسجل IP ليتم التقاط التعليمة التالية , بإرسال عنوان التعليمة وجلبها وفك شفرتها وخزنها , وهكذا أتم المعالج عملية النقل أي أصبح محتوى المسجل AL = 8 , كل ذلك تم بدوائر ومسجلات المعالج الداخلية بالتحديد في وحدة الحساب والمنطق,ثم يزيد المعالج محتوى المسجل IP بمقدار واحد ليلتقط التعليمة التي تليها , وهكذا...
تذكر إن المسجل IP ليس دائماً يزداد مقداره بواحد , بل يمكنك إعطائه أي عنوان ليتم التنفيذ عند ذلك العنوان كما هو الحال في الجمل الشرطية والجملة GOTO التي تعطيها نقطة معينة ليتم القفز إليها والبدء بتنفيذ التعليمات الموجودة عند تلك النقطة,ثم ترجع سيطرة المعالج على المسجل IP بتحديث قيمته بمقدار واحد ليلتقط التعليمة التي تليها إلى أن ينتهي البرنامج وهكذا...
وللحكـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــاية بقية.........................................