اقرأ في هذا المقال
- ما المقصود بتنسيق التعليمات وأنواعها
- رموز نقل السجل Register Transfer Notation
- رموز لغة التجميع Assembly Language Notation
- مجموعة تعليمات RISC وCISC
- تسلسل التعليمات وتنفيذها
- التعليمات المتفرعة Branching Instruction
التعليمات في البرنامج لها تنسيق تعليمات (instruction format) مناسب ومتسلسل يحدد تدفق تنفيذ البرنامج، هناك عدة أنواع من التعليمات في برنامج الكمبيوتر مثل: تعليمات إجراء العمليات الحسابية أو المنطقية على الأرقام، التعليمات التي تتفرع إلى تعليمات أخرى في البرنامج، التعليمات التي تتحقق من حالة معينة وغيرها الكثير، في هذا المقال، سنناقش نوعًا مختلفًا من التعليمات، عن تعليمات (RISC وCISC)، وعن تسلسل التعليمات والتحكم وتعليمات التفريع (branching instructions).
ما المقصود بتنسيق التعليمات وأنواعها
قبل دراسة المزيد عن التعليمات، دعونا نفهم الشكل الأساسي للتعليمة (format of instruction)، فيما يلي الشكل الذي يوضح التنسيق العام للتعليمات:
Operand 2 | Operand 1 | Opcode |
يحدد كود التشغيل (Opcode) الموضح أعلاه طبيعة العملية المراد تنفيذها، المعاملان، المعامل (1) (Operand 1) والمعامل (2) (operand 2) يحددان البيانات التي يجب تنفيذ العملية عليها، يمكن أن يكون المعامل موقع ذاكرة أو سجل معالج أو قيمة فورية أو بيانات منطقية، الآن، يمكن أن تكون التعليمات من عدة أنواع، تحدد العملية المحددة في التعليمات طبيعة تلك التعليمات، لتعميم جميع أنواع التعليمات يمكن تصنيفها إلى أربعة أنواع على النحو التالي:
- التعليمات التي تنقل البيانات بين ذاكرة الحاسوب وسجل المعالج.
- التعليمات التي يمكن أن تؤدي العمليات الحسابية والمنطقية على البيانات.
- التعليمات التي تتحكم في تسلسل تنفيذ التعليمات، مثل تعليمات الفرع (branch instruction).
- تعليمات تنفيذ نقل الإدخال / الإخراج، أي نقل البيانات من وحدة التخزين الداخلية إلى وحدة التخزين الخارجية أو الجهاز.
رموز نقل السجل Register Transfer Notation
عندما يتعلق الأمر “بنقل المعلومات”، فإنّه يتطلب موقع المصدر (source location) وموقع الوجهة (destination location)، موقع المصدر هو المكان الذي سيتم قراءة القيمة منه وموقع الوجهة هو المكان الذي سيتم تخزين القيمة فيه، هنا ، يمكن أن تكون مواقع المصدر أو الوجهة هي مواقع الذاكرة أو سجلات المعالجات أو يمكن أن تكون السجل في نظام الإدخال / الإخراج الفرعي، يتم إعطاء هذه المواقع اسمًا رمزيًا للموافقة، فيما يلي التعليمات الخاصة “برموز نقل السجل”:
Instruction 1 R4 <- [VAR3]
Instruction 2 R4 <- [R3] + [R2]
تشير التعليمة (1) إلى أنّ القيمة الموجودة في موقع الذاكرة التي تحمل اسمًا رمزيًا (VAR3) يتم نقلها إلى سجل المعالج (R4)، هنا، يتم وضع (VAR 3) بين قوسين مربعين []، حيث يشير القوس المربع حول الموقع إلى المحتوى أو القيمة المخزنة في ذلك الموقع، ستتم الكتابة فوق المحتوى القديم لـ (R4) بقيمة (VAR3).
وبالمثل، في التعليمة (2)، تتم إضافة القيمة الموجودة داخل سجل المعالج (R3 وR2) ثمّ يتم تخزينها في سجل المعالج (R4)، هنا أيضًا، سيتم استبدال المحتوى القديم لـ (R4) بمجموع (R3 وR2)، تسمّى هذه الأنواع من الترميز “رموز نقل السجل” (RTN) (Register Transfer Notation).
تذكر دائمًا أنّ القيمة الموجودة على الجانب الأيمن من تعبير (RTN) هي القيمة التي يجب تشغيلها أو أخذها في الاعتبار لعملية النقل والجانب الأيسر هو اسم الموقع الذي يجب تخزين هذه القيمة فيه، لا تتغير محتويات المعاملات المذكورة في (RHS) لتعبير (RTN)، ولكن، تتم الكتابة فوق محتويات المعامل المذكور في تعبير (LHS) لتعبير (RTN).
رموز لغة التجميع Assembly Language Notation
تُستخدم رموز لغة التجميع لتمثيل تعليمات الآلة، تحدد تعليمات لغة التجميع العملية التي يجب إجراؤها والمعاملات التي سيتم تضمينها في العملية، تستخدم تعليمات لغة التجميع كمساعد للذاكرة (mnemonics) للإشارة إلى العمليات، مساعدة الذاكرة هذه ليست سوى اختصار للكلمة التي تصف طبيعة العملية، مثال على ذلك، لعملية الجمع (addition) تحتوي على جمع (Add)، وللضرب (Multiplication)، يحتوي على (Mul)، للقسمة (Div)، دعونا نلقي نظرة عامة على تعليمات لغة التجميع:
Instruction 1 Load R4, VAR3
Instruction 2 Add R4, R3, R2
في التعليمة (1)، يتم تحميل المحتوى الموجود في موقع الذاكرة (VAR3) في سجل المعالج (R4)، بعد تنفيذ هذه التعليمة، سيبقى محتوى (VAR3) كما كان قبل تنفيذ التعليمة، لكن المحتوى القديم لـ (R4) تمّ استبداله بمحتوى (VAR3)، في التعليمة (2)، تتم إضافة محتوى السجلين (R3 وR2) ويتم تخزين المجموع في السجل (R4).
مجموعة تعليمات RISC وCISC
يمكن التمييز بين أجهزة الكمبيوتر على أساس طبيعة مجموعة التعليمات الخاصة بها، هناك طريقتان يمكن من خلالهما تصميم مجموعة التعليمات لأجهزة الكمبيوتر الحديثة، وهما (RISC وCISC)، عند الحديث عن أجهزة كمبيوتر مجموعة التعليمات المعقدة (CISC)، كانت سائدة في السبعينيات قبل تقديم أجهزة كمبيوتر مجموعة التعليمات المخفضة (RISC).
يحتوي (CSIC) على مجموعات تعليمات معقدة تحدد عمليات أكثر تعقيدًا، قد تشغل بعض التعليمات في (CISC) أكثر من كلمة واحدة في الذاكرة، تحتوي معظم تعليمات (CISC) الحديثة على تنسيقين للعناوين، وأجهزة الكمبيوتر ذات مجموعة التعليمات المخفضة (RISC) لها خاصيتان مهمتان هما:
- يجب أن تكون كل تعليمة في كلمة واحدة في الذاكرة.
- يحتوي على تعليمات تحميل / تخزين للوصول إلى معاملات الذاكرة.
في تعليمات (RISC) التي تؤدي العمليات الحسابية والمنطقية، يجب أن تكون جميع المعاملات في سجل المعالج أو يجب ذكر أحد المعاملين صراحةً في التعليمات، وذلك لأنّ تعليمات (RISC) يمكنها إجراء العملية الحسابية والمنطقية فقط على معامل سجلات المعالج.
تسلسل التعليمات وتنفيذها
تنفيذ التعليمات هو إجراء من خطوتين، في الخطوة الأولى، يتم جلب التعليمات من الذاكرة (fetched from memory)، في الخطوة الثانية، يتم تنفيذ التعليمات (instruction is executed):
First Step-> Instruction Fetch
المعالج لديه سجل يسمّى عداد البرنامج (program counter) الذي يحتوي على عنوان التعليمات التي يجب تنفيذها بعد ذلك، لبدء تنفيذ البرنامج، يجب وضع عنوان التعليمات الأولى في عداد البرنامج، بعد وضع عنوان التعليمة الأولى في عداد البرنامج، يستخدم المعالج هذا العنوان لجلب التعليمة الأولى، بمجرد إحضار التعليمة الأولى، يزداد المحتوى في عداد البرنامج بطول الكلمة “مجموعة (n) بت التي يمكنها تخزين تعليمة أساسية واحدة” أي الآن، تحتوي على عنوان التعليمة التالية المتتالية التي سيتم تنفيذها، بعد إحضار التعليمات من موقع الذاكرة، يتم وضعها في سجل تعليمات المعالج:
Second Step -> Instruction execution
في الخطوة الثانية، يفحص المعالج التعليمات الموجودة في سجل التعليمات ويكتشف العملية التي يجب إجراؤها، يقوم أولاً بجلب المعاملات المتضمنة في التعليمات من الذاكرة أو سجل المعالج، ثمّ يقوم المعالج بإجراء العملية الحسابية والمنطقية ويخزن النتيجة في موقع الوجهة المذكور في التعليمات، خلال هذا الوقت، يتم زيادة محتوى عداد البرنامج بحيث يمكن أن يشير إلى التعليمات التالية للتنفيذ، هذا التنفيذ للتعليمات بترتيب متزايد للعناوين هو تسلسل خط مستقيم.
التعليمات المتفرعة Branching Instruction
الآن، لنفترض أنّه يتعين علينا إضافة عدد (n)، عناوينهم في شكل رمزي هي (Num1 ،Num2 ،Num3 ، …… .NumN)، لذلك، فإنّ تعليمات إضافة هذه الأرقام هي كما يلي:
Load R2, Num1
Load R3, Num2
Add R2, R3, R2
Load R3, Num3
Add R2, R3, R2
Load R3, Num4
Add R2, R3, R2
Load R3, NumN
Add R2, R3, R2
Store R2 SUM
بدلاً من كتابة هذا التسلسل الطويل من التعليمات، يمكننا تنفيذ حلقة لهذا البرنامج، لإضافة عدد (n)، يجب تكرار الحلقة (n) عدد المرات، افترض أنّ هناك عدد (n) لإضافته، لذلك، يتم تخزين قيمة العد (n) هذه في موقع الذاكرة (N)، أدناه مجموعة التعليمات التي تحدد الحلقة لإضافة عدد (n):
Load R2, N
Clear R3
Determine Next_number // Loop start
Load R5, Next_number
Add R3, R5
Sub R2, R2, #1
Branch if [R2]>0 Loop // Loop repeat
Store R3, SUM