and

and

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

يغطي lyszt.net and وتعليمات 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

الوصف

and هي تعليمة على مستوى البتات. يحمل السجل 32 بت، وهي 32 صفرًا وواحدًا منفصلة في صف واحد. تطبّق التعليمة على مستوى البتات عمليتها على المواضع الـ32 كلها بشكل مستقل، ولا ينتقل أي حمل بين المواضع.

عند بت واحد، يعطي AND القيمة 1 فقط عندما تكون بتّا الإدخال كلتاهما 1، ويعطي 0 فيما عدا ذلك. يطبّق الشكل أدناه هذه القاعدة على المواضع الـ32 كلها، فيقارن rs1 وrs2 ويكتب النتيجة في rd.

and rd, rs1, rs2

يُستخدم AND للإخفاء (masking)، الذي يُبقي بعض البتات ويمسح غيرها. حيث تكون قيمة القناع 1، تبقى البتة الأصلية. وحيث تكون قيمة القناع 0، تكون النتيجة 0. إجراء AND لقيمة مع القناع 00001111 يُبقي البتات الأربع الدنيا ويمسح الباقي. يستخرج الإخفاء حقلًا واحدًا من قيمة تحزم عدة حقول معًا.

يسرد دليل RISC-V التعليقات and وor وxor ضمن عمليات سجل-إلى-سجل. وكلها تقرأ سجلي المصدر rs1 وrs2، وتكتب النتيجة في سجل الوجهة rd، وتنفّذ عمليات منطقية على مستوى البتات.

في المثال، يُجرى AND بين 0b1100 (تشير البادئة 0b إلى الأرقام الثنائية) و0b1010. كلا الإدخالين يحتوي على 1 في الموضع الأيسر فقط، لذا تكون النتيجة 0b1000، وتُوضع في t2.

مثال

li t0, 0b1100
li t1, 0b1010
and t2, t0, t1   # t2 = 0b1000