2015-10-19 78 views
0

我正在使用32位Linux系统,我无法理解如何将值存入内存。 这是一个例子:ASM x86 - 将值移入内存

str: .asciz "AAA" 
p: .long 0 

.text 
.globl main 

main: 
    movl $str, p #Save the address of str into p (?) 

我知道,我能做的movl $str, %eax存储EAX寄存器内的STR地址,但因为我收到分段错误,我不能做p同样的事情。

我也试过这种替代,但结果始终是一个分段错误:

main: 
call self 
self: 
    pop %ebp 
    movl $str, (p-self) (%ebp) 

有人能向我解释如何以正确的方式使用mov? 我也想知道是否可以在编译时将str地址存储到p中。

回答

0

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

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

我也想知道是否有可能将str地址存储在 编译时的p中。

这是可能的:

p: .long str