sltiu

sltiu

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

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

विवरण

sltiu slti और sltu को जोड़ता है। यह एक रजिस्टर की तुलना एक स्थिरांक से करता है और दोनों मानों को अहस्ताक्षरित (unsigned) मानता है। नाम अपने भागों को एक साथ रखता है: सेट लेस दैन, इमीडिएट, अनसाइन्ड। नीचे दिया गया रूप rd में 1 लिखता है जब rs1 स्थिरांक imm से कम है, दोनों को गैर-ऋणात्मक संख्याओं के रूप में पढ़ा जाता है, और अन्यथा 0।

sltiu rd, rs1, imm

अहस्ताक्षरित (Unsigned), जैसा कि sltu पृष्ठ पर है, का अर्थ है कि शीर्ष बिट संख्या के एक सामान्य अंक के रूप में गिना जाता है, इसलिए सीमा 0 से लगभग 4 अरब तक चलती है। sltiu उन मानों पर सीमा जाँच को एक ही निर्देश में संभालता है जो ऋणात्मक नहीं हो सकते, जैसे कि यह परीक्षण करना कि कोई इंडेक्स किसी ऐरे के आकार से कम है या नहीं।

नीचे दी गई पंक्ति पूछती है कि क्या मान 1 से कम है।

sltiu rd, rs, 1

शून्य ही एकमात्र अहस्ताक्षरित मान है जो 1 से कम है, इसलिए परिणाम 1 होता है जब rs शून्य हो और अन्यथा 0। यह शून्य के बराबर होने का परीक्षण करता है, और seqz शॉर्टहैंड इसी से बनाया गया है। दो मानों के बीच समानता इससे अनुसरण करती है। दोनों मानों का XOR करें, जो शून्य तभी देता है जब वे मेल खाते हैं, और परिणाम का शून्य के लिए परीक्षण करें।

RISC-V मैनुअल कहता है कि स्थिरांक को पहले 32 बिट्स तक साइन-एक्सटेंड किया जाता है और फिर एक अहस्ताक्षरित संख्या के रूप में माना जाता है। इसलिए एक ऋणात्मक स्थिरांक एक बहुत बड़ा अहस्ताक्षरित मान बन जाता है। मैनुअल स्थिरांक 1 के साथ sltiu को शून्य के लिए परीक्षण करने का तरीका बताता है, जो seqz स्यूडो-इंस्ट्रक्शन है।

जैसा कि slti के साथ है, 12-बिट सीमा से परे के स्थिरांक li के साथ एक रजिस्टर में लोड किए जाते हैं और sltu के साथ तुलना की जाती है।

उदाहरण

li t0, -1
sltiu t1, t0, 5   # t1 = 0 (t0 read as unsigned is huge)