div

div

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

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

विवरण

div एक रजिस्टर को दूसरे से विभाजित करता है। यह स्रोत रजिस्टर rs1 और rs2 को पढ़ता है, पहले को दूसरे से विभाजित करता है, और परिणाम को गंतव्य रजिस्टर rd में लिखता है। नीचे दिया गया रूप का अर्थ है rd = rs1 / rs2।

div rd, rs1, rs2

गुणा की तरह, यह वैकल्पिक गणित निर्देशों के M एक्सटेंशन से संबंधित है, जिसे यह सिम्युलेटर शामिल करता है।

यह पूर्णांक विभाजन है, इसलिए भिन्नात्मक भाग हटा दिया जाता है। 7 को 2 से विभाजित करने पर 3 मिलता है। शेष 1 rem से आता है, जो उन्हीं दो संख्याओं का शेषफल निकालता है। ऋणात्मक परिणाम शून्य की ओर पूर्णांकित होते हैं, इसलिए -7 / 2 का परिणाम -3 होता है।

शून्य से विभाजित करने पर -1 लौटता है, एक रजिस्टर जिसमें हर बिट 1 पर सेट होती है। हार्डवेयर कोई चेतावनी नहीं देता, इसलिए जो कोड शून्य भाजक को त्रुटि मानना चाहता है, वह विभाजन से पहले भाजक की जाँच करता है।

RISC-V मैनुअल विशेष मामलों को निर्दिष्ट करता है। शून्य से विभाजित करने पर एक भागफल मिलता है जिसमें हर बिट सेट होती है, जो div के लिए -1 के रूप में पढ़ा जाता है, और शेषफल भाज्य के बराबर होता है। चिह्नित ओवरफ़्लो केवल तब होता है जब सबसे ऋणात्मक संख्या को -1 से विभाजित किया जाता है। तब भागफल भाज्य के बराबर होता है और शेषफल शून्य होता है। मैनुअल कहता है कि शून्य से विभाजन पर ट्रैप पर विचार किया गया और अस्वीकार कर दिया गया, क्योंकि यह निर्देश सेट में एकमात्र अंकगणितीय ट्रैप होता, और यह कि सभी बिट सेट रहने से विभाजक सर्किट सरल रहता है।

किसी भी विभाजन के लिए जो ओवरफ़्लो नहीं करता, भाज्य, भाजक गुणा भागफल धन शेषफल के बराबर होता है। जब भागफल और शेषफल दोनों की आवश्यकता हो, तो मैनुअल नीचे दी गई दो पंक्तियों की सिफारिश करता है, जिसमें rdq, rs1 और rs2 से भिन्न हो। एक प्रोसेसर तब दोनों को एक ही विभाजन में संयोजित कर सकता है।

div rdq, rs1, rs2
rem rdr, rs1, rs2

विभाजन वह सबसे धीमा अंकगणित है जो एक प्रोसेसर करता है, अक्सर गुणा से कई गुना धीमा। दो की घात (2, 4, 8 इत्यादि) से विभाजित करने पर इसके बजाय दाएँ शिफ्ट का उपयोग किया जा सकता है (srai देखें)। उदाहरण 17 को 5 से विभाजित करता है। 5, 17 में तीन पूरी बार जाता है और 2 शेष बचता है, इसलिए भागफल 3, t2 में जाता है।

उदाहरण

li t0, 17
li t1, 5
div t2, t0, t1   # t2 = 3