访问程序集中的数组元素时出现分段错误



我从C调用,所以:

calculate(&data[index + v], &data[i + v], &data[j + v], norm_1, norm_2, ps, remaining);

一个在Assembly中实现的函数,这就是Assembly函数:

global calculate
current_point_a     equ     8
i_point_a           equ     12
j_point_a           equ     16
norm_1_a            equ     20
norm_2_a            equ     24
ps_a                equ     28
counter             equ     32
calculate:

        push        ebp             
        mov         ebp, esp       
        push        ebx             
        push        esi
        push        edi
;------------------------------------------------------------
        mov         eax,  [ebp+current_point_a]         
        movaps      xmm0, [eax]         ; HERE SEGMENTATION FAULT               
        movaps      xmm1, xmm0

当我试图通过C函数传递的地址访问数组元素时,我出现了分段错误。

问题出在哪里?我需要从内存中取出数组的4个连续元素。我该怎么修?

我在32位体系结构的Linux上使用GCC。

我相信发生这种情况是因为您假设参数是通过堆栈传递的,但这并不总是正确的。不同平台上的不同编译器使用多种调用约定。比如说,System V约定(在Linux上使用)通过寄存器传递一些参数。

很难说在您的情况下应该使用什么,因为它取决于操作系统、编译器和编译标志。如果您使用GCC,您可以通过将-S标志传递给编译器来查看C程序生成的汇编代码,并了解参数是如何传递的。

相关内容

  • 没有找到相关文章

最新更新