c - 如何从另一个汇编文件调用汇编函数?

标签 c ubuntu nasm

实际上,我正在将 NASM 用于我的学术项目。这个想法是为数学运算构建一个静态库。

我已经能够在不同的 asm 文件中构建单独的函数。示例:

  • add_vectorial

    • 有 3 个参数:
      • d,尺寸
      • v1, float 数组
      • v2, float 数组
      • rt,必须包含运算结果的 float 数组
  • 子 vector

    • 有 3 个参数:
      • d,尺寸
      • v1, float 数组
      • v2, float 数组
      • rt,必须包含运算结果的 float 数组

但是我有第三个 asm 文件,它必须调用 2 个函数:add_vectorialsub_vectorial 来进行一些微积分。

我读到我必须使用调用词来调用我的外部函数。但我不知道如何传递参数?

我的代码示例:

extern add_vectorial

global operation:    ;for linux

operation:
            ;Initialize a stack frame
            push    ebp
            mov     ebp, esp
            ;Loading the arguments values
            mov     ebx, [ebp+8]    ; ebx='d'
            mov     ecx, [ebp+12]   ; ecx='v1'
            mov     edx, [ebp+16]   ; edx='v2'
            mov     eax, [ebp+20]   ; eax = rt

            ;Initial the xmm4 registry with zero.
            xorps   xmm4, xmm4
.body:

            ;Here, How can i pass the parameters to my asm external function?
            call   add_vectorial

.done:
            ;Restore the call's stack frame pointer
            leave                   ; mov esp,ebp / pop ebp 
            ret                     ; return from function

最佳答案

感谢大家的支持...终于我找到了解决问题的一个方法...我留下了我的解决方案..

%macro call_fun1  4
pushad             ;I put this
push %4
push %3
push %2
push %1
call sub_vectorial
add  esp, 16   ;4p*4bytes
popad             ;I put this
%endmacro

关于c - 如何从另一个汇编文件调用汇编函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37336297/

相关文章:

linux - nasm 上的 execvp 用法

sql-server-2008 - Laravel 4 到 Microsoft SQL 服务器远程

linux - 如何从源代码构建完整的 Wine (32位和64位)?

c++ - 使用 system() 从 C 程序调用 NASM 会生成不同的目标代码,然后使用 Bash 调用

c - 为什么 7%-5 给出 2 而 -7%5 给出 -2?在这两种情况下都不应该是 -2 吗?

c - 此 C 代码应该会失败,但它可以工作。这是为什么?

c - 如何理解glibc交叉引用?

从 Lua 调用 C 函数

docker - 如何解决 docker-compose 中的 "driver failed programming external connectivity"?

来自 NASM 代码的 Linux64 线程本地存储 (TLS) 数据