ماذا يعني٪ C في رمز التجميع المضمن في دول مجلس التعاون الخليجي؟

StackOverflow https://stackoverflow.com/questions/1672900

سؤال

أحاول أن أفهم رمز التجميع المضمن الذي يأتي من _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> وأماكن مماثلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top