【发布时间】:2015-11-12 12:24:21
【问题描述】:
我有一个数组,我正在将该数组的基地址加载到 %esi 寄存器中。我可以像这样访问数组中的第一个元素:pushl 0(%esi),第二个像这样:pushl 4(%esi),依此类推。但是,如果我将 (%esi) 之前的数字替换为 .data 部分中的变量,则会出现分段错误:
.data
array: .long 1,2,3,4,5
k: .long 4
out: .string "out: %d\n"
.globl main
main:
#load array-baseaddress into %esi
leal array, %esi
# Will print 1
pushl 0(%esi)
pushl $out
call printf
# Will print 2
pushl 4(%esi)
pushl $out
call printf
# Will result in segmentation fault
pushl k(%esi)
pushl $out
call printf
call exit
有人可以向我解释为什么这不起作用以及是否可以以这种方式访问数组的元素?
【问题讨论】:
-
你是否真的在任何地方初始化了
esi? -
对不起。我很着急,忘记添加行了。现在已经更正了!
标签: assembly x86 gnu-assembler att