srai

srai

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

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

विवरण

srai बिट्स को एक निश्चित मात्रा में दाईं ओर खिसकाता है और खाली हुई शीर्ष स्थितियों में साइन बिट की प्रतिलिपि करता है, जिससे ऋणात्मक संख्याएँ ऋणात्मक बनी रहती हैं। यह sra का स्थिर-मात्रा रूप है, इसीलिए भरण साइन को संरक्षित रखता है। i का अर्थ immediate है, एक स्थिरांक जो निर्देश में एन्कोड किया गया है।

srai का सिंटैक्स नीचे दिखाया गया है, जिसमें amount 0 और 31 के बीच एक स्थिरांक है।

srai rd, rs1, amount

एक स्थान का दायाँ शिफ्ट किसी संख्या को आधा कर देता है और साइन को अपरिवर्तित रखता है, इसलिए srai एक चिह्नित संख्या को दो की घात से विभाजित करता है। अगली पंक्ति एक चिह्नित मान को 8 से विभाजित करती है, धनात्मक और ऋणात्मक दोनों इनपुट के लिए।

srai t0, t0, 3

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

RISC-V मैनुअल स्थिर शिफ्ट को I-type प्रारूप के एक विशेषीकरण के रूप में एन्कोड करता है, जो मानक निर्देश लेआउट में से एक है। शिफ्ट मात्रा immediate फ़ील्ड के निचले 5 बिट्स पर कब्जा करती है, और निर्देश का बिट 30 दो दाएँ शिफ्टों में अंतर करता है। srai एक अंकगणितीय दायाँ शिफ्ट करता है, और मूल साइन बिट खाली हुए ऊपरी बिट्स को भरता है।

चार शिफ्टों में से, srai विभाजित की जा रही चिह्नित संख्याओं को संभालता है और srli कच्चे बिट्स या उन संख्याओं को संभालता है जो कभी ऋणात्मक नहीं होतीं। बिना i वाले रूप, sra और srl, प्रोग्राम चलने के दौरान गणना की गई शिफ्ट दूरी लेते हैं।

उदाहरण

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