sra

sra

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

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

विवरण

sra दूसरा राइट शिफ्ट है, srl के बगल में। नाम का अर्थ है शिफ्ट राइट अर्थमेटिक। नीचे दिया गया रूप rs1 को rs2 में रखी मात्रा के अनुसार दाईं ओर शिफ्ट करता है।

sra rd, rs1, rs2

किसी भी राइट शिफ्ट की तरह, यह बिट्स को निचले सिरे की ओर ले जाता है और गिरने वाले बिट्स को हटा देता है। खाली ऊपरी स्थानों को भरने का इसका तरीका srl से अलग है।

RISC-V एक साइन्ड योजना का उपयोग करता है जिसमें सबसे ऊपरी बिट चिह्न को दर्शाता है, और वहाँ 1 का अर्थ है कि संख्या ऋणात्मक है। srl ऊपर को 0s से भरता है, जो चिह्न-चिह्न को मिटा देता है और एक ऋणात्मक संख्या को एक बड़ी धनात्मक संख्या में बदल देता है। sra ऊपर को मौजूदा साइन बिट की प्रतियों से भरता है, इसलिए ऋणात्मक संख्या के लिए भरण 1s होता है और धनात्मक संख्या के लिए 0s। संख्या अपना चिह्न बनाए रखती है।

sra एक साइन्ड संख्या को दो की घात से विभाजित करता है। 1 का शिफ्ट उसे आधा कर देता है, 3 का शिफ्ट उसे 8 से विभाजित करता है, और ऋणात्मक संख्याएँ ऋणात्मक रहती हैं। परिणाम नीचे की ओर, अधिक ऋणात्मक मान की ओर राउंड होता है, इसलिए -7 को 1 से दाईं ओर शिफ्ट करने पर -4 मिलता है जबकि div निर्देश -3 देता है। ग्राफ़िक्स और ऑडियो कोड आमतौर पर नीचे की ओर राउंडिंग स्वीकार करते हैं।

RISC-V मैनुअल शिफ्ट मात्रा को रजिस्टर rs2 के निचले 5 बिट्स में रखता है। पाँच बिट्स 0 से 31 स्थानों तक कवर करते हैं, इसलिए rs2 के अन्य बिट्स का कोई प्रभाव नहीं पड़ता। मैनुअल sra को एक अर्थमेटिक राइट शिफ्ट के रूप में वर्णित करता है, जो मूल साइन बिट को खाली हुए ऊपरी बिट्स में कॉपी करता है।

साइन्ड संख्याओं के लिए sra और कच्चे बिट पैटर्न या कभी ऋणात्मक न होने वाली संख्याओं के लिए srl का उपयोग करें। एक निश्चित मात्रा के लिए, स्थिर रूप srai का उपयोग करें।

उदाहरण

li t0, -8
li t1, 1
sra t2, t0, t1   # t2 = -4 (sign-filled)