lh

lh

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

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

विवरण

lh मेमोरी से एक हाफवर्ड लोड करता है। एक बाइट 8 बिट का होता है और अपना पता स्वयं धारण करता है, जो इसे सबसे छोटी पता-योग्य इकाई बनाता है। एक वर्ड 4 बाइट, या 32 बिट का होता है, और एक हाफवर्ड उसका आधा है: 2 बाइट, या 16 बिट। lh 16 बिट पढ़ता है जबकि lw 32 पढ़ता है। एड्रेसिंग lw से मेल खाती है: एक बेस रजिस्टर प्लस एक स्थिर ऑफसेट (lw पृष्ठ देखें)। रूप नीचे दिखाया गया है।

lh rd, offset(rs1)

एक रजिस्टर 32 बिट धारण करता है, इसलिए 16-बिट लोड को शेष 16 बिट भरने होते हैं। lh साइन एक्सटेंशन का उपयोग करता है। यह 16-बिट मान के शीर्ष बिट को पढ़ता है, जो एक साइन्ड संख्या के चिह्न को दर्शाता है, और उस बिट को रजिस्टर के सभी 16 ऊपरी बिट में प्रतिलिपित करता है। मान अपना चिह्न बनाए रखता है, इसलिए एक 16-बिट -3, 32-बिट -3 के रूप में आता है।

lh का उपयोग साइन्ड 16-बिट डेटा के लिए करें, जैसे ऑडियो सैंपल या सेंसर रीडिंग जो ऋणात्मक हो सकते हैं। इसका साथी lhu, जिसमें u का अर्थ अनसाइन्ड है, शीर्ष को 0s से भरता है, जो उस डेटा के लिए उपयुक्त है जो कभी ऋणात्मक नहीं होता। बिट पैटर्न 0x8000 जो lh से लोड किया जाता है वह -32768 बन जाता है, और lhu से लोड किए जाने पर यह +32768 बन जाता है। मेमोरी में बिट्स वही रहते हैं, और लोड अर्थ निर्धारित करता है।

RISC-V मैनुअल lh को मेमोरी से 16-बिट मान लोड करने और rd में संग्रहीत करने से पहले इसे 32 बिट तक साइन-एक्सटेंड करने के रूप में परिभाषित करता है। प्रभावी पता रजिस्टर rs1 प्लस साइन-एक्सटेंडेड 12-बिट ऑफसेट है। एक एक्सेस प्राकृतिक रूप से संरेखित होता है जब उसका पता बाइट्स में एक्सेस के आकार से विभाज्य हो, इसलिए एक हाफवर्ड एक्सेस सम पतों पर संरेखित होता है।

हाफवर्ड 2 बाइट के होते हैं, इसलिए उनके एरे ऑफसेट 0, 2, 4 पर स्थित होते हैं, और एक पॉइंटर 2 जोड़कर उनके माध्यम से आगे बढ़ता है।

उदाहरण

.data
val: .half -5
.text
la t0, val
lh t1, 0(t0)   # t1 = -5 (sign-extended)