我使用32位Linux系统,我无法理解如何将值放入内存。 这是一个例子:
str: .asciz "AAA"
p: .long 0
.text
.globl main
main:
movl $str, p #Save the address of str into p (?)
我知道我可以movl $str, %eax
将str地址存储在eax寄存器中,但我无法对p
执行相同的操作,因为我收到了分段错误错误。< / p>
我也试过了这个替代方案,但结果始终是分段错误:
main:
call self
self:
pop %ebp
movl $str, (p-self) (%ebp)
有人可以向我解释如何以正确的方式使用mov
吗?
我还想知道它是否可以在编译时将str地址存储到p中。
答案 0 :(得分:0)
有人可以向我解释如何以正确的方式使用mov吗?
不是mov
。没关系。您需要指定一个部分来放入数据。在程序的前面添加.data
,将其放入.data
部分。另外,默认情况下,数据会被放入.text
部分,这在现代操作系统上是只读的。写入它会导致分段错误。
我还想知道它是否可以将str地址存储到p中 编译时间。
有可能:
p: .long str