Каковы размеры операндов tword, oword и yword?
каковы размеры tword, oword и yword операнды, используемые в NASM/руководство YASM? И на соответствующей ноте, есть ли трюк или основная идея этих имен? Есть ли способ, с помощью которого большие размеры слов даются логические имена?
я знаю, что, хотя размеры слов могут отличаться между системами, NASM word - это 2 байта, dword вдвое больше (4 байта),qword квада слово (8 байт), но... is tword a тройной слово (6 байт)? И за oword и yword Я даже не могу придумать вразумительный смысл.
обратите внимание, что это, наверное, простой вопрос, но я не мог найти ответ. В руководствах NASM и YASM эти размеры не объясняются, даже в DQ, DT, DY, RESQ, REST, RESY псевдо-инструкции. Я где-то читал, что MASM использует аналогичную систему, но тоже ничего не нашел.
Edit: на основе ответы, это-полный список:
- 1 байт (8 бит):
byte,DB,RESB - 2 байта (16 бит):
word,DW,RESW - 4 байта (32 бит):
dword,DD,RESD - 8 байт (64 бит):
qword,DQ,RESQ - 10 байт (80 бит):
tword,DT,REST - 16 байт (128 бит):
oword,DO,RESO,DDQ,RESDQ - 32 байт (256 бит):
yword,DY,RESY - 64 байта (512 бит):
zword,DZ,RESZ
2 ответов
смотрим TFS, это выглядит так:
- 'oword' / ' DO 'в 8 раз больше, чем" word "(O для octoword), синоним dqword ("double-quad"); это будет 128 бит, соответствующих размеру векторного регистра SSE.
- 'tword'/ ' DT ' - 80 бит (T для tEn байт), полный размер регистра с плавающей запятой Intel x87.
- 'yword' / ' DY ' - 256 бит, и Y предположительно мнемонический для имен YMM из 256-битных векторных регистров в расширениях Intel AVX.
- 'zword' / ' DZ ' - это 512 бит, Z для имен ZMM 512-битных векторных регистров в расширениях Intel AVX-512.
итак, не совсем логическое соглашение об именах.
Я проверил его с помощью двух подходов для NASM: исходного кода и эмпирического.
исходный код
источник:http://repo.or.cz/w/nasm.git
затем:
git grep -C2 tword
и упасть на:
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 "???";
}
эмпирическая
git log -p и git tag --contains скажи мне zword был добавлен в 2.11, и поскольку я на 2.10 и ленив, я пропущу это один.
на :
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
затем скомпилировать и:
objdump -D -j .bss main.o
выдает:
00000000 <resb1>:
...
00000001 <resw1>:
...
00000003 <resd1>:
3: 00 00 add %al,(%eax)
...
00000007 <resq1>:
...
0000000f <rest1>:
...
00000019 <reso1>:
...
00000029 <resy1>:
...
00000049 <resb2>:
...
если мы возьмем различия между каждой позицией, мы придем к тому же выводу, что и раньше.
zword menemonic
на ZMM регистры, добавленные AVX-512:https://en.wikipedia.org/wiki/AVX-512
интересно, что Intel будет делать, когда буквы алфавит конца.