我在堆栈上工作时遇到了问题。
比方说,我在堆栈中,我已经使用了movl%esp,%ebp
如果我制作2个本地字大小的变量(subl $ 4,esp),每当我转到movw $ 1,-2(%ebp)时它会触发分段错误。为什么会这样?是否允许立即值直接传递给堆栈变量?
我的代码是:
movw $12, %ax
pushw %ax
call _function
exit:
movl $1, %eax
movl $0, %ebx
int $0x80
_function:
movl %esp, %ebp
subl $4, %esp
movw $2, -2(%ebp)
addl $4, %esp
ret $2
我组装,链接和运行:
as myfile.s -o myfile.o
ld myfile.o
./a.out
我在使用64位系统。