auipc
يغطي lyszt.net auipc وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
auipc تعني add upper immediate to PC. وهي تعمل مثل lui، إذ تأخذ ثابتًا من 20 بت كالجزء العلوي من قيمة. يضيف auipc تلك القيمة إلى عدّاد البرنامج، الذي يحمل عنوان التعليمة الجاري تنفيذها حاليًا (انظر صفحة beq). والنتيجة عنوان يُقاس نسبةً إلى موضع هذه التعليمة في الذاكرة.
تحل العناوين النسبية مشكلة حقيقية. فالبرنامج لا يعرف دائمًا أين سيُحمَّل في الذاكرة. والشفرة التي تشير إلى بياناتها بعناوين مطلقة ثابتة تفشل عندما تُحمَّل في مكان آخر. أما الشفرة التي تحسب العناوين نسبةً إلى التعليمة الحالية فتعمل أينما وُضعت. وتسمى هذه الخاصية الاستقلال عن الموضع.
يوفر auipc الجزء الخشن من هذا العنوان، ثم تضيف التعليمة التالية الباقي الدقيق المكوَّن من 12 بت. وتُبنى تعليمة la، التي تحمّل عنوان تسمية، من هذا الزوج، وكذلك الاستدعاءات إلى الدوال البعيدة.
يقول دليل RISC-V إنه يمكن الحصول على pc الحالي بضبط ثابت auipc على 0. ويمكن لـ auipc متبوعة بـ jalr نقل التحكم إلى أي عنوان نسبي إلى pc من 32 بت، كما يمكن لـ auipc متبوعة بتحميل أو تخزين بإزاحة من 12 بت الوصول إلى أي عنوان بيانات نسبي إلى pc من 32 بت.
توجد la وcall كي لا تضطر إلى كتابة auipc يدويًا، وهي تظهر كثيرًا في تتبع المحاكي وفي الشفرة المفككة. وكون auipc متبوعة بتعليمة ذات إزاحة صغيرة، لتشكلا معًا عنوانًا واحدًا، نمط مفيد ينبغي التعرف عليه.
مثال
auipc t0, 1 # t0 = pc + 0x1000
