我只想尝试将myarray[0]
的值加载到eax
:
.text
.data
# define an array of 3 words
array_words: .word 1, 2, 3
.globl main
main:
# assign array_words[0] to eax
mov $0, %edi
lea array_words(,%edi,4), %eax
但是当我运行这个时,我不断遇到段故障。 有人可以指出我在这里做错了吗?
答案 0 :(得分:3)
标签main
似乎位于.data
部分。
如果系统不允许在.data
部分执行代码,则应导致分段错误。
程序代码应位于.text
部分。
答案 1 :(得分:2)
您需要正确终止您的计划,例如在Linux x86_64上调用sys_exit
系统调用:
...
main:
# assign array_words[0] to eax
mov $0, %edi
lea array_words(,%edi,4), %eax
mov $60, %rax # System-call "sys_exit"
mov $0, %rdi # exit code 0
syscall
否则程序继续执行上一条指令后的存储器内容,这很可能在所有情况下都是无效指令(甚至是无效的存储单元)。