Quelle est la taille des opérandes tword, oword et yword?

Quelles sont les tailles de tword,oword et yword opérandes, utilisé dans l' NASM/ manuel YASM? Et sur une note connexe, il existe une astuce ou une idée sous-jacente à ces noms? Y a-t-il un moyen de donner des noms logiques aux mots de plus grande taille?

je sais que même si la taille des mots peut différer d'un système à l'autre, un NASM word est de 2 octets, dword est le double (4 octets), qword est un quad mot (8 octets), mais... tword triple mot (6 octets)? Et pour oword et yword Je n'arrive même pas à trouver un sens plausible.

notez que c'est probablement une question facile, mais je n'ai pas trouvé de réponse. Dans les manuels NASM et YASM ces tailles ne sont pas expliquées, pas même à la DQ,DT,DY,RESQ,REST,RESY pseudo-instructions. J'ai lu quelque part que MASM utilise un système similaire, mais je n'ai rien trouvé là-dessus non plus.


modifier: basé sur les réponses, c'est la liste complète:

  • 1 octet (8 bit):byte,DB,RESB
  • 2 octets (16 bits): word,DW,RESW
  • 4 octets (32 bits): dword,DD,RESD
  • 8 octets (64 bits): qword,DQ,RESQ
  • 10 octets (80 bits): tword,DT,REST
  • 16 octets (128 bits): oword,DO,RESO,DDQ,RESDQ
  • 32 octets (256 bits): yword, DY,RESY
  • 64 octets (512 bits): zword,DZ,RESZ
19
demandé sur Daniel Pelsmaeker 2012-08-22 02:14:51

2 réponses

en regardant TFS, ça ressemble:

  • 'oword'/'NE' est 8 fois plus grand que le "mot" (O o ctoword), synonyme de dqword ("double-quad"); qui serait de 128 bits, correspondant à la taille d'un registre de vecteur SSE.
  • 'tword'/'DT' est de 80 bits (T ten bytes), la taille d'un registre à virgule flottante Intel x87.
  • 'yword'/'DY' est 256 bits, et le Y est probablement mnémonique pour les noms de YMM de le vecteur de 256 bits est enregistré dans les extensions Intel AVX.
  • 'zword'/'DZ' est de 512 bits, Z pour les ZMM noms de 512 vecteur de bits dans les registres du processeur Intel AVX-512 extensions.

donc, ce n'est pas vraiment une convention de nommage logique.

11
répondu Russell Borogove 2015-07-28 17:35:04

j'ai vérifié avec deux approches pour le NASM: le code source et empirique.

code Source

Source:http://repo.or.cz/w/nasm.git

Puis:

git grep -C2 tword

Et nous tomber sur:

switch (size) {
case 1:
    return "byte";
case 2:
    return "word";
case 4:
    return "dword";
case 8:
    return "qword";
case 10:
    return "tword";
case 16:
    return "oword";
case 32:
    return "yword";
case 64:
    return "zword";
default:
    return "???";
}

empirique

git log -p et git tag --contains dis-moi que zword a été ajouté en 2.11, et puisque je suis sur 2.10 et paresseux, je vais omettre que un.

Sur notre .asm fichier:

section .bss
resb1 resb 1
resw1 resw 1
resq1 resq 1
rest1 rest 1
reso1 reso 1
resy1 resy 1
; Just to read the objdump better.
resb2 resb 1

puis compiler et:

objdump -D -j .bss main.o

donne:

00000000 <resb1>:
    ...

00000001 <resw1>:
    ...

00000003 <resd1>:
3:  00 00                   add    %al,(%eax)
    ...

00000007 <resq1>:
    ...

0000000f <rest1>:
    ...

00000019 <reso1>:
    ...

00000029 <resy1>:
    ...

00000049 <resb2>:
    ...

si on prend les différences entre chaque position, on arrive à la même conclusion qu'avant.

zword menemonic

pour le ZMM registres ajouté par AVX-512: https://en.wikipedia.org/wiki/AVX-512

je me demande ce que Intel va faire quand les lettres de l' alphabet fin.

5