如何在cython中调用C内联汇编asm?
How to call C inline assembly asm in cython?
如何在cython中调用C语言的内联汇编函数asm()
?我尝试了一个简单的asm("mov $eax, 0x1") or __asm__()
。它在 asm
-调用之前很好地进行了 cythonizes,然后给我以下错误:
NameError: name 'asm' is not defined
我将我的代码编译为 python setup.py build_ext --inplace && python runids.py
无法直接从 Cython 调用汇编程序。你能做的最好的事情是将 asm
包装在 C 函数中并从 Cython 调用它 - 例如使用 verbatim C-code 像这样(这里是 gcc):
%%cython
cdef extern from *:
"""
void inline_asm_fun(void){
__asm__("mov , %%eax" ::: "eax");
}
"""
void inline_asm_fun()
def use_inline_asm():
inline_asm_fun()
正如@PeterCordes 指出的那样,要在内联汇编程序中做一些有用的事情,应该使用 extended asm,即 __asm__("mov , %%eax" ::: "eax")
而不是简单且不安全的 __asm__("mov , %eax")
。后者会在不通知编译器的情况下修改 %eax
。
对于 MVSC,内联汇编程序的非标准扩展是 __asm
,但它仅支持 x86,不支持 x64。
如何在cython中调用C语言的内联汇编函数asm()
?我尝试了一个简单的asm("mov $eax, 0x1") or __asm__()
。它在 asm
-调用之前很好地进行了 cythonizes,然后给我以下错误:
NameError: name 'asm' is not defined
我将我的代码编译为 python setup.py build_ext --inplace && python runids.py
无法直接从 Cython 调用汇编程序。你能做的最好的事情是将 asm
包装在 C 函数中并从 Cython 调用它 - 例如使用 verbatim C-code 像这样(这里是 gcc):
%%cython
cdef extern from *:
"""
void inline_asm_fun(void){
__asm__("mov , %%eax" ::: "eax");
}
"""
void inline_asm_fun()
def use_inline_asm():
inline_asm_fun()
正如@PeterCordes 指出的那样,要在内联汇编程序中做一些有用的事情,应该使用 extended asm,即 __asm__("mov , %%eax" ::: "eax")
而不是简单且不安全的 __asm__("mov , %eax")
。后者会在不通知编译器的情况下修改 %eax
。
对于 MVSC,内联汇编程序的非标准扩展是 __asm
,但它仅支持 x86,不支持 x64。