Par exemple, 0.5f est 0x3F000000 dans la plate-forme cible. Je veux utiliser quelque chose comme movl $ 0.5,% eax au lieu de movl $ 0x3F000000,% eax. L'assembleur est de TDM-GCC. Merci.Comment émettre un opérande immédiat à virgule flottante en utilisant la représentation décimale dans l'assembleur gnu
2
A
Répondre
2
Vous devez déclarer une constante séparée avec soit .float
, .single
or .double
directives
Par exemple
.data
half: .float 0.50
.text
.globl _start
_start:
movl half, %eax
https://en.wikibooks.org/wiki/X86_Assembly/AVX,_AVX2,_FMA3,_FMA4
Vous pouvez également utiliser des contraintes E/F/G/H inline assembly
static const float half = 0.5f;
__asm__ __volatile__ ("\n\
movl %1, %eax %1"
: "g" (half)
) ;
Est-ce que le premier insert réellement un * immédiat * ou il charge une valeur de la section '.data'? –
il charge une valeur de la mémoire. Je n'ai pas trouvé un moyen d'insérer un immédiat encore –