2016-11-09 4 views
2

Je suis en train d'écrire une fonction nasm qui sera appelé à partir 32bit ansi C.Nasm: comment charger un long double dans la FPU de la mémoire

Le prototype de fonction en C ressemble à ceci: long double scalar(int n, long double *x) Où x est un pointeur vers un tableau de long doubles.

Le problème se produit lorsque je tente de charger un seul long double à la FPU:

mov ecx, [esp+8] ; n 
    mov eax, [esp+12] ; *x 
    fld [eax] ; ERROR: operation size not specified 

Comment dois-je préciser la taille? Mon compilateur C utilise 12 octets pour un double long, comment l'intégrer dans les 80 bits?

Répondre

3

Pour spécifier la taille utiliser le formulaire explicitement suivant MSNA: Comme vous l'avez

fld TWORD [eax] ; load 10 bytes from [eax] 

sur, registres de pile FPU sont 80 bits. Le compilateur C choisit 12 octets, en raison des exigences d'alignement des données de la trame de la pile.

+0

Dans nasm, le mot clé est 'tword'. –

+0

@JanOsch: Oui, je n'étais pas sûr entre ces deux. Je vous remercie, –