ori

ori

RISC-V असेंबली संदर्भ

lyszt.net ori और अन्य 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

विवरण

ori एक स्थिरांक के साथ बिटवाइज़ OR करता है। or से इसका संबंध वही है जो andi का and से है। i का अर्थ immediate है, एक निश्चित मान जो निर्देश में एन्कोड किया गया है। ori दो रजिस्टरों को OR करने के बजाय एक रजिस्टर को उस स्थिरांक के साथ OR करता है। OR का नियम नहीं बदलता। परिणाम में एक बिट स्थिति 1 होती है जब वहाँ कोई भी बिट 1 हो, इसलिए स्थिरांक आपके चुने हुए बिट्स को सेट करता है। or पृष्ठ इस ऑपरेशन को कवर करता है।

ori का रूप नीचे दिखाई देता है। यह rs1 में मान को स्थिरांक imm के साथ OR करता है और परिणाम को rd में लिखता है।

ori rd, rs1, imm

OR बिट्स को सेट करता है और बाकी को वैसे ही छोड़ देता है, इसलिए ori विशिष्ट फ़्लैग्स को चालू करता है जब आप जानते हैं कि आपको कौन से चाहिए। अगली पंक्ति t0 में दाएँ से तीसरे बिट को चालू करती है और अन्य सभी बिट्स को अपरिवर्तित छोड़ देती है। 0b उपसर्ग एक बाइनरी स्थिरांक को चिह्नित करता है।

ori t0, t0, 0b100

कॉन्फ़िगरेशन रजिस्टर, अनुमति फ़्लैग्स और स्टेटस शब्द स्वतंत्र on और off बिट्स रखते हैं, और ori बिना किसी मास्क रजिस्टर के एक ही निर्देश में चुने हुए बिट्स को चालू करता है।

RISC-V मैनुअल कहता है कि 12-बिट immediate को ऑपरेशन से पहले 32 बिट्स तक sign-extend किया जाता है। इसलिए एक ऋणात्मक स्थिरांक के सभी उच्च बिट्स सेट होते हैं, और -1 के साथ ori परिणाम के सभी बिट्स को सेट करता है।

स्थिरांक 12 बिट्स तक सीमित है, जैसे andi और addi के साथ। उस सीमा से बाहर के बिट्स को सेट करने के लिए, व्यापक मास्क को li के साथ एक रजिस्टर में लोड करें और or का उपयोग करें।

उदाहरण

li t0, 0
ori t1, t0, 0xf   # t1 = 0xf