Question

J'ai un code comme ceci:

.bss
woof: .long 0

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

maintenant, je voudrais passer l'adresse de Woof dans eax. Quel est le code syntaxe intel ici pour le faire? La même chose avec le déplacement de l'adresse bleh dans, disons, EBX.

Votre aide est très appréciée!

Était-ce utile?

La solution

La section bss ne peut pas avoir des objets réels en elle. Certains assembleurs peuvent encore vous permettent de passer à la section .bss, mais tout ce que vous pouvez y faire est de dire quelque chose comme: x: . = . + 4.

Dans la plupart des assembleurs ces jours-ci et plus particulièrement dans gnu pour les processeurs Intel, il n'y a plus une directive .bss, de sorte que vous passez temporairement au NFI et de créer le symbole bss d'un seul coup avec quelque chose comme: .comm sym,size,alignment. C'est pourquoi vous obtenez probablement une erreur « directive bss non reconnu » ou quelque chose comme ça.

Et vous pouvez alors obtenir l'adresse soit:

lea woof, %eax

ou

movl $woof, %eax

Mise à jour: aha, syntaxe intel, pas l'architecture 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

Toutes les formes de lea devraient générer le même code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top