Domanda

Ho un codice come questo:

.bss
woof: .long 0

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

Ora vorrei spostare l'indirizzo di Woof in eax. Qual è il intel sintassi il codice qui per fare quello? Lo stesso vale con lo spostamento di indirizzo bleh in, diciamo, EBX.

Il vostro aiuto è molto apprezzato!

È stato utile?

Soluzione

La sezione BSS non può avere oggetti reali in esso. Alcuni assemblatori possono ancora permettono di passare alla sezione .bss, ma tutto si può fare c'è dire qualcosa del tipo: x: . = . + 4.

Nella maggior parte dei assemblatori questi giorni e in particolare in GNU per Intel, non c'è più una direttiva .bss, quindi si passa temporaneamente BSS e creare il simbolo bss in un colpo solo con qualcosa di simile: .comm sym,size,alignment. Questo è il motivo per cui si sta presumibilmente ottenendo un errore " direttiva BSS non riconosciuto " o qualcosa del genere.

E poi si può ottenere l'indirizzo sia con:

lea woof, %eax

o

movl $woof, %eax

Aggiornamento: AHA, la sintassi Intel, non è architettura 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

Tutte le forme lea dovrebbero generare lo stesso codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top