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
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.