Какие инструкции x86 занимают два (или более) операнда памяти? - PullRequest
0 голосов
/ 30 сентября 2018

Я думал, что был ноль.Но, Я вижу здесь,

Инструкции с двумя операндами памяти встречаются крайне редко

Я не могу найти ничего, что объясняет, какие инструкции, хотяредкие, существуют.Какие исключения?

1 Ответ

0 голосов
/ 30 сентября 2018

Я не могу найти ничего, что объясняет редкость.

Инструкция x86 может иметь не более одного ModR / M + SIB + disp0 / 8/32.Таким образом, существует ноль инструкций с двумя явными операндами памяти.

Все инструкции памяти-памяти x86 имеют по крайней мере один неявный операнд памяти, местоположение которого запекается вкод операции, например push, который обращается к стеку, или строковые инструкции movs и cmps.

Какие исключения?

Я буду использовать[mem] для обозначения режима адресации ModR / M, который может быть [rdi], [RIP+whatever], [ebx+eax*4+1234] или любым другим.

  • push [mem]: читает [mem], пишетнеявный [rsp] (после обновления rsp).
  • pop [mem]
  • call [mem]: считывает новый RIP из [mem], помещает адрес возврата в стек.
  • movsb/w/d/q: читает DS:(E)SI, записывает ES:(E)DI (или в 64-битном режиме RSI и RDI).Оба являются неявными;только сегмент DS reg может быть переопределен.Используется с rep.
  • cmpsb/w/d/q: считывает DS:(E)SI и ES:(E)DI (или в 64-битном режиме RSI и RDI).Оба являются неявными;только reg-сегмент DS может быть переопределен.Используется с repe / repne.

  • MPX bndstx mib, bnd: "Сохранить границы в bnd и значение указателя в регистре индекса mib длясвязанная таблица (BTE) с трансляцией адресов с использованием базы MIB. "В разделе «Операция» показаны нагрузка и хранилище, но я не знаю достаточно о MPX, чтобы получить его.

  • movdir64b r16/r32/r64, m512.Имеет свой собственный бит функций, доступный в следующем Tremont (преемник Goldmont Plus Atom).Перемещает 64 байта как прямое хранилище (WC) с атомарностью записи 64 байта из адреса памяти источника в адрес памяти назначения.Операнд-адресат (выровненный атомарный) es: /r из ModRM, источник (не выровненный неатомный) /m из ModRM.

    Использует объединение записи для хранилища, см. Описание.Это первый раз, когда любой поставщик процессоров x86 имеет атомарность шире, чем 8 байтов за пределами lock cmpxchg16b.Но, к сожалению, на самом деле он не очень хорош для многопоточности, потому что он вызывает поведение вытеснения / обхода NT-подобного кэша, поэтому другим ядрам придется читать его из DRAM вместо общего внешнего кэша.

AVX2инструкции по сбору и разбросу AVX512 являются дискуссионными.Очевидно, они выполняют несколько загрузок / сохранений, но все указатели поступают из одного вектора SIMD (и скалярного основания).

Я не считаю такие инструкции, как pusha, fldenv, xsaveopt, iret или enter с уровнем вложенности> 1, которые выполняют несколько операций сохранения или загрузки в непрерывный блок.

Я также не считаю строку ins / outsинструкции, потому что они копируют память в / из пространства ввода / вывода.Пространство ввода / вывода не является памятью.

Я не смотрел инструкции VMX или SGX на http://felixcloutier.com/x86/index.html,, только на основной список.Я не думаю, что я что-то пропустил, но, конечно, мог бы.

...