Assembly 解引用寄存器地址上的汇编程序分段错误

Assembly 解引用寄存器地址上的汇编程序分段错误,assembly,segmentation-fault,dereference,Assembly,Segmentation Fault,Dereference,我对x86汇编(AT&T)有问题 因为我需要在汇编程序中实现数组查找,所以我在寄存器%ebx中有数组的第一项(比如arr[0]),为了指向arr[1],例如,我写了: mov -4(%ebx), %eax 问题是,当我试图获取ebx的地址时,出现了一个分段错误,这非常奇怪,因为我可以毫无问题地获取ebx的值(arr[0])。。 有什么建议吗 编辑: 好的,我想我理解这个错误了。 当我声明数组时,我必须将第一个元素的地址放在变量arr上: mov -4(%ecx), %eax 但是根据这个指令

我对x86汇编(AT&T)有问题

因为我需要在汇编程序中实现数组查找,所以我在寄存器%ebx中有数组的第一项(比如arr[0]),为了指向arr[1],例如,我写了:

mov -4(%ebx), %eax
问题是,当我试图获取ebx的地址时,出现了一个分段错误,这非常奇怪,因为我可以毫无问题地获取ebx的值(arr[0])。。 有什么建议吗

编辑: 好的,我想我理解这个错误了。 当我声明数组时,我必须将第一个元素的地址放在变量arr上:

mov -4(%ecx), %eax
但是根据这个指令,我把值放在了地址上。
那么我该如何填写地址呢?

arr[1]
实际上不太可能位于
-4[%ebx]
,它更可能位于
+4

但根据你的问题,我不确定你是否理解。只有当
%ebx
是数组中第一个元素的地址时,这才有效。您的文本似乎表明您已将
arr[0]
的值加载到
ebx
中,在这种情况下,无法从中获取其他元素


您可能需要发布更多的代码,这样我们就可以看到您实际上在尝试做什么。对于编程问题,代码通常胜过描述性文本:-)

您能显示周围的代码吗?我想你对寄存器的工作原理有些误解。