0
访问数组元素时予选自C调用这样:分段故障在大会
calculate(&data[index + v], &data[i + v], &data[j + v], norm_1, norm_2, ps, remaining);
在装配实现的功能,这是组件功能:
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。
不足以去一个。你是在编译x86(32位)还是x86-64(64位)。您在哪些操作系统上运行代码(Windows/Linux/OSX/etc)?如果你给出了一个[最小完整可验证示例](http://stackoverflow.com/help/mcve) –
@lurker:第一个arg具有最低地址(返回地址之上的最小距离),所以'[ebp +8]'是32位调用约定中的第一个参数,它传递堆栈中的所有参数。 (@ Guiseppe:这是不能保证的,请参阅[x86 tag wiki](http://stackoverflow.com/tags/x86/info)中的ABI /调用约定信息。感谢您准确显示哪些指令错误,这对于asm调试,但是你没有说你正在使用哪个平台,所以我们不知道C编译器是如何通过参数的。 –
@PeterCordes啊好的,谢谢你指出。 – lurker