web-dev-qa-db-fra.com

Combien d'octets RESB, RESW, RESD, RESQ alloue-t-il dans le NASM?

DB alloue 1 octet.

DW alloue 2 octets.

DD alloue 4 octets.

DQ alloue 8 octets.

Je suppose donc que:

RESB 1 alloue 1 octet.

RESW 1 alloue 2 octets.

RESD 1 alloue 4 octets.

RESQ 1 alloue 8 octets.

Ai-je raison?


Le documentation ne dit pas grand-chose:

3.2.2 RESB et ses amis: déclaration de données non initialisées

RESB, RESW, RESD, RESQ, REST, RESO, RESY et RESZ sont conçus pour être utilisés dans la section BSS d'un module: ils déclarent un espace de stockage non initialisé. Chacun prend un opérande unique, qui est le nombre d'octets, de mots, de mots doubles ou quoi que ce soit à réserver. Comme indiqué dans la section 2.2.7, NASM ne prend pas en charge la syntaxe MASM/TASM de réservation d'espace non initialisé en écrivant DW? ou des choses similaires: c'est ce qu'il fait à la place. L'opérande d'une pseudo-instruction de type RESB est une expression critique: voir section 3.8.

Par exemple:

tampon: resb 64; réserver 64 octets

wordvar: resw 1; réserver un mot

realarray resq 10; tableau de dix réels

ymmval: resy 1; un registre YMM

zmmvals: resz 32; 32 registres ZMM

7
user8240761

Ai-je raison?

oui.

Les suffixes de taille sont cohérents dans l'ensemble de NASM, pour d* et res*. Ils correspondent aux suffixes mnémoniques des instructions x86 pour l'octet à qword. (par exemple psubd fonctionne avec des éléments dword compressés).

Il existe même un mnémonique d'instructions qui utilise o (oct-Word): cqo .

les suffixes de taille y et z correspondent évidemment aux tailles de registre ymm et zmm, même si les mnémoniques des instructions sont maintenant des choses comme VBROADCASTI32X8 en raison de la granularité du masquage AVX512.

5
Peter Cordes