0% found this document useful (0 votes)
6 views6 pages

CS477 - Module09

تتناول الوثيقة تاريخ معمارية معالج ARM وتطوره منذ عام 1987، حيث أصبح شائعًا في الأنظمة المدمجة والهواتف المحمولة. كما توضح الوثيقة مقارنة بين ARM وX86، مع التركيز على بساطة تعليمات ARM وكفاءتها في استهلاك الطاقة. بالإضافة إلى ذلك، تتناول الوثيقة تفاصيل حول سجلات ARM-32، أوضاع العنوان، وتعليمات التحميل والتخزين الأساسية.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views6 pages

CS477 - Module09

تتناول الوثيقة تاريخ معمارية معالج ARM وتطوره منذ عام 1987، حيث أصبح شائعًا في الأنظمة المدمجة والهواتف المحمولة. كما توضح الوثيقة مقارنة بين ARM وX86، مع التركيز على بساطة تعليمات ARM وكفاءتها في استهلاك الطاقة. بالإضافة إلى ذلك، تتناول الوثيقة تفاصيل حول سجلات ARM-32، أوضاع العنوان، وتعليمات التحميل والتخزين الأساسية.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬

‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Compiler Design‬‬
‫‪Module 9 summary‬‬
‫ً‬
‫تقريبا‪ ،‬وبدأ‬ ‫‪ARM Processor History:‬الـ ‪ ARM Processor Architecture‬تاريخه قديم زي ‪X86‬‬ ‫•‬
‫كـ ‪-bit Acorn RISC Machine 32‬سنة ‪ 1987‬واستخدموه يف أجهزة كمبيوتر زي الـ ‪Acorn‬‬
‫ً‬ ‫‪Archimedes.‬بعد كده اتطور وبدأ ى‬
‫يبق مشهور جدا يف الـ ‪ Embedded Systems‬والموبايالت‪،‬‬
‫وعرفوه باسم‪Advanced RISC Machine (ARM).‬‬
‫‪Recent Versions:‬أحدث اإلصدارات هما )‪ ARMv7-A (32-bit‬و‪ARMv8-A (64-bit).‬‬ ‫•‬

‫الىل بيعتمد‬
‫بيعتب مثال عىل )‪ Reduced Instruction Set Computer (RISC‬ي‬ ‫ر‬ ‫‪ARM‬و ‪RISC‬الـ ‪ARM‬‬ ‫•‬
‫الىل بيستخدم ‪Complex Instruction Set‬‬ ‫صغب من الـ ‪ Instructions‬مقارنة بـ ‪ X86‬ي‬
‫ر‬ ‫عىل عدد‬
‫)‪Computer (CISC‬عشان يتعامل مع أوامر معقدة‪.‬‬
‫‪Comparison to X86:‬الـ ‪ ARM‬بيتمب إن التعليمات الىل فيه أقل وبسيطة ى‬
‫أكب‪ ،‬فده بيقلل الـ‬ ‫•‬
‫ي‬ ‫ر‬
‫‪Complexity‬وكمان استهالك الطاقة‪.‬‬
‫ً‬
‫أحيانا ‪ ARM‬ى‬
‫صغبة يف التعليمات‪.‬‬
‫ر‬ ‫بيبق "جز ًئيا ‪" RISC‬عشان يف استثناءات‬ ‫‪Partially RISC:‬‬ ‫•‬

‫‪Registers‬في‪ARM-32:‬‬
‫معي زي‪:‬‬
‫عندك ‪ Register 16‬عامة)‪ ، (General Purpose Registers‬وكل واحد له استخدام ر‬ ‫•‬

‫‪ r0-r3 General Purpose Registers‬لالستخدامات العامة‪.‬‬ ‫‪o‬‬

‫محتاجي نخزنها‪.‬‬
‫ر‬ ‫الىل‬
‫‪r4-r11 Saved Registers‬للـ ‪ Data‬ي‬ ‫‪o‬‬

‫‪r12 (ip) Scratch Register‬بنستخدمه يف العمليات المؤقتة‪.‬‬ ‫‪o‬‬

‫‪r13 (sp) Stack Pointer‬بيحدد مكان الـ‪Stack.‬‬ ‫‪o‬‬

‫‪r14 (lr) Link Register‬بيحفظ عنوان العودة من الـ‪Function.‬‬ ‫‪o‬‬

‫الىل شغالة‪.‬‬
‫‪r15 (pc) Program Counter‬عشان يتابع مكان التعليمات ي‬ ‫‪o‬‬

‫البنامج (زي الفالغات)‪.‬‬


‫‪CPSR Current Program Status Register‬بيحتفظ بحالة ر‬ ‫‪o‬‬

‫خالصة كده ‪: ARM‬بسيط وفعال‪ ،‬بيشتغل بطاقة أقل‪ ،‬والـ ‪ Registers‬بتاعته منظمة بطريقة‬ ‫•‬
‫مجي كتابة الكود‪.‬‬
‫المب ر‬
‫واضحة عشان تسهل عىل ر‬
‫الـي ‪Registers‬وأنواعهايفيمعمارية ‪ARM-32‬‬
‫‪ Registers‬في ‪ARM-32‬‬
‫عامي)‪ ، (General Purpose Registers‬كل واحد منهم ليه وظيفة‬
‫ر‬ ‫‪r0-r15‬دول ‪Register 16‬‬ ‫•‬
‫مختلفة زي‪:‬‬
‫)‪r11 (fp‬ده ‪Frame Pointer‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪r13 (sp) Stack Pointer.‬‬ ‫‪o‬‬

‫‪ r14 (lr) Link Register‬بيمسك العناوين الخاصة بالـ‪Return‬‬ ‫‪o‬‬

‫الحال للتنفيذ‬
‫ي‬ ‫‪ r15 (pc) Program Counter‬بيقرا العنوان‬ ‫‪o‬‬

‫فيه ‪Registers‬خاصة زي‪:‬‬ ‫•‬

‫‪CPSR (Current Program Status Register):‬بيمسك حالة العمليات والمقارنات أثناء العملية‪.‬‬ ‫‪o‬‬

‫‪SPSR (Saved Program Status Register):‬بيمسك حالة الحفظ الخاصة بالـ ‪Privileged‬‬ ‫‪o‬‬
‫‪Modes.‬‬

‫‪Data Sizes‬والـ‪Suffixes‬‬
‫نظام ‪ ARM‬بيدعم ‪ suffixes‬مختلفة لتحديد حجم البيانات زي ‪:‬‬ ‫•‬

‫‪Byte (B): 8 bits‬‬ ‫‪o‬‬

‫‪Halfword (H): 16 bits‬‬ ‫‪o‬‬

‫‪Word (W): 32 bits‬‬ ‫‪o‬‬

‫‪Double Word (D): 64 bits‬‬ ‫‪o‬‬

‫‪Addressing Modes:‬‬
‫طريقتي ‪:‬‬
‫ر‬ ‫بيوضح إزاي يتحرك البيانات ربي الـ ‪ Registers‬والذاكرة‪ .‬فيه‬ ‫•‬

‫‪MOV Instruction .1‬بتنقل بيانات أو ثوابت ربي الـ‪Registers.‬‬


‫‪LDR (Load) .2‬و )‪STR (Store‬‬
‫‪LDR‬لتحميل قيمة من عنوان يف الذاكرة إل‪Register.‬‬ ‫▪‬

‫‪STR‬لتخزين قيمة من ‪ Register‬يف عنوان الذاكرة‪.‬‬ ‫▪‬

‫‪ Addressing Modes‬يف لغة التجميع الخاصة بـ‪ARM‬‬


‫ل‬
‫‪ Addressing Modes‬طرقيالوصو ي‬
‫‪MOV instruction‬‬ ‫•‬

‫التعليمة دي بتستخدم علشان تنقل قيمة )‪ (Immediate Value‬معروفة أو تنقل قيمة من سجل‬ ‫‪o‬‬
‫)‪(Register‬آلخر‪.‬‬
‫اليمي‪.‬‬
‫ر‬ ‫ً‬
‫دائما الوجهة )‪ (Destination‬بتكون عىل الشمال والمصدر )‪ (Source‬عىل‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫مثال ‪:‬‬ ‫‪o‬‬

‫‪ MOV r0, #3:‬هنا بنحط القيمة "‪ "3‬يف السجل‪r0‬‬ ‫▪‬

‫الىل يف ‪ r0‬لـ‪r1‬‬
‫‪ MOV r1, r0:‬هنا بننقل القيمة ي‬ ‫▪‬

‫‪LDR‬و‪ STR‬ي‬
‫)‪LDR (Load‬‬ ‫•‬

‫بيستخدم علشان تجيب البيانات من الذاكرة وتحطها يف سجل‪.‬‬ ‫‪o‬‬

‫‪STR (Store):‬‬ ‫•‬

‫بيستخدم علشان تخزن البيانات من السجل للذاكرة‪.‬‬ ‫‪o‬‬

‫األساس ‪:‬‬ ‫ى‬


‫البكيب‬ ‫•‬
‫ي‬
‫]‪LDR Rd, [Ra‬‬ ‫‪o‬‬

‫الىل فيه العنوان‪.‬‬


‫الىل هتحط فيه القيمة‪ ،‬و ‪Ra‬هو السجل ي‬
‫هنا ‪Rd‬هو السجل ي‬ ‫▪‬

‫]‪STR Rs, [Ra‬‬ ‫‪o‬‬

‫الىل هتحط فيه القيمة‪.‬‬


‫الىل هتاخد منه القيمة‪ ،‬و ‪Ra‬هو العنوان ي‬
‫هنا ‪Rs‬هو السجل ي‬ ‫▪‬

‫أنواع ‪Addressing Modes‬‬


‫‪Literal‬تحمل قيمة حرفية ر‬
‫مباشة زي ‪LDR Rd, =0xABCD1234‬‬ ‫•‬

‫‪Absolute Address‬تحمل عنوان مطلق زي ‪LDR Rd, =Label‬‬ ‫•‬

‫‪Register Indirect‬بتحدد العنوان باستخدام سجل زي ]‪[Ra‬‬ ‫•‬

‫‪Pre-indexing‬بتضيف قيمة للسجل قبل ما تستخدمه‬ ‫•‬

‫‪Post-indexing‬بتستخدم العنوان وبعدين تضيف عليه قيمة‬ ‫•‬

‫"‪"Addressing Modes‬و "‪ "Basic Arithmetic‬يف لغة التجميع ‪ARM‬‬


‫‪Addressing Modes:‬‬
‫‪ .1‬تعليماتيالتحميل ‪LDR:‬‬
‫لما بنستخدم التعليمات زي ‪LDR r1, =x‬و ]‪LDR r2, [r1‬‬ ‫‪o‬‬

‫المتغب ‪ x‬يف السجل ‪r1‬‬


‫ر‬ ‫األوالنية بتحمل عنوان‬ ‫▪‬

‫التانية بتستخدم العنوان الموجود يف ‪r1‬لتحميل القيمة الفعلية لـ ‪ x‬يف ‪r2‬‬ ‫▪‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Basic Arithmetic:‬‬
‫‪ .1‬التعليماتيالحسابيةياألساسية‪:‬‬
‫‪ARM‬بتدعم تعليمات زي ‪:‬‬ ‫‪o‬‬

‫‪ADD Rd, Rm, Rn‬تجمع القيمة يف السجالت ‪Rm‬و ‪Rn‬وتحط الناتج يف ‪Rd.‬‬ ‫▪‬

‫‪SUB Rd, Rm, Rn‬تطرح القيم ربي السجالت بنفس الطريقة‪.‬‬ ‫▪‬

‫متغبة من سجل‪.‬‬
‫األوبباند الثالث ممكن يكون ثابت ‪-bit 8‬أو قيمة ر‬
‫ر‬ ‫▪‬

‫‪ .2‬الضب)‪(Multiplication‬‬
‫القيمتي وبتحتفظ فقط باألرقام األقل‪(Low bits).‬‬
‫ر‬ ‫العملية ‪MUL Rd, Rm, Rn‬بتضب‬ ‫‪o‬‬
‫ً‬
‫سجلي‪(64-bit result).‬‬
‫ر‬ ‫العملية ‪UMULL‬بتحتفظ بالناتج كامال عن طريق استخدام‬ ‫‪o‬‬

‫ط‪(Logical Instructions):‬‬
‫‪ .3‬المن ي‬
‫تعليمات منطقية شبيهة بالرياضية ‪:‬‬ ‫‪o‬‬

‫قيمتي‪.‬‬
‫ر‬ ‫‪AND‬عملية ‪ bitwise-and‬ربي‬ ‫▪‬

‫‪ORR‬عملية‪bitwise-or‬‬ ‫▪‬

‫‪EOR‬عملية‪XOR‬‬ ‫▪‬

‫‪BIC‬عملية‪and-not‬‬ ‫▪‬

‫تنق القيمة)‪(NOT‬‬
‫‪ MVN‬ي‬ ‫▪‬

‫‪ .4‬القسمة‪:‬‬
‫ً‬ ‫مفيش تعليمات قسمة ر‬
‫مباشة ألن العملية معقدة جدا ومش بتنفع مع الـ‪pipelining‬‬ ‫‪o‬‬

‫‪Comparisons and Branches‬‬


‫‪CMP Instruction: .1‬‬
‫رقمي أو قيمة يف سجل )‪ (Register‬وقيمة فورية)‪(Immediate‬‬
‫دي بتاعة مقارنة ر‬ ‫‪o‬‬

‫الىل يحدد إذا كانت القيمة سلبية )‪ (N‬أو صفر)‪(Z‬‬


‫بتحدد األعالم )‪ (Flags‬يف ‪ CPSR‬زي العلم ي‬ ‫‪o‬‬

‫‪Branch Opcodes Table: .2‬‬


‫الجدول فيه أنواع التعليمات المختلفة للتشعب )‪ (Branch‬زي ‪BEQ‬للمساواة و ‪BNE‬لعدم المساواة‪.‬‬ ‫‪o‬‬

‫أكب من" أو ‪ "Branch‬لو أصغر أو مساوي‪".‬‬


‫معي زي ‪ "Branch‬إذا كان ر‬
‫كل كود ليه معن ر‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Consulting CPSR: .3‬‬


‫لما بيستخدم برنامج ‪ ARM‬تعليمات ‪ ،Branch‬بيبص عىل حالة األعالم )‪ (Flags‬يف ‪ CPSR‬لتحديد إذا‬ ‫‪o‬‬
‫معي وال ال‪.‬‬
‫كان هيقفز )‪ (Jump‬لمكان ر‬
‫‪Unconditional Branch (B): .4‬‬
‫الىل مكتوب بعده‪.‬‬
‫ببساطة بيقفز للمكان ي‬ ‫‪o‬‬

‫مفيش رشوط‪.‬‬ ‫‪o‬‬

‫‪BL - Branch-and-Link: .5‬‬


‫بتستخدم الستدعاء دوال‪.‬‬ ‫‪o‬‬

‫التال )‪ (Next Instruction‬عشان ترجع له بعد انتهاء الدالة‪.‬‬


‫بتسجل عنوان التعليم ي‬ ‫‪o‬‬

‫‪BX Instruction: .6‬‬


‫بتقفز لعنوان محدد يف سجل‪.‬‬ ‫‪o‬‬
‫ً‬
‫مفيدة جدا يف الدوال أو عند استخدام‪Function Pointers.‬‬ ‫‪o‬‬

‫‪Conditional Execution: .7‬‬


‫تخىل كل تعليم يعتمد عىل رشط ر‬
‫معي‪.‬‬ ‫ي‬ ‫مبة يف تعليمات ‪ ARM‬إنك ممكن‬
‫ر‬ ‫‪o‬‬

‫ر‬
‫الشط ده بيتم تحديده يف حقل خاص )‪ (4-Bit Field‬جوه كل كلمة تعليمات‪.‬‬ ‫‪o‬‬

‫لو ر‬
‫الشط مش متحقق‪ ،‬التعليمة بتتجاهل‪.‬‬ ‫‪o‬‬

‫الغب ضورية‪.‬‬
‫تحسي كفاءة التعليمات وتقليل عدد القفزات ر‬
‫ر‬ ‫الىل بتساعد يف‬
‫الممبات ي‬
‫ر‬ ‫دي‬
‫‪The Stack‬‬
‫‪The stack is an auxiliary data structure...‬‬
‫الىل بتحصل أثناء تشغيل‬
‫"الـ ‪ Stack‬عبارة عن مكان بنستخدمه علشان نخزن بيانات زي الحاجات ي‬ ‫‪o‬‬
‫متغبات محلية مالهاش مكان يف الـ"‪registers.‬‬
‫البنامج‪ ،‬زي استدعاء الدوال أو ر‬
‫ر‬
‫‪By convention, the stack grows downward...‬‬
‫الىل قبلها‪،‬‬
‫"الـ ‪ Stack‬بيشتغل بطريقة غريبة شوية‪ ،‬كل ما تحط بيانات جديدة‪ ،‬بتنضاف تحت البيانات ي‬ ‫‪o‬‬
‫بيكب لتحت مش لفوق"‪.‬‬
‫يعن كأنه ر‬
‫ي‬
‫‪The sp register is known as the stack pointer...‬‬
‫"فيه حاجة اسمها الـ)‪ ، stack pointer (sp‬دي بتقولنا آخر مكان البيانات موجودة فيه جوه الـ"‪stack.‬‬ ‫‪o‬‬

‫‪To push the r0 register onto the stack... .2‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫الىل بيحدد مكان التخزين )‪ (sp‬وتخزن القيمة‬ ‫ر‬


‫"لو عايز تخزن قيمة معينة يف الـ‪ ، stack‬الزم تقلل المؤش ي‬ ‫‪o‬‬
‫دي يف المكان الجديد"‪.‬‬
‫‪ The PUSH pseudo-instruction accomplishes the same task...‬ي‬
‫"بدل ما تعمل العملية دي خطوة بخطوة‪ ،‬فيه تعليمة اسمها ‪ PUSH‬بتضيف ى‬
‫أكب من قيمة يف‬ ‫‪o‬‬
‫خطوة واحدة"‪.‬‬
‫‪Popping a value off the stack involves the opposite...‬‬
‫ر‬
‫المؤش )‪ (sp‬علشان تعرف‬ ‫الىل تحت وتزود‬
‫تيج ترجع القيم من الـ‪ ، stack‬بتشيل القيمة ي‬
‫"لما ر ي‬ ‫‪o‬‬
‫إنك رجعت للقيمة القديمة"‪.‬‬
‫‪Once again this can be done with a single instruction...‬‬
‫خطوتي علشان ترجع قيمة‪ ،‬ممكن تختض وتعملها بخطوة واحدة بس"‪.‬‬
‫ر‬ ‫"بدل ما تستخدم‬ ‫‪o‬‬

‫‪ And, to pop a set of registers all at once...‬ي‬


‫الىل بتسحب مجموعة من‬ ‫ى‬
‫‪" o‬لو عايز ترجع أكب من قيمة مرة واحدة‪ ،‬ممكن تستخدم تعليمة ‪ POP‬ي‬
‫القيم مرة واحدة"‪.‬‬
‫‪Unlike X86, any data items...‬‬
‫المبة يف ‪ ARM‬عن ‪ X86‬إنك ممكن تضيف أي نوع من البيانات للـ ‪ stack‬سواء ‪ byte‬أو كلمة‬
‫" ر‬ ‫‪o‬‬
‫بشط تكون البيانات مرتبة ومتنسقة مع بعضها"‪(aligned).‬‬‫طويلة)‪ ، (double-word‬ر‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬

You might also like