andi
يغطي lyszt.net andi وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
يُنفّذ andi عملية AND بتّية مع ثابت. يأخذ and سجلّين، لكن andi يأخذ سجلًّا وقيمة فورية، وهي قيمة ثابتة مُرمَّزة في التعليمة. يرمز الحرف i إلى "immediate" (فوري). قاعدة AND لم تتغيّر: تكون بتّة النتيجة 1 فقط عندما تكون بتّتا الإدخال كلتاهما 1، لذا يعمل الثابت كقناع يحتفظ ببعض البتّات ويمسح الأخرى. تُغطّى عمليات التقنيع والعمليات البتّية في صفحة and.
يظهر شكل andi أدناه. فهو يُجري عملية AND على القيمة الموجودة في rs1 مع الثابت imm ويكتب النتيجة في rd.
andi rd, rs1, imm
استخدمه عندما تعرف مسبقًا أيّ البتّات تريد الإبقاء عليها. يحتفظ السطر التالي بأدنى 8 بتّات من t0 ويمسح الـ 24 العلوية، مستخرجًا بايت واحد من قيمة أكبر. تشير البادئة 0x إلى ثابت ست عشري.
andi t1, t0, 0xff
يجب أن يتّسع الثابت في 12 بتّة، لذا لا يمكنه التعبير عن قناع واسع. بالنسبة لقناع أكبر، حمّله في سجل باستخدام li واستخدم and.
يقول دليل RISC-V إن القيمة الفورية ذات 12 بتّة تُوسَّع إشارتها إلى 32 بتّة قبل العملية، لذا يكون لثابت سالب جميع بتّاته العلوية مضبوطة. يُجري andi وori وxori العملية البتّية على السجل rs1 وعلى تلك القيمة الموسَّعة ويضعان النتيجة في rd.
فيما يلي استخدامان شائعان. يحتفظ السطر الأول أدناه بالبتّة الأدنى فقط، وهي 1 للأعداد الفردية و0 للأعداد الزوجية. يعطي السطر الثاني الباقي بعد القسمة على 8، لأن الباقي غير المُوقَّع عند القسمة على قوّة للعدد اثنين هو البتّات الأدنى.
andi t1, t0, 1 andi t1, t0, 7
مثال
andi t1, t0, 0xff # keep only the low byte
