Jakie są rozmiary operandów tword, oword i yword?

Jakie są rozmiary tword, oword i yword operandów, jak w NASM/Instrukcja YASM ? A w związku z tym, czy istnieje jakiś trik lub pomysł na te nazwy? Czy istnieje sposób, w jaki większe rozmiary słów są nadawane logiczne nazwy?

Wiem, że chociaż rozmiary słów mogą się różnić między systemami, NASM word to 2 bajty, {[4] } jest podwójne (4 bajty), qword to Quad word (8 bajtów), ale... czy tword a potrójne słowo (6 bajtów)? Oraz dla oword i Nie mogę nawet wymyślić wiarygodnego znaczenia.

Zauważ, że to prawdopodobnie łatwe pytanie, ale nie mogłem znaleźć odpowiedzi. W podręcznikach NASM i YASM te rozmiary nie są wyjaśnione, nawet w DQ, DT, DY, RESQ, REST, RESY pseudo-instrukcje. Czytałem gdzieś, że MASM używa podobnego systemu, ale na tym też nic nie znalazłem.


Edit: na podstawie odpowiedzi, jest to pełna lista:

  • 1 bajt (8 bit): byte, DB, RESB
  • 2 bajty (16 bit): word, DW, RESW
  • 4 bajty (32 bit): dword, DD, RESD
  • 8 bajtów (64 bit): qword, DQ, RESQ
  • 10 bajtów (80 bitów): tword, DT, REST
  • 16 bajtów (128 bit): oword, DO, RESO, DDQ, RESDQ
  • 32 bajty (256 bit): yword, DY, RESY
  • 64 bajty (512 bit): zword, DZ, RESZ
Author: Daniel Pelsmaeker, 2012-08-22

2 answers

Patrząc na TFS , wygląda to tak:

  • 'oword'/'DO' jest 8 razy większy niż "word" (o dla octoword), synonim dqword ("double-quad"); to będzie 128 bitów, co odpowiada wielkości rejestru wektorowego SSE.
  • 'tword'/'DT' to 80 bitów (T dla t en bajtów), Pełny rozmiar rejestru zmiennoprzecinkowego Intel x87.
  • 'yword' / ' DY ' ma 256 bitów, a y jest prawdopodobnie mnemoniczne dla nazw YMM 256-bitowych rejestrów wektorowych w Rozszerzenia Intel AVX.
  • 'zword'/'DZ' to 512 bitów, Z dla nazw ZMM 512-bitowych rejestrów wektorowych w rozszerzeniach Intel AVX-512.

Więc nie do końca logiczna konwencja nazewnictwa.

 11
Author: Russell Borogove,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 17:35:04

Sprawdziłem to za pomocą dwóch podejść do NASM: kodu źródłowego i empirycznego.

Kod źródłowy

Źródło: http://repo.or.cz/w/nasm.git

Potem:

git grep -C2 tword

A my spadamy na :

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 "???";
}

Empiryczne

git log -p i git tag --contains powiedz mi, że zword zostało dodane w 2.11, a ponieważ jestem na 2.10 i leniwy, pominę to.

W naszym .asm pliku:

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

Następnie skompiluj oraz:

objdump -D -j .bss main.o

Daje:

00000000 <resb1>:
    ...

00000001 <resw1>:
    ...

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

00000007 <resq1>:
    ...

0000000f <rest1>:
    ...

00000019 <reso1>:
    ...

00000029 <resy1>:
    ...

00000049 <resb2>:
    ...

Jeśli weźmiemy różnice między poszczególnymi pozycjami, dojdziemy do tego samego wniosku, co wcześniej.

Zword menemonic

Dla ZMM rejestrów dodanych przez AVX-512: https://en.wikipedia.org/wiki/AVX-512

Ciekawe, co zrobi Intel, gdy litery alfabetu się skończą.
 5
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-26 13:41:05