logo

Главная Система команд x86 Базовая система команд CPU INSB

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

INSB

Ввод байта из порта в строку

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

                 

Код

Команда

Описание

Проц.

Пример

6C

INS m8,DX

Загрузить байт из порта в/в DX в память по адресу ES:(E)DI

Intel286

insb

6D

INS m16,DX

Загрузить слово из порта в/в DX в память по адресу ES:(E)DI

Intel286

insw

6D

INS m32,DX

Загрузить двойное слово из порта в/в DX в память по адресу ES:(E)DI

Intel386

insd

6C

INSB

Загрузить байт из порта в/в DX в память по адресу ES:(E)DI

Intel286

insb

6D

INSW

Загрузить слово из порта в/в DX в память по адресу ES:(E)DI

Intel286

insw

6D

INSD

Загрузить двойное слово из порта в/в DX в память по адресу ES:(E)DI

Intel386

insd

Описание:

Команда INS пересылает данные из порта, заданного значением в регистре DX, в байт, слово или двойное слово в памяти по адресу ES:(E)DI. В качестве сегментного регистра всегда используется ES, он не может быть переопределен префиксами замещения сегмента. Индексный регистр-назначение (dest-index) — это регистр DI, если атрибут размера адреса команды равен 16 бит, или регистр EDI, если атрибут размера адреса равен 32 бита.

Команда INS не позволяет указывать номер порта в качестве непосредственного значения. Порт должен адресоваться через значение регистра DX.

После завершения пересылки данных регистр DI или EDI автоматически изменяется. Если флаг DF равен нулю (была выполнена команда CLD), то регистр DI или EDI увеличивается, если флаг DF равен единице (была выполнена команда STD), то регистр DI или EDI уменьшается. Регистр (E)DI уменьшается или увеличивается на 1, если был введен байт, на 2 — если слово, на 4 — если двойное слово.

Мнемоники INSB, INSW, INSD — синонимы мнемоники INS m,DX для байта, слова или двойного слова, соответственно. Команде INS может предшествовать префикс REP для ввода блока из (E)CX байт или слов. Обратитесь к описанию REP для подробного рассмотрения такой операции.

Операция:

IF AdressSize = 16

   THEN Использовать DI для dest-index;

   ELSE (* AdressSize = 32 *)

      Использовать EDI для dest-index;

FI;

IF (CR0.PE = 1) AND ( (EFLAGS.VM = 1) OR (CPL > EFLAGS.IOPL) )

   THEN (* Виртуальный-8086 режим, или защищенный режим с CPL > EFLAGS.IOPL *)

      IF NOT I-O-Permission (SRC, width(SRC))

         THEN #GP(0);

      FI;

FI;

IF (Команда пересылки байта)

   THEN

      ES:[dest-index] = [DX]; (* Чтение байта по DX из адресного пространства ввода/вывода *)

      IF DF = 0 THEN IncDec = 1 ELSE IncDec = -1; FI;

   ELSE

      IF OperandSize = 16

         THEN

            ES:[dest-index] = [DX]; (* Чтение слова по DX из адресного пространства ввода/вывода *)

            IF DF = 0 THEN IncDec = 2 ELSE IncDec = -2; FI;

         ELSE (* OperandSize = 32 *)

            ES:[dest-index] = [DX]; (* Чтение двойного слова по DX из адресного пространства ввода/вывода *)

            IF DF = 0 THEN IncDec = 4 ELSE IncDec = -4; FI;

      FI;

FI;

dest-index = dest-index + IncDec;

Особые ситуации защищенного режима:

#GP(0), если значение текущего уровня привилегий CPL больше (имеет меньше привилегий), чем уровень привилегий ввода/вывода IOPL, и любой из соответствующих битов разрешения ввода/вывода в TSS равен 1.
#GP(0), если операнд-назначение находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегменте ES или нулевой селектор.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда-назначения находится вне пространства эффективных адресов в сегменте ES.

Особые ситуации режима V86:

#GP(0), если любой из соответствующих битов разрешения ввода/вывода в TSS равен 1.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники