slli

slli

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

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

विवरण

slli बिट्स को एक निश्चित मात्रा में बाईं ओर खिसकाता है। यह संक्रिया sll से मेल खाती है: बिट्स बाईं ओर सरकते हैं, दाईं ओर शून्य भरते हैं, बाईं सीमा से आगे निकलने वाले बिट्स खो जाते हैं, और प्रत्येक स्थान खिसकने पर मान दोगुना हो जाता है (sll पृष्ठ इसकी कार्यविधि समझाता है)। यह निर्देश शिफ्ट दूरी को एक स्थिरांक के रूप में रखता है, इसलिए इसे कोई रजिस्टर प्रदान नहीं करता। i का अर्थ immediate है, जो निर्देश में लिखे गए स्थिरांक के लिए प्रयुक्त शब्द है।

slli का रूप नीचे दिखाया गया है, जहाँ amount 0 से 31 तक की एक निश्चित संख्या है।

slli rd, rs1, amount

अगली पंक्ति t0 को 3 स्थान बाईं ओर खिसकाती है, जो इसे 8 से गुणा करती है।

slli t1, t0, 3

ऐरे इस निर्देश को सामान्य बनाते हैं। एक ऐरे में 32-बिट मान 4 बाइट घेरता है, इसलिए आइटम संख्या i शुरुआत से i गुणा 4 बाइट पर स्थित होती है, और 2 से बाईं शिफ्ट 4 से गुणा करती है। सामान्य पैटर्न इंडेक्स को शिफ्ट करके बाइट ऑफ़सेट बनाता है, ऐरे का प्रारंभिक पता जोड़ता है, फिर मान लोड करता है। इस शिफ्ट, ऐड और लोड अनुक्रम को पहचानना दूसरों द्वारा लिखी गई असेंबली पढ़ते समय सहायक होता है।

RISC-V मैनुअल स्थिरांक द्वारा शिफ्ट को I-type प्रारूप की एक विशेषज्ञता के रूप में एन्कोड करता है, जो मानक निर्देश लेआउट में से एक है। rs1 उस ऑपरेंड को रखता है जिसे शिफ्ट किया जाना है, और immediate फ़ील्ड के निचले 5 बिट्स शिफ्ट मात्रा रखते हैं। slli एक लॉजिकल लेफ्ट शिफ्ट करता है, और निचले बिट्स में शून्य प्रवेश करते हैं।

slli का उपयोग तब करें जब शिफ्ट दूरी कोड लिखते समय ज्ञात हो। sll का उपयोग तब करें जब मात्रा प्रोग्राम चलने के दौरान गणना की जाती हो। उदाहरण 5 को 3 से बाईं ओर शिफ्ट करता है, जो 5 गुणा 8, या 40 देता है।

उदाहरण

li t0, 5
slli t1, t0, 3   # t1 = 5 << 3 = 40  (5 * 8)