簡體   English   中英

如何在 cython 中調用 C 內聯匯編匯編?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM