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