Pergunta

Eu tenho um código como este:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

agora eu gostaria de mudar o endereço da trama em eax. Qual é o intel sintaxe código aqui para fazer isso? O mesmo acontece com o movimento de endereços do bleh em, digamos, a EBX.

Sua ajuda é muito apreciada!

Foi útil?

Solução

A seção BSS não pode ter objetos reais na mesma. Algumas montadoras ainda pode permitir que você alternar para a seção .bss, mas tudo o que você pode fazer lá é dizer algo como: x: . = . + 4.

Na maioria dos montadores nos dias de hoje e, especificamente, em gnu para a Intel, não há mais uma directiva .bss, para que mudar temporariamente para o BSS e criar o símbolo bss em um tiro com algo como: .comm sym,size,alignment. É por isso que você está presumivelmente recebendo um erro " BSS directiva não reconhecido " ou algo parecido.

E então você pode obter o endereço com:

lea woof, %eax

ou

movl $woof, %eax

Atualização: aha, sintaxe intel, não arquitetura Intel. OK:

.intel_syntax noprefix
    lea    esi,fun
    lea    esi,[fun]
    mov     eax,OFFSET FLAT:fun
.att_syntax
    lea     fun, %eax
    mov     $fun, %eax
.data
fun: .long 0x123

Todas as formas lea deve gerar o mesmo código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top