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 अलग-अलग 0 और 1 होते हैं। एक बिटवाइज़ निर्देश अपने ऑपरेशन को सभी 32 स्थानों पर स्वतंत्र रूप से लागू करता है, और स्थानों के बीच कोई कैरी नहीं जाता।

एक अकेले बिट पर, AND केवल तब 1 देता है जब दोनों इनपुट बिट 1 हों, अन्यथा 0 देता है। नीचे दिया गया रूप उस नियम को सभी 32 स्थानों पर लागू करता है, rs1 और rs2 की तुलना करता है और परिणाम को rd में लिखता है।

and rd, rs1, rs2

AND का उपयोग मास्किंग के लिए किया जाता है, जो कुछ बिट रखता है और अन्य को साफ़ करता है। जहाँ मास्क में 1 होता है, वहाँ मूल बिट बना रहता है। जहाँ मास्क में 0 होता है, वहाँ परिणाम 0 होता है। किसी मान का मास्क 00001111 के साथ AND करने पर निचले चार बिट बने रहते हैं और बाकी साफ़ हो जाते हैं। मास्किंग किसी ऐसे मान से एक फ़ील्ड निकालती है जिसमें कई फ़ील्ड एक साथ पैक होते हैं।

RISC-V मैनुअल and, or और xor को रजिस्टर-रजिस्टर ऑपरेशनों में सूचीबद्ध करता है। ये सभी स्रोत रजिस्टर rs1 और rs2 को पढ़ते हैं, परिणाम को गंतव्य रजिस्टर rd में लिखते हैं, और बिटवाइज़ लॉजिकल ऑपरेशन करते हैं।

उदाहरण में, 0b1100 (0b उपसर्ग बाइनरी अंकों को दर्शाता है) का AND 0b1010 के साथ किया जाता है। दोनों इनपुट में केवल सबसे बाएँ स्थान पर 1 है, इसलिए परिणाम 0b1000 है, और यह t2 में जाता है।

उदाहरण

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