Каковы размеры операндов tword, oword и yword? - программирование
Подтвердить что ты не робот

Каковы размеры операндов tword, oword и yword?

Каковы размеры операндов tword, oword и yword, которые используются в NASM/Руководство YASM? И по соответствующей заметке, есть ли трюк или основная идея этих имен? Есть ли способ, которым большие размерные слова задают логические имена?

Я знаю, что, хотя размеры слов могут различаться между системами, NASM word составляет 2 байта, dword - это двойное значение (4 байта), qword - квадратное слово (8 байтов), но... tword тройное слово (6 байтов)? А для oword и yword я даже не думаю о правдоподобном значении.

Обратите внимание, что это, вероятно, простой вопрос, но я не мог найти ответ. В руководствах NASM и YASM эти размеры не объясняются даже в псевдо-инструкциях DQ, DT, DY, RESQ, REST, RESY. Я где-то читал, что MASM использует подобную систему, но ничего не мог найти.


Изменить: на основе ответов это полный список:

  • 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
4b9b3361

Ответ 1

Глядя на TFS, это выглядит так:

  • 'oword'/'DO' в 8 раз больше слова "word" (O означает " o ctoword"), синонимично с dqword ("double-quad"); это будет 128 битов, что соответствует размеру векторного регистра SSE.
  • 'tword'/'DT' - это 80 бит (T для " t en bytes"), полный размер регистра Intel x87 с плавающей запятой.
  • 'yword'/'DY' - 256 бит, и Y, по-видимому, является мнемоническим для имен YMM 256-битных векторных регистров в расширениях Intel AVX.
  • 'zword'/'DZ' составляет 512 бит, Z для имен ZMM 512-битных векторных регистров в расширениях Intel AVX-512.

Таким образом, это не совсем логическое соглашение об именах; "это только выросло".

Ответ 2

Я проверил его с двумя подходами к 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 и ленивый, я опускаю этот.

В нашем .asm файле:

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, когда буквы алфавита заканчиваются.