8086 памяти в память инструкции. Для чего они существуют? - PullRequest
2 голосов
/ 08 апреля 2019

Насколько мне известно, инструкция 8086 имеет 3 типа набора команд для перемещения данных:

  1. память для регистрации
  2. регистрация в памяти
  3. регистрациядля регистрации

Однако вчера я обнаружил некоторый набор команд, такой как movsb и outsb ,
При использовании этих инструкций памятьв память (M2M) операция была возможна!

В настоящее время мне любопытно, почему существуют инструкции M2M.
Я обнаружил, что есть много ограничений их использования.

  • Эти инструкции потребляют много циклов ЦП,
  • Эти инструкции требуют использования регистра сегмента в качестве операнда.

И этиОперации M2M также выполняются с сочетанием выше 1,2,3 типов инструкций.

Вопрос:
Мне трудно согласиться с существованием этих инструкций M2M.
Они существуют только для создания более коротких кодов сборки?

1 Ответ

3 голосов
/ 08 апреля 2019

Инструкции movs* и cmps* весьма удобны, поскольку позволяют выполнять такие распространенные задачи, как копирование данных и сравнение данных.

ins* и outs* по своей природе аналогичны movs*, они просто перемещают данные между памятью и устройствами ввода-вывода. Они особенно полезны для чтения / записи на диск в полных секторах (обычно 512 байт). Конечно, DMA стирают их, поскольку ввод-вывод на основе DMA еще более эффективен, но в те времена они были не так распространены, как сегодня.

Имитация этих инструкций (особенно их повторяющихся форм (посмотрите префикс rep)) потребовала бы больше кода и была бы медленнее. Отсюда и их существование.

Кстати, инструкция xchg и любая другая инструкция чтения-изменения-записи (например, add) с адресатом в памяти также фактически являются командами память-в-память. Не все процессоры имеют их, многие в основном предлагают инструкции, которые либо читают из памяти, либо записывают в память, но не оба (исключение составляют инструкции, которые используются для реализации монопольного / атомарного доступа к памяти, подумайте xchg, xadd, cmpxchg8/16). Процессоры с такими наборами команд относятся к так называемым архитектурам хранилища нагрузки.

Кроме того, инструкции push и pop могут иметь явный операнд для обозначения места в памяти. Это еще одна форма инструкций памяти в память.

Что касается сегментов, то почти все инструкции, которые читают или записывают память, включают сегменты (некоторые системные инструкции работают по-разному), поэтому управление сегментами и служебные данные не следует избегать, если вы решили не использовать упомянутые вами инструкции. и вместо этого выберите другие инструкции.

...