csrrs
lyszt.net csrrs और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
विवरण
csrrs एक कंट्रोल रजिस्टर को पढ़ता है और उसमें बिट्स सेट करता है। एक कंट्रोल और स्टेटस रजिस्टर, या CSR, प्रोसेसर की स्थिति रखता है जैसे ट्रैप हैंडलर का पता और इंटरप्ट स्विच (देखें csrrw)। यह नाम CSR में बिट्स को परमाणु रूप से पढ़ने और सेट करने का संक्षिप्त रूप है। CSR का पुराना मान rd में जाता है, फिर rs1 में जो भी बिट 1 है वह CSR में 1 पर सेट हो जाता है। rs1 में जो बिट 0 हैं वे अपना मान बनाए रखते हैं।
csrrs rd, csr, rs1
रजिस्टर rs1 एक मास्क की तरह काम करता है, एक पैटर्न जिसके 1 बिट चुनते हैं कि कौन से बिट बदलने हैं। नीचे दी गई पंक्तियाँ mstatus के बिट 3 को सेट करती हैं, जो ग्लोबल इंटरप्ट इनेबल है, और पिछला मान t1 में छोड़ देती हैं।
li t0, 8 csrrs t1, mstatus, t0
8 बाइनरी 1000 है, इसलिए केवल बिट 3 बदलता है। जब rs1 zero होता है, तो CSR पढ़ा जाता है और कभी लिखा नहीं जाता, जो csrr शॉर्टहैंड है। जब rd zero होता है, तो पुराना मान त्याग दिया जाता है, जो csrs शॉर्टहैंड है। इस सिम्युलेटर में CSRs की सूची के लिए csrrw देखें और बिट्स को साफ़ करने के लिए csrrc देखें।
RISC-V मैनुअल कहता है कि rs1=x0 के साथ csrrs CSR को बिल्कुल नहीं लिखता।
उदाहरण
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
