ماذا يعني٪ C في رمز التجميع المضمن في دول مجلس التعاون الخليجي؟
-
16-09-2019 - |
سؤال
أحاول أن أفهم رمز التجميع المضمن الذي يأتي من _hypercall0
هنا.
asm volatile ("call hypercall_page+%c[offset]" \
: "=r" (__res) \
: [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \
: "memory", "edi", "esi", "edx", "ecx", "ebx", "eax")
أواجه مشكلة في العثور على معلومات حول ما %c
في السطر الأول يعني. لم أجد أي معلومات في الجزء الأكثر وضوحا من دليل دول مجلس التعاون الخليجي, ، وهو ما يفسر %[name]
, ، لكن لا %c[name]
. وبعد هل هناك أي مكان آخر يجب أن أنظر إليه؟
المحلول
من الوثائق الداخلية لدول مجلس التعاون الخليجي:
`٪ C.رقم"يمكن استخدامها لاستبدال المعاملات التي تعد قيمة ثابتة دون بناء الجملة الذي يشير عادة إلى معامل فوري.
نصائح أخرى
تحقق من إخراج التجميع (مع gcc -S
, ، أو ربما تفكيك ملف الكائن) وقد يكون أكثر وضوحا.
تخميني هو أنه يقف ثابت. hypercall_page
يشبه جدول التعليمات التي يقوم بها كل منها SYSCALL. ربما هذا سوف يولد call hypercall_page + {constant based on the expression given}
, ، بعد أن قامت بحساب عنوان هذه الإزاحة في وقت الترجمة.
جانبا، هذا __HYPERVISOR##name
أشياء تذكرني حقا __NR_name_of_syscall
اكتب الاتفاقية التي تراها SYSCALLS في Linuxu003Casm/unistd.h> وأماكن مماثلة.