andi

andi

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

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

विवरण

andi एक स्थिरांक के साथ बिटवाइज़ AND करता है। and दो रजिस्टर लेता है, लेकिन andi एक रजिस्टर और एक इमीडिएट लेता है, जो निर्देश में एन्कोड किया गया एक निश्चित मान है। i का अर्थ इमीडिएट है। AND का नियम अपरिवर्तित है: परिणाम बिट 1 तभी होता है जब दोनों इनपुट बिट 1 हों, इसलिए स्थिरांक एक मास्क के रूप में कार्य करता है जो कुछ बिट्स को सुरक्षित रखता है और बाकी को साफ़ कर देता है। मास्किंग और बिटवाइज़ ऑपरेशन and पेज पर शामिल हैं।

andi का रूप नीचे दिखाया गया है। यह rs1 में मान का स्थिरांक imm के साथ AND करता है और परिणाम rd में लिखता है।

andi rd, rs1, imm

इसका उपयोग तब करें जब आप पहले से जानते हों कि कौन से बिट रखने हैं। अगली पंक्ति t0 के सबसे निचले 8 बिट रखती है और ऊपरी 24 को साफ़ करती है, एक बड़े मान से एक बाइट निकालती है। 0x उपसर्ग एक हेक्साडेसिमल स्थिरांक को दर्शाता है।

andi t1, t0, 0xff

स्थिरांक 12 बिट में फिट होना चाहिए, इसलिए यह एक चौड़ा मास्क व्यक्त नहीं कर सकता। बड़े मास्क के लिए, इसे li के साथ एक रजिस्टर में लोड करें और and का उपयोग करें।

RISC-V मैनुअल कहता है कि 12-बिट इमीडिएट ऑपरेशन से पहले 32 बिट तक साइन-एक्सटेंड किया जाता है, इसलिए एक ऋणात्मक स्थिरांक के सभी ऊपरी बिट सेट होते हैं। andi, ori और xori रजिस्टर rs1 और उस एक्सटेंडेड मान पर बिटवाइज़ ऑपरेशन करते हैं और परिणाम rd में रखते हैं।

दो सामान्य उपयोग निम्नलिखित हैं। नीचे की पहली पंक्ति केवल सबसे निचला बिट रखती है, जो विषम संख्याओं के लिए 1 और सम संख्याओं के लिए 0 होता है। दूसरी पंक्ति 8 से भाग देने के बाद शेषफल देती है, क्योंकि दो की घात से अहस्ताक्षरित शेषफल सबसे निचले बिट होते हैं।

andi t1, t0, 1
andi t1, t0, 7

उदाहरण

andi t1, t0, 0xff   # keep only the low byte