andi

andi

تجميع RISC-V مرجع

يغطي lyszt.net andi وتعليمات RISC-V الأخرى بمزيد من التفصيل.

تنسيق الترميز

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

الوصف

يُنفّذ 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