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