You are on page 1of 26

‫م‬

‫‪,‬‬

‫‪CH2: Instructions: Language of the Computer‬‬


‫‪Fifth lecture‬‬

‫ر‬
‫التشابت عن ال ‪ Instruction format‬و ال ‪memory‬‬ ‫نحك بهاد‬ ‫_ رح‬
‫ي‬
‫_ ورح نتعامل مع ال ‪MIPS Processor‬‬
‫_ ال ‪ MIPS‬ك ‪ unit of speed‬ر‬
‫بتعت عن عدد ال ‪ instruction per unit of time‬بس‬
‫تعتت مقياس دقيق النو ما بعرف شو نوعية هاي ال ‪instruction‬‬
‫ه ال ر‬
‫ي‬
‫ش بينعمل ع ال ‪ hardware‬ارسع من انو ينعمل ع ال ‪ software‬بس اذا عملت‬ ‫_ اي ي‬
‫ئ‬
‫ابط النو بدل ما يتعامل مع ‪basic complete sit‬‬ ‫يصت‬
‫كتت اشياء ع ال ‪ hardware‬رح ر‬ ‫ر‬
‫ئ‬
‫ابط‬ ‫بصت‬ ‫ر‬
‫بصت معقد اكت و ر‬ ‫بالتال ر‬
‫ي‬ ‫رح يتعامل الف ‪instruction‬‬

‫_ال ‪ MIPS‬ي‬
‫مبن بشكل بسيط ع امل انو يطلع ال ‪ software‬ارسع من ال ‪hardware‬‬

‫_مثال عنا عملية الضب بال ‪ binary‬ي‬


‫ه عباره عن ‪ shift‬و ‪sum‬‬
‫ف ممكن اصممها ك ‪ software‬بستخدام ‪ instruction‬ال ‪ shift‬و ‪ sum‬مع ‪algorithm‬‬
‫معينه او ممكن او اعمله ع ال ‪ hardware‬زي ما رح نتعلم بعدين‬
‫ر‬
‫للتشابت وهالء ح نبلش بالجد‬ ‫حك ك مقدمه‬
‫هالء هاد كلو ي‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Arithmetic Operations‬‬
‫‪• Add and subtract, three operands‬‬
‫عمليات الجمع و الطرح بتحتاج ‪ 3‬معامالت (‪)operands‬‬
‫‪• Two sources and one destination‬‬
‫ال بعمل عليهم العمليه الحسابيه‬‫‪ 2‬منهم بنسميهم مصدر (‪ )sources‬وهمه االرقام ي‬
‫ال ح اخزن يف نتيجة العمليه‬
‫و واحد هو المخزن (‪ )destination‬ي‬

‫‪1‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪• All arithmetic operations have this form:‬‬


‫‪_ arithmetic destination , sources, sources‬‬
‫‪ex:‬‬ ‫‪add a, b, c‬‬
‫صت هيك ‪a=b+c‬‬
‫ال ب ر‬
‫ي‬
‫‪• Ex :‬‬
‫)‪C code : f = (g + h) - (i + j‬‬
‫ال معنا ل ‪MIPS code‬‬
‫هالء بدنا نحول الكود ي‬
‫ال عنا بعمل عملية وحده يا جمع يا طرح بكل سطر‬
‫بنعرف انو ال ‪ form‬ي‬
‫ف رح اجزء ال ‪ code‬ل ‪ 3‬اجزاء بس رح احتاج مخازن مؤقته اخزن فيها الناتج‬

‫‪Compiled MIPS code:‬‬


‫‪add t0, g, h‬‬
‫‪add t1, i, j‬‬
‫‪sub f, t0, t1‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫بصت‬
‫الل ر‬
‫ي‬
‫‪ -‬بجمع ال ‪ g‬و ‪ h‬و بخزنهم ب ‪t0‬‬
‫‪ -‬بجمع ال ‪ j‬و ‪ i‬و بخزنهم ب ‪t1‬‬
‫الجمعي وبخزنه ب ‪f‬‬
‫ر‬ ‫‪ -‬بطرح ‪ t0‬من ‪ t1‬اي ناتج‬
‫~~~~~~~~~~~~~~~~~~~~~‬

‫‪2‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

Register Operands:
• Arithmetic instructions use register operands
operands ‫معيني الخزن فيهم ال‬
‫ر‬ Register ‫مع انو ح استخدم‬
‫هون ح يفرق ي‬
file register ‫ بنحكيلهم‬Register ‫مجموعة ال‬
• MIPS has a 32 × 32-bit register file
31 ‫ ل‬0 ‫ ترقيمهم من‬32-bit ‫ كل واحد يف‬32 register ‫ عندي‬MIPS ‫بال‬
word ‫ بنسميهم‬32-bit ‫كل‬

- Use for frequently accessed data

- Numbered 0 to 31

- 32-bit data called a “word”

• Assembler names
‫ رمز خاص فيه منهم‬register ‫ عنا لكل‬MIPS ‫بال‬
t ‫ بالحرف‬10 register -
s ‫ بالحرف‬8 register -

- $t0, $t1, …, $t9 for temporary values

- $s0, $s1, …, $s7 for saved variables


processor ‫ومسمي باحرف مختلفه النو طريقة عمل ال‬ ‫ش ح نستخدمهم‬ ‫ر‬
‫ر‬ ‫وهدول اكت ي‬
‫معهم بتختلف‬

‫ قبل‬$ ‫ بانو بنحط اشارة‬register ‫** مهم تنتبه لطريقة كتابة اسم ال‬

3 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫كالتال‪:‬‬
‫ي‬ ‫مع الحل‬
‫ال قبل رح يفرق ي‬
‫يعن لو بدنا نرجع للمثال ي‬
‫ي‬
‫رح نفرض انو ال ‪ g‬مخزنه ع ال ‪ s1‬وال ‪ h‬ع ال ‪ s2‬وال ‪ i‬ع ال ‪ s3‬وال ‪ j‬ع ال ‪ s4‬وال ‪ f‬ع ‪s0‬‬
‫ونحط اسم ال ‪ register‬بدل الحرف‬
‫‪add $t0, $s1, $s2‬‬
‫‪add $t1, $s3, $s4‬‬
‫‪sub $s0, $t0, $t1‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Memory Operands :‬‬
‫ش مخزن بال ‪ memory‬الزم اعرف ال ‪ address‬تبعه‬
‫هالء لما بدي استخدم ي‬
‫تعو نتعرف ع ‪ memory‬ال ‪ : MIPS‬ي‬
‫ه عباره عن‬
‫‪-byte address‬‬
‫‪-word a line‬‬
‫يعن كل ‪ address‬عباره عن ‪byte=8-bit‬‬
‫ي‬
‫وكل سطر ‪ 4byte‬بمثل ‪ word‬النو ال ‪word = 32-bit‬‬

‫‪4‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫هاي الرسمه بتوضحلنا شكلها‬


‫ال بهمنا نفهمه هو انو كل سطر ال ‪ Address‬الو من مضاعفات ال ‪4‬‬
‫ف ي‬

‫سالن ال ‪ 28-byt‬باي ‪ word‬موجوده ؟؟‬


‫ي‬ ‫طيب لو‬
‫رح اقسمها ع ‪ 4‬النو كل ‪ word‬فيها ‪28byt‬‬
‫‪28/4=7‬‬
‫طيب لو بدنا ك ادرس رح نحول ل ‪binary‬‬
‫?= ‪11100 / 100‬‬
‫لتي‬
‫كان بحرك الفاصله مت ر‬
‫لما اقسم رقم بايناري ع ‪ 4‬ي‬
‫ه ‪ 2‬قوه ‪2‬‬
‫هالحك؟ النو االساس عندي ‪ 2‬و ال ‪ 4‬ي‬
‫ي‬ ‫كيف‬
‫لتي‬
‫زي ما باالرقام الديسيمل لما اقسم ع االساس ‪ 10‬بتتحرك الفاصله متله ف ع ‪ 100‬مت ر‬
‫وهكذا‬
‫ف الجواب ‪ 111‬وهو ادرس ال ‪word 7‬‬

‫‪5‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫طريقتي معروفات‬
‫ر‬ ‫نحك عن طريقة تخزين ال ‪ data‬بالميموري وعنا‬
‫ي‬ ‫هالء ح‬
‫‪1) Big Endian: Most-significant byte at least address of a word‬‬
‫ال هو ال ‪ Most-significant‬رح يتخزن ب‬
‫بحيل لما بدي اخزن ‪ word‬ف اول ‪ byte‬ي‬
‫ي‬
‫ال رقمه اقل‬
‫االدرس ي‬
‫مثال لو عندي هاد الرقم بالهيكسا ‪AB-CD-F0-02‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫رفي بنخزنهم ب ‪byte‬‬
‫يعن كل ح ر‬
‫كل حرف ‪ 4bit‬ي‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬
‫‪AB‬‬ ‫‪CD‬‬ ‫‪F0‬‬ ‫‪02‬‬

‫ه الطريقه المتبعه بال ‪MIPS‬‬


‫وهاي ي‬

‫‪2) Little Endian: least-significant byte at least address‬‬

‫ال هو ال ‪ least-significant‬رح‬
‫بحيل لما بدي اخزن ‪ word‬ف اخر ‪ byte‬ي‬
‫ي‬ ‫هون‬
‫ال رقمه اقل‬
‫يتخزن ب االدرس ي‬

‫مثال لو عندي هاد الرقم بالهيكسا ‪AB-CD-F0-02‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬


‫‪02‬‬ ‫‪F0‬‬ ‫‪CD‬‬ ‫‪AB‬‬

‫~~~~~~~~~~~~~~~~~~‬
‫تنتي ‪:‬‬
‫نحك عن العمليات ع الميموري و همه ر‬
‫ي‬ ‫هالء ح‬
‫‪1) load (lw) :‬‬
‫ر‬
‫للريجست‬ ‫*بنقل ال ‪ data‬من الميموري‬
‫‪Form : lw destination , address in memory‬‬

‫‪6‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪2) store (sw) :‬‬


‫ر‬
‫الريجيست للميموري‬ ‫*بنقل ال ‪ data‬من‬
‫‪Form : sw destination , address in memory‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫بتعنيل بال ‪ MIPS‬؟‬


‫ي‬ ‫** مالحظه مهم ‪ :‬لما يكون عندي ‪ Array‬مثال ]‪ A[4‬شو‬
‫وبنسم ال ‪base address‬‬
‫ي‬ ‫هال اي ‪ Array‬اسمها بمثل ‪ address‬اول ‪element‬‬
‫ال هو ‪address‬‬
‫وال ‪ element‬هو عباره عن ‪ word‬ف لو كان ال ‪ Base address‬صفر ي‬
‫تان عنض شو رح يكون ؟‬
‫اول عنض ف ي‬
‫والل اعرفنا عنها انو توزي ع ال ‪ address‬بكون من‬
‫ال اخدنا ي‬
‫من شكل ال ‪ memory‬ي‬
‫مرقمي‬
‫ر‬ ‫مضاعفات ال ‪" 4‬ارجعو ل رسمة ال ‪ memory‬بتالحظه انو بال ‪ address byte‬كنا‬
‫‪" ... 12 8 4 0‬‬
‫تان عنض ‪ 1‬ف‬
‫وه جاي من انو ‪ index‬ي‬
‫تان عنض ح يكون ‪ 4‬ي‬
‫بالتال ‪ address‬ي‬
‫ي‬ ‫ف‬
‫‪4=4*1‬‬
‫كمان شغله لو كان ال ‪ base address‬مش صفر ف رح ابلش منه واضيف قيمته لل‬
‫‪index*4‬‬
‫بتحكيل انو‬
‫ي‬ ‫بالتال بقدر استنتج قاعده‬
‫ي‬
‫‪Address A[n] = 4*n + base address‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪7‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪EX:‬‬
‫;]‪C code: g = h + A[8‬‬
‫‪g in $s1, h in $s2, base address of A in $s3‬‬
‫? ‪Find compiled MIPS code‬‬
‫معطين كل رمز ع اي ‪ Register‬موجود ‪:‬‬
‫ي‬ ‫ين كود بال ‪ c‬وبدو احوله لكود ‪ MIPS‬و‬
‫معط ي‬

‫ر‬
‫ريجست و ارري وحكينا انو االري بتكون ع الميموري والعمليات‬ ‫هالء عندي عملية جمع ربي‬
‫تنتي بس همه " ‪" load and sort‬‬ ‫ال بقدر اعملها ع الميموري ر‬
‫ي‬
‫ر‬
‫ريجست القدر اجمعها‬ ‫ال بدي ياها من االري ع‬
‫ف رح اعمل ‪ load‬للقيمه ي‬
‫كيف بعمل ال ‪ load‬؟‬
‫‪Form : lw destination , address in memory‬‬
‫ر‬
‫رجست انا بختاره الخزن يف مثال ‪$t0‬‬ ‫ال ‪ destination‬هو اي‬
‫ال ‪ address in memory‬هو ]‪ address A[8‬وكيف ح نطلعو حكينا هو عباره عن‬
‫‪Address A[n] = 4*n + base address‬‬
‫‪Address A[8] = 4*8 + $s3‬‬
‫بنكتبه هيك ‪32($s3) = 4*n ( base address ) :‬‬
‫بصت الكود عنا ‪:‬‬
‫ف ر‬
‫‪lw $t0, 32($s3) # load word‬‬
‫وبعدين بجمعهم ‪:‬‬

‫‪add $s1, $s2, $t0‬‬


‫*المثال ساليد ‪ 10‬نفس الفكره‬

‫‪8‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪Sixth Lecture‬‬

‫• ال ‪ Operands‬بال ‪ MIPS code‬ممكن يكون مخزن بال ‪ Memory‬او‬


‫وبنسم "‪" Immediate Operands‬‬
‫ي‬ ‫‪ Registers‬او يكونو موجودين مبارسه بالكود‬
‫•‬
‫‪Registers vs. Memory :‬‬
‫شو الفرق من انو اخزن ال ‪ Operands‬بال ‪ memory‬عن ال ‪registers‬‬
‫بتلزمن ‪/‬‬
‫ي‬ ‫ال‬
‫بالتال ما بكفو الخزن كل ال ‪ Operands‬ي‬
‫ي‬ ‫‪ -‬ال ‪ registers‬عددهم محدود‬
‫وه ارسع من ال ‪memory‬‬
‫ي‬
‫كبته ‪ /‬بس بطيئه و التعامل مع ال ‪ Operands‬ي‬
‫ال جواها الزم‬ ‫‪ -‬ال ‪ memory‬سعتها ر‬
‫اعمل ‪ lw‬او ‪sw‬‬

‫‪Immediate Operands :‬‬


‫ال بدي ياه مبارسه بالكود‬
‫حكينا هو انو استخدم ال ‪ Operands‬ي‬
‫وبكون يف حرف "‪ "i‬باخر اسم ال ‪ MIPS code‬مثال ‪addi $s3, $s3, 4 : addi‬‬
‫يعن كانه زاد ع قيمة ال‬
‫هون ح يجمع ال ‪ 4‬مبارسه مع ال ‪ $s3‬و يخزنهم بال ‪ $s3‬ي‬
‫‪4 registers‬‬
‫‪The Constant Zero :‬‬
‫ال عنا هو ال ”‪ zero registers “$Zero‬وهو ‪registers‬‬ ‫‪ -‬من انواع ال ‪ registers‬ي‬
‫ثابت قيمته صفر ما بنقدر نعدل عليه‬
‫كالتال ‪:‬‬
‫ي‬ ‫تان‬
‫‪ -‬بستخدمه لما بدي انقل داتا من ‪ registers‬ل ‪ registers‬ي‬
‫‪add $t2, $s1, $zero‬‬

‫‪9‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ه صفر ف ح ينتج ‪ $s1‬ويخزنها ب‬


‫ال ي‬
‫هون ح يجمع قيمة ‪$s1‬مع قيمه ‪ $zero‬ي‬
‫يعن كانو نقل قيمتها‬
‫‪ $s2‬ي‬

‫‪Sign Extension :‬‬


‫بتحكيل انو لما يكون عندي رقم بال ‪ tow’s compliment‬و بدي امثله‬
‫ي‬ ‫ه قاعده‬‫ي‬
‫ال بدي ياه‬
‫ه ال ‪ most significant bit‬بالعدد ي‬
‫ال ي‬
‫اكت بكرر اخر ‪ bit‬ي‬
‫بعدد ‪ bit‬ر‬
‫مثال ‪:‬‬
‫‪4-bit 8-bit‬‬
‫‪0111=00000111=7‬‬
‫‪1110=11111110=-2‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪Representing Instructions :‬‬

‫‪• Instructions are encoded in binary‬‬


‫‪Called machine code‬‬
‫‪• MIPS instructions‬‬
‫‪Encoded as 32-bit instruction words‬‬
‫‪• Register numbers‬‬
‫‪- $t0 – $t7 are reg’s 8 – 15‬‬
‫‪- $t8 – $t9 are reg’s 24 – 25‬‬
‫‪- $s0 – $s7 are reg’s 16 – 23‬‬
‫همن اعرفه النو بس نكتب الكود‬ ‫ر‬
‫بحكيل انو كل ريجست الو رقم ثابت وب ي‬
‫ي‬ ‫هون‬
‫ر‬
‫الريجست مش اسمو‬ ‫بالبيتي الزم نكتب رقم‬
‫بعت عنو ب ‪01000‬‬ ‫ر‬
‫ف مثال الريجست ‪ $t0‬رقمه ‪ 8‬ر‬
‫ر‬
‫ريجست القدر امثلهم كلهم بالبايتي‬ ‫** الرقم بالبايتي بكون من ‪ 5bit‬النو عندي ‪32‬‬
‫بدي‪5bit‬‬

‫‪10‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

MIPS R-format Instructions:

op rs rt rd shamt funct
6 5 5 5 5 6
bits bits bits bits bits bits
arithmetic and ‫ وتحديدا ال‬MIPS ‫ بال‬Instruction ‫هو عباره عن طريقه لكتابة ال‬
‫معي‬
‫اش ر‬‫ال فوق بتدل ع ي‬
‫ بحيث انو كل خانه من ي‬, shift Instruction
• Instruction fields:
- op: operation code (opcode)
format ‫بحددل كيف اعرف نوع ال‬
‫ي‬
"000000" ‫ تحديدا بكونو‬R-format ‫و بال‬
- rs: first source register number
‫ر‬
" source register" ‫ريجست‬ ‫رقم اول‬
- rt: second source register number
‫ر‬
" source register" ‫ريجست‬ ‫تان‬
‫رقم ي‬

- rd: destination register number


destination register ‫رقم ال‬
- shamt: shift amount (00000 for now)
‫ال بدي اعملها‬
‫ ي‬shift ‫عدد مرات ال‬
- funct: function code (extends opcode)
Instruction ‫واالخته مع بعض بحددو نوع ال‬
‫ر‬ ‫يعن اول خانه‬
‫ ي‬funct+opcode ‫ال‬

11 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪EX: add $t0, $s1, $s2‬‬


‫بدي امثل هاد الكود بال ‪: R-FORMAT‬‬
‫قبال‬
‫اش بعملو انو احط ال ‪ R-FORMAT‬ي‬
‫اول ي‬

‫‪op‬‬ ‫‪rs‬‬ ‫‪rt‬‬ ‫‪rd‬‬ ‫‪shamt‬‬ ‫‪funct‬‬


‫‪6‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪6‬‬
‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬
‫ان احدد كل خانه شو الزم احط فيها‬
‫ش ي‬
‫تان ي‬
‫ي‬
‫‪$t0=$s1+$s2‬‬ ‫احنا بنعرف انو ‪ instruction‬ال ‪ add‬بعمل هيك‬

‫يعن ال ‪rs=s1 ,rt=s2 ,rd=t0‬‬


‫ي‬
‫وال ‪ op‬حكينا لل ‪ R-Format‬ثابت وبساوي ‪0‬‬
‫وال ‪ shift=0‬النو هاد الكود ما بعمل ‪shift‬‬
‫وال ‪ funct‬بكون ثابت و معط‬

‫ش برقم‬
‫اعت عن كل ي‬
‫ان ر‬
‫ثالت خطوه ي‬
‫مع‬
‫وحكينا انو كل ‪ register‬الو رقم الزم اكون حافظه اما الفنكشن ف بكون ي‬

‫ان اكتب االرقام بال ‪binary‬‬


‫اخر خطوه ي‬

‫يعن الجواب ‪000000100011001001000000001000002‬‬


‫ي‬

‫‪12‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

MIPS I-format Instructions:

op rs rt constant or address
6 5 5 16
bits bits bits bits
Immediate arithmetic and load/store ‫ لكتابة ال‬format ‫بستخدم هاد ال‬
instructions
Instruction fields:
- op: operation code (opcode)
- rs , rt first and second register number
‫ ورح‬load/store ‫ او‬Immediate arithmetic ‫و عل شو بدلو بالزبط بتختلف ازا كان‬
‫اوضحها كمان شوي‬
- constant or address

: Immediate arithmetic ‫** نبلش بال‬


- rs : source register
- rt : destination register
- constant :
‫– حسب القاعده‬215 to +215 – 1 ‫ ف رح يكون الرينج الو‬2’s compliment ‫رقم بال‬
" –2n-1 to +2n-1 –1 “
EX: addi $t0, $s1, 5
‫ مبارسه‬5 ‫ال قبل بس الفرق انو رح نحط الرقم‬
‫لو بدنا نحل هاد رح يكون نفس المثال ي‬
op : ‫فاض‬
‫ي‬ ‫مع تركتو زي‬
‫مش ي‬ rs=s1 rt=t0 constant = 5

Op 10001 01000 0000 0000 0000 0101


13 done by : lilas qawasmeh
‫م‬
,

: load/store ‫** اما ال‬

- rs : register contain base address


- rt : destination register
- address : offset
memory ‫ بال‬address ‫ مشان اعرف ال‬rs ‫وه قيمه بجمعها مع ال‬
‫ي‬
~~ ‫ بهاد التفصيل‬I-Format ‫~~ الدكتور ما حك عن ال‬
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Logical Operations:

MIPS ‫ وال‬operation ‫بهمن منو اعرف ال‬


‫ي‬ ‫** هاد الجدول‬
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

14 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪Shift Operations:‬‬
‫حكينا انو بستخدمله ال ‪ R-Format‬وانو خانة ال ‪ shamt‬بتمثل عدد مرات ال ‪shift‬‬
‫‪◼ Shift left logical‬‬
‫** مالحظه ‪:‬‬
‫وال بساوي ‪14‬‬
‫يصت ‪ 01110‬ي‬
‫ال بساوي ‪ 7‬وعملتله ‪ sll‬رح ر‬
‫مع الرقم ‪ 00111‬ي‬
‫لو ي‬
‫يعن بنالحظ انو عمليت ال ‪ Shift left logical‬كانها عملية ضب ب ‪ 2‬طيب لو عملت ‪sll‬‬
‫ي‬
‫مرتي كانو ضب ب ‪ 4‬طيب ثلث مرات ضب ب ‪ 8‬وهيك بستنتج القاعده ‪:‬‬ ‫ر‬
‫** ‪** sll by i bits multiplies by 2i‬‬

‫‪◼ Shift right logical‬‬


‫وال بساوي ‪7‬‬
‫يصت ‪ 00111‬ي‬
‫ال بساوي ‪ 14‬وعملتله ‪ srl‬رح ر‬
‫مع الرقم ‪ 01110‬ي‬
‫لو ي‬
‫يعن بنالحظ انو عمليت ال ‪ Shift right logical‬كانها عملية قسمه ع ‪ 2‬ومنها بستنتج ‪:‬‬
‫ي‬
‫**)‪**srl by i bits divides by 2i (unsigned only‬‬

‫** بال ‪ srl‬بتنطبق القاعده ع ال ‪ unsigned‬بس والقسمه بناتج صحيح‬


‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫‪15‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,

shift ‫** تذكر انواع ال‬

16 done by : lilas qawasmeh


‫م‬
,

Seventh Lecture

Conditional Operations:

beq : Branch if equal to a labeled


beq rs, rt, L1
- if (rs == rt) branch to instruction labeled L1;
‫ اذا تساوى "اي اذا تحقق الشط " رح ينتقل لل‬rt ‫ مع‬rs ‫ انو ح يقارن‬beq ‫ال بعملو ال‬
‫ي‬
‫ال تحته‬
‫ " واذا ما تحقق رح ينفذ السطر ي‬L1" labeled

bne : Branch if not equal to a labeled


bne rs, rt, L1
- if (rs != rt) branch to instruction labeled L1;
‫نفس المبداء بس الشط هون انهم ما يتساوى‬
j : jump
j L1
- nunconditional jump to instruction labeled L1
‫ مبارسه بدون اي رسط‬labeled ‫رح ينتقل لل‬
EX :
C code:
if (i==j) f = g+h;
else f = g-h;
f, g,h,I,j in $s0, $s1 , $s2, $s3, $s4

17 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫عندي هاد الكود بدي اكتبه بال ‪: MIPS‬‬


‫ش الزم اعرف شو بعمل الكود ؟ " رح يقارن ربي ‪ i‬و ‪ j‬اذا متساوين رح يجمع وذا الء رح‬‫اول ي‬
‫يطرح "‬
‫‪Compiled MIPS code:‬‬
‫خلينا نفكر فيها هيك << ر‬
‫من الكود رح ينفذ ال ‪ else‬؟‬
‫ر‬
‫الريجست ‪ s4‬ف روح لل ‪else‬‬ ‫ر‬
‫الريجست ‪ s3‬ال تساوي قيمة‬ ‫اذا كانت قيمة‬
‫‪bne $s3, $s4, Else‬‬
‫ال تحته وانا لما يتساوى‬
‫"يعن ما تحقق الشط " رح ينفذ السطر ي‬
‫ي‬ ‫طيب حكينا اذا تساوى‬
‫بدي اجمع‬
‫‪add $s0, $s1, $s2‬‬
‫‪j Exit‬‬
‫ليش حطينا ال ‪ j‬مشان بس ينفذ ال ‪ add‬ما يمر ع ‪ labeled‬ال ‪else‬‬
‫اخل يطرح‬
‫وعند ال ‪ else‬بدي ي‬
‫‪Else: sub $s0, $s1, $s2‬‬
‫… ‪Exit:‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪EX:‬‬
‫‪C code:‬‬
‫;‪while (save[i] == k) i += 1‬‬
‫‪i in $s3, k in $s5, address of save in $s6‬‬
‫هاد الكود ح يقارن محتويات اري مع ‪ k‬طالما همه متساوين رح يضل يقارن لعند اول عنض‬
‫مش مساوي يطلع من ال ‪loop‬‬

‫‪18‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫طيب كيف افكر بحل لهيك سؤال ؟‬


‫لحن اقدر اتعامل معه‬ ‫ر‬
‫ريجست ر‬ ‫ال بالميموري الزم نعمله لود ع‬
‫اش اتفقنا انو العنض ي‬
‫اول ي‬
‫وحكينا عن كيف بطلع ال ‪ address‬لالري لما اتعامل مع ال ‪ MIPS‬نتذكره ‪:‬‬
‫‪Index‬‬ ‫‪address‬‬
‫‪0‬‬ ‫‪[$s6]+4*0‬‬
‫‪1‬‬ ‫‪[$s6]+4*1‬‬
‫‪2‬‬ ‫‪[$s6]+4*2‬‬
‫‪3‬‬ ‫‪[$s6]+4*3‬‬

‫بنالحظ انو بنضب ال ‪ index‬ب ‪ 4‬وبنضيفلو ال ‪base address‬‬


‫ه ‪ sll‬والنو بدي اضب ب ‪ 4‬ف رح اح ال‬
‫ال ‪ index‬موجود ب ‪ s3‬و عملية الضب ي‬
‫تان ع فرض ‪t1‬‬ ‫ر‬
‫‪ shamt=2‬ورح اخزن الجواب باي رجست ي‬
‫‪sll $t1, $s3, 2‬‬
‫بعدين ح اجمعلو ال ‪ base address‬الموجود ب ‪s6‬‬
‫‪add $t1, $t1, $s6‬‬
‫ر‬
‫رجست انا بختاره واختار هون ‪t0‬‬ ‫وبعدين بضل اعملو ‪ load‬ع‬
‫كالتال‬
‫ي‬ ‫ال بستخدمها لل ‪Load‬‬
‫وحكينا انو الصيغه ي‬
‫)‪Lw register, offset (register Includes base address‬‬
‫ه عباره عن "‪ " index *4‬لل‬ ‫كالتال ‪ :‬بضيف قيمه ال ‪ offset‬ي‬
‫ال ي‬ ‫ي‬ ‫ال بعملو‬
‫واتفقنا انو ي‬
‫‪ base address‬مشان يطلع ال ‪ address‬المطلوب‬
‫"يعن زبطنا‬
‫ي‬ ‫متغت ‪ i‬لهيك ضبنا ب ‪ 4‬وجمعنا‬
‫عت عنو ب ر‬‫ال ‪ offset‬الزم يكون رقم و هون ر‬
‫ال ‪ address‬المطلوب " لحالنا ف لهيك بحط ال ‪ offset‬صفر " النو ال ‪ address‬جاهز‬
‫عنا بال ‪t1‬‬
‫)‪lw $t0, 0($t1‬‬

‫‪19‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ال وصلتلها وخزنتها ب ‪ t0‬مع ال ‪ k‬الموجوده ب ‪s5‬‬


‫هالء ضل اقارن القيمه ي‬
‫انه اللوب ف لهيك ح استخدم ‪ bne‬وخليه يروح‬
‫حكينا من السؤال انو لما ما يتساوى بدي ي‬
‫الي اسم ‪ labeled‬ع فرض ‪exit‬‬
‫‪bne $t0, $s5, Exit‬‬
‫ال فوق‬
‫ال الخطوات ي‬
‫طيب لو طلع متساوي بدي ياه يضيع واحد ع ال ‪ index‬و يرجع يكرر ي‬
‫اخل يعمل ‪ jump‬ل ‪ labeled‬واحطها عند اول خطوه‬ ‫معناتو ح ي‬
‫‪addi $s3, $s3, 1‬‬
‫‪j Loop‬‬

‫بصت ‪::‬‬
‫فالكود كامل ر‬
‫‪Compiled MIPS code:‬‬
‫‪Loop: sll $t1, $s3, 2‬‬
‫‪add $t1, $t1, $s6‬‬
‫)‪lw $t0, 0($t1‬‬
‫‪bne $t0, $s5, Exit‬‬
‫‪addi $s3, $s3, 1‬‬
‫‪j Loop‬‬
‫… ‪Exit:‬‬
‫~~~~~~~~~~~~~~~~~~~~~~~~~~‬
‫‪More Conditional Operations:‬‬
‫‪Slt: set one if less than‬‬
‫كالتال ‪:‬‬
‫ي‬ ‫الصيغه الو‬
‫‪slt rd, rs, rt‬‬
‫;‪if (rs < rt) rd = 1; else rd = 0‬‬

‫‪20‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫اال بال ‪ register‬الثالث رح‬


‫التان اذا اصغر من العدد ي‬
‫اال بال ‪ register‬ي‬
‫رح يقارن اذا العدد ي‬
‫يحط بال ‪ rd = 1‬واال ‪rd = 0‬‬
‫بتصت الول ‪register‬‬
‫ر‬ ‫يعن انتبه عمليت ال ‪set‬‬
‫ي‬

‫كالتال ‪:‬‬
‫ي‬ ‫وممكن يكون ‪ Immediate‬بانو يقارن ربي محتوى‪ register‬وعدد ثابت‬
‫‪slti rt, rs, constant‬‬
‫;‪if (rs < constant) rt = 1; else rt = 0‬‬

‫‪Use slt in combination with beq, bne:‬‬


‫بستخدم ال ‪ slt‬مع ال ‪ bne‬او ال ‪ beq‬مشان اعمل ‪ branch‬مع عمليات المقارنه المختلفه‬

‫‪Branch if less than :‬‬


‫‪slt $t0, $s1, $s2‬‬
‫احنا اتفقنا انو هون رح يقارن )‪ if ($s1 < $s2‬رح يعمل ‪ t0=1‬واال ‪t0=0‬‬
‫‪bne $t0, $zero, L‬‬
‫ال اعملتلها ‪ set‬ما بتساوي الصفر " اكيد واحد " معناتو ‪ s1<s2‬و‬
‫هون ح يشيك اذا القيمه ي‬
‫يعن كانو بعمل ‪ branch‬اذا اقل‬
‫ي‬ ‫ح يعمل‪branch‬‬
‫‪Branch if greeter than or equal :‬‬
‫‪slt $t0, $s1, $s2‬‬
‫‪beq $t0, $zero, L‬‬
‫ال اعملتلها ‪ set‬بتساوي الصفر معناتو هاي ‪ s1<s2‬ما تحققت و‬
‫هون ح يشيك اذا القيمه ي‬
‫اكت من او يساوي‬
‫ال تحقق هو عكسها " ‪ t "s1>=s2‬ح يعمل‪ branch‬اذا ر‬ ‫ي‬

‫‪21‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
,
‫ر‬
‫ بينما كان ممكن‬software ‫بانستكشن ع ال‬ ‫الحك‬ ‫حال ليش اعمل هاد‬
‫ي‬ ‫طيب هون ح اسال ي‬
‫ بعمل نفس الشغل ؟؟‬hardware ‫ جاهز معمول ع ال‬operation ‫يكون عندي‬

‫بصت عندي انو‬


‫ال ر‬
‫ي‬
‫بالتال ال‬ ‫ معقد ر‬hardware ‫ رح يصت ال‬hardware ‫ ف حال كان ع ال‬-
‫اكت‬
‫ي‬ ‫ر‬ ‫ي‬
‫ر‬
‫ ح يكون ابطء و بالمقابل عدد االنستكشن اقل‬cycle time

‫االنستكشن ر‬
‫اكت بس ال‬ ‫ر‬ ‫ رح يكون عدد‬software ‫ يف حال كان ع ال‬-
‫اكت‬
‫ ابسط ورسعته ر‬hardware

Why not blt, bge, etc?


Hardware for <, ≥, … slower than≠ ,=
Combining with branch involves more work per instruction, requiring a
slower clock
All instructions penalized!
beq and bne are the common case
This is a good design compromise

22 done by : lilas qawasmeh


‫م‬
‫‪,‬‬

‫‪Eighth Lecture‬‬

‫‪Branch Addressing: use I_format‬‬

‫‪op‬‬ ‫‪rs‬‬ ‫‪rt‬‬ ‫‪constant or address‬‬


‫‪6‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪16‬‬
‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬ ‫‪bits‬‬
‫نوع ال ‪- Opcode > branch‬‬
‫ال بدنا انقارنهم > ‪- two registers‬‬
‫ي‬
‫ينقلن عليه ال ‪- target address > branch‬‬
‫ي‬ ‫ال بدي‬
‫االدرس ي‬
‫‪** Most branch targets are near branch‬‬
‫** ال ‪ branch‬بقدر ينقلن لمكان قريب بس "ح يتوضح تحت ر‬
‫اكت "‬ ‫ي‬

‫ر‬
‫باالنستكشن هو ال ‪ offset‬وهو بحدد كم ‪ word‬بدي ابعد عن ال ‪pc‬‬ ‫ال‬
‫ال ‪ address‬ي‬
‫مع ؟‬
‫ال ي‬
‫طيب كيف بنحصل عل ال ‪ target address‬من ال ‪ offset‬ي‬
‫ال عنا بكون ‪ word_ address‬وانو ‪ memory‬ال ‪MIPS‬‬ ‫احنا اعرفنا انو ال ‪ address‬ي‬
‫ه عملية‬
‫عباره عن ‪ byte_ address‬ف الزم اضبه ب ‪ " 4‬عملية الضب ب ‪ 4‬بالبايتي ي‬
‫لتي "‪ "00‬للرقم "‬
‫اضافة مت ر‬
‫ال بدي اروحله هو عباره عن وين‬
‫يعن ال ‪ address‬ي‬
‫مكان ي‬
‫ي‬ ‫طيب انا عرف كم الزم ابعد عن‬
‫انا هالء "‪ " pc‬وكم بدي ابعد‬
‫‪Target address = PC + offset × 4‬‬
‫‪- Note :‬‬
‫ال بدي انفذه ‪1) pc :‬‬ ‫ر‬
‫هو ادرس النكست انستكشن ي‬
‫‪2) PC already incremented by 4 by this time‬‬

‫‪23‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫‪Jump Addressing: use J_format‬‬

‫‪op‬‬ ‫‪address‬‬
‫‪6‬‬ ‫‪26‬‬
‫‪bit‬‬ ‫‪bits‬‬
‫ال قبل انو عباره عن ‪ word‬وبدي اضبه ب ‪ 4‬بس هون‬
‫ال ‪ address‬هون نفس فكرت ي‬
‫كالتال‬
‫ي‬ ‫بقرق عندي انو ‪ 26-bit‬ف رح اتعامل معه‬
‫اليمي "للضب ب ‪"4‬‬‫ر‬ ‫‪ )1‬بضيف ‪ 2bit‬ع‬
‫‪ )2‬بضيف ‪ 4bit‬ع الشمال من ال ‪PC31…28‬‬

‫‪PC31…28‬‬ ‫‪address‬‬ ‫‪00‬‬


‫‪4bit‬‬ ‫‪26bit‬‬ ‫‪2bit‬‬

‫‪EX:‬‬

‫هالء عندي هاد الكود وبدي اعرف ال ‪Offset Address‬؟‬

‫‪24‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ال عند ال ‪ jump‬هو ال ‪loop‬‬


‫ال ‪ labeled‬ي‬
‫من الواضح انو ‪ address‬ال ‪ loop‬هو ‪8000‬‬

‫ه عباره عن ال ‪target address‬‬‫ال ‪ 8000‬ي‬


‫اعرفنا انو ال ‪ target address‬عباره عن ‪ two-bit‬اصفار وال ‪ offset‬و ‪ 4bit‬من ال ‪pc‬‬

‫ال معو‬‫الجزئي ي‬
‫ر‬ ‫العرف ال ‪ offset‬الزم اتخلص من‬
‫كبت‬ ‫‪31‬‬ ‫‪28‬‬
‫ش ر‬‫ال الرينج الهم ربي ‪ 2‬و ‪ 2‬وهو ي‬ ‫بتعت عن اخر ‪ 4bit‬ي‬‫مع ‪ 8000‬وال ‪ pc‬ر‬ ‫ال ي‬‫الرقم ي‬
‫بالتال فيه اشيلهم وما بأثره ع القيمه‬
‫ي‬ ‫مع ف حيكونه اصفار‬‫ال ي‬‫ع الرقم ي‬
‫اما بالنسبه للصفرين ف همه اجو من الضب ب ‪ 4‬بتخلص منهم بالقسمه ع ‪4‬‬
‫‪8000 /4=2000‬‬
‫بالتال ال ‪ offset‬يساوي ‪2000‬‬
‫ي‬

‫~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~‬

‫بالتال الرينج الها ‪ -215 > 215 -1‬و هاد هو‬


‫ي‬ ‫** ال ‪ Offset‬بال ‪ branch‬عباره عن ‪16-bit‬‬
‫مسموحل يكون ال ‪ branch‬ضمنه‬
‫ي‬ ‫ال‬
‫الرينج ي‬

‫مع ‪32-bit‬‬
‫** اما بال ‪ jump‬ف ي‬

‫استعي بال ‪ , jump‬نشوف كيف بالمثال‬


‫ر‬ ‫لش بعيد ح‬
‫طيب لو كنت بدي اعمل ‪ branch‬ي‬

‫‪EX:‬‬
‫‪beq $s0,$s1, L1‬‬
‫‪L2: …..‬‬
‫‪.‬‬
‫‪.‬‬
‫……‪L1 :‬‬
‫كالتال‬
‫ي‬ ‫كتت عن ال‪ Beq‬ح اعدل ع الكود‬
‫لو كانت ال ‪ L2‬بعيده ر‬

‫‪25‬‬ ‫‪done by : lilas qawasmeh‬‬


‫م‬
‫‪,‬‬

‫ينقلن ل ‪ L1‬واذا الء ح يكمل من‬


‫ي‬ ‫ال عندي ح يشوف اذا متساويات رح‬
‫‪ -‬الكود ي‬
‫عند ‪L2‬‬
‫كالتال ‪ :‬بعكس الشط بدل ‪ Beq‬بحط‪ Bne‬واذا مش متساويات‬ ‫ي‬ ‫ال ح اعملو‬‫‪ -‬ي‬
‫ال ح احط يف ‪ jump‬ع ‪L1‬‬ ‫ر‬
‫التان ي‬
‫روح ع ‪ L2‬واذا متساويات انزل لالنستكشن ي‬
‫‪ -‬الحل ‪:‬‬
‫‪bne $s0,$s1, L2‬‬
‫‪j L1‬‬
‫… ‪L2:‬‬
‫‪.‬‬
‫‪.‬‬
‫… ‪L1:‬‬
‫~~~~~~~~~~‬

‫‪26‬‬ ‫‪done by : lilas qawasmeh‬‬

You might also like