[英]How to call C inline assembly asm in cython?
如何在cython中调用C语言的内联汇编函数asm()
? 我尝试了一个简单的asm("mov $eax, 0x1") or __asm__()
。 它在asm
调用之前很好地处理,然后给我以下错误:
NameError: 名称 'asm' 未定义
我将我的代码编译为python setup.py build_ext --inplace && python runids.py
无法直接从 Cython 调用汇编程序。 你能做的最好的事情是将asm
包装在一个 C 函数中并从 Cython 调用它 - 例如使用像这样的逐字 C 代码(这里是 gcc):
%%cython
cdef extern from *:
"""
void inline_asm_fun(void){
__asm__("mov $1, %%eax" ::: "eax");
}
"""
void inline_asm_fun()
def use_inline_asm():
inline_asm_fun()
正如@PeterCordes 指出的那样,要在内联汇编程序中做一些有用的事情,应该使用扩展 asm ,即__asm__("mov $1, %%eax" ::: "eax")
而不是简单__asm__("mov $1, %eax")
安全的__asm__("mov $1, %eax")
。 后者会修改%eax
而不通知编译器。
对于 MVSC,内联汇编器的非标准扩展是__asm
但它仅支持 x86 而不是 x64。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.