ASM x86 - 将值移动到内存中

时间:2015-10-19 08:53:57

标签: memory assembly att

我使用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中。

1 个答案:

答案 0 :(得分:0)

  

有人可以向我解释如何以正确的方式使用mov吗?

不是mov。没关系。您需要指定一个部分来放入数据。在程序的前面添加.data,将其放入.data部分。另外,默认情况下,数据会被放入.text部分,这在现代操作系统上是只读的。写入它会导致分段错误。

  

我还想知道它是否可以将str地址存储到p中   编译时间。

有可能:

p: .long str