1

所以我试图在我的 Objective-C 可执行文件中包含这个程序集:

__asm volatile(
               "pushl %[a5]\n\t"
               "pushl %[a4]\n\t"
               "call %%ebx\n\t"
               "addl  $8, %%esp\n\t"               
               : "=a" (result)
               :  "b" (FuncPtr), "a" (MyVal), "d" (MyVal2), "c" (MyVal3), [a5] "r" (iOut), [a4] "r" (a4)
               : "memory"
               );

如果我使用 GCC 编译器,它编译得很好,但是在使用上述函数返回时,由于 GCC 抛出了一个很好的 ud2a 指令而不是在编译时抛出一个错误(在 gdb 中捕获),所以会抛出一个错误。

如果我使用 Apple LLVM 编译器,它会对我大喊“push %[a4]\n\t”这行错误:“Unknown use of instruction mnemonic without a size suffix”

有谁知道这意味着什么?我完全不知道如何调整上述内容才能正常运行。

注意:这是它试图做的:将 a5、a4 压入堆栈。将 FuncPtr 移至 ebx,将 MyVal 移至 eax,将 MyVal2 移至 edx,将 MyVal3 移至 ecx,然后调用 ebx。

4

0 回答 0