divu

divu

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

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

विवरण

divu अहस्ताक्षरित विभाजन करता है। एक रजिस्टर के 32 बिट्स की दो तरह से व्याख्या की जा सकती है। हस्ताक्षरित पठन के अंतर्गत, शीर्ष बिट ऋणात्मक संख्या का संकेत देता है, इसलिए बिट्स लगभग -2 अरब से +2 अरब तक के मानों को दर्शाते हैं। अहस्ताक्षरित पठन के अंतर्गत, कोई ऋणात्मक मान नहीं होता और बिट्स 0 से लगभग 4 अरब तक गिनती करते हैं। बिट्स नहीं बदलते। केवल व्याख्या बदलती है।

div अपने इनपुट को हस्ताक्षरित मानता है, जबकि divu उन्हें अहस्ताक्षरित मानता है। परिसर के शीर्ष के निकट दोनों भिन्न परिणाम देते हैं। सभी बिट्स 1 पर सेट एक रजिस्टर div के लिए -1 है और divu के लिए 4,294,967,295 है।

divu उन मानों के लिए उपयुक्त है जो ऋणात्मक नहीं हो सकते: सरणी स्थितियाँ, बाइट्स में आकार, लूप गणनाएँ, पिक्सेल निर्देशांक। एक बार जब इनमें से कोई मान लगभग 2 अरब से अधिक हो जाता है, तो हस्ताक्षरित div गलत परिणाम लौटाता है। शीर्ष बिट चालू हो जाता है, और हस्ताक्षरित पठन मान को ऋणात्मक बना देता है।

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

शून्य से विभाजन सबसे बड़ा अहस्ताक्षरित मान लौटाता है, जिसमें सभी बिट्स सेट होते हैं। यदि भाजक दो की घात है, तो तार्किक दक्षिण विस्थापन (srli) तेज़ी से विभाजित करता है। 3 से दक्षिण विस्थापन एक अहस्ताक्षरित संख्या को 8 से विभाजित करता है।

उदाहरण

li t0, -2
li t1, 2
divu t2, t0, t1   # t2 = 2147483647 (t0 read as unsigned)