lui

lui

تجميع RISC-V مرجع

يغطي lyszt.net lui وتعليمات 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

الوصف

يقوم lui بتجميع الثوابت الكبيرة. تشغل تعليمة RISC-V مساحة 32 بت، وتحمل هذه البتات العملية وسجلاتها وأي ثابت. يمكن لتعليمة عادية أن تحمل نحو 12 بت من الثابت، وهو ما يغطي الأعداد الصغيرة لكنه يقصر عن قيمة كاملة من 32 بت. توفّر عدة تعليمات أجزاء الثابت الكبير.

يوفّر lui (load upper immediate) الجزء العلوي. يأخذ ثابتًا من 20 بت ويكتبه في البتات العشرين العلوية من سجل الوجهة، تاركًا البتات الاثنتي عشرة الدنيا صفرًا. يظهر الشكل أدناه.

lui rd, value

يحتاج الثابت الكامل إلى تعليمتين. يضبط lui البتات العشرين العلوية، ويضيف addi البتات الاثنتي عشرة الدنيا. تؤدي التعليمة الزائفة li هذا العمل نيابة عنك، لذا نادرًا ما تكون هناك حاجة إلى lui المكتوبة يدويًا للأعداد العادية.

يذكر دليل RISC-V أن صيغة التجميع لكل من lui وauipc تحذف البتات الاثنتي عشرة الدنيا من الثابت، لأن تلك البتات تكون دائمًا صفرًا. ويذكر أيضًا أن lui متبوعة بـ jalr يمكنها الوصول إلى أي عنوان مطلق من 32 بت: يحمّل lui البتات العشرين العلوية من العنوان الهدف ويضيف jalr البتات الدنيا.

يظهر lui مباشرة عند تحميل عناوين مستديرة بتاتها الدنيا صفر، مثل العناوين الثابتة لأجهزة العتاد، حيث يوفّر lui واحد القيمة كاملة. وقريبه auipc، الذي يبني عنوانًا نسبةً إلى الموقع الحالي.

مثال

lui t0, 0x10     # t0 = 0x10000 (0x10 << 12)