-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||6C INS r/m8,DX 17,pm=10*/ Ввод байта из порта DX в || 32**,vm=30 ES:(E)DI ||6D INS r/m16,DX 17,pm=10*/ Ввод слова из порта DX в || 32**,vm=30 ES:(E)DI ||6D INS r/m32,DX 17,pm=10*/ Ввод двойного слова из || 32**,vm=30 порта DX в ES:(E)DI ||6C INSB 17,pm=10*/ Ввод байта из порта DX в || 32**,vm=30 ES:(E)DI ||6D INSW 17,pm=10*/ Ввод слова из порта DX в || 32**,vm=30 ES:(E)DI ||6D INSD 17,pm=10*/ Ввод двойного слова из порта|| 32**,vm=30 DX в ES:(E)DI |----------------------------------------------------------------- Примечания: * если CPL <= IOPL ** если CPL >= IOPL Работа команды IF AddressSize = 16THEN использование DI для индексации назначения;ELSE (* AddressSize = 32 *) использование EDI для индексации назначения;FI;IF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))THEN (* Виртуальный режим 8086 или защищенный режим при CPL > IOPL *) IF NOT I-O-Permission(SRC, width(SRC)) THEN #GP(0); FI;FI;IF команда байтового типаTHEN ES:[индекс-назначения] <- [DX]; (* Чтение байта из адресного пространства ввода/вывода согласно DX *) IF DF = 0 THEN IncDec <- 1 ELSE IncDec <- -1; FI;FI;IF AddressSize = 16THEN ES:[индекс-назначения] <- [DX]; (* Чтение слова из адресного пространства ввода/вывода согласно DX *) IF DF = 0 THEN IncDec <- 2 ELSE IncDec <- -2; FI;FI;IF AddressSize = 32THEN ES:[индекс-назначения] <- [DX]; (* Чтение двойного слова из адресного пространства ввода/вывода согласно DX *) IF DF = 0 THEN IncDec <- 4 ELSE IncDec <- -4; FI;FI;индекс-назначения <- индекс-назначения + IncDec; ОписаниеКоманда INS пересылает данные из заданного регистром DX порта ввода в байтпамяти или слово памяти по адресу ES:индекс-назначения. Операнд памятидолжен адресоваться регистром ES; переопределение сегмента невозможно.Регистр назначения - это регистр DI, если атрибут размера адреса командыравен 16 битам, или регистр EDI, если атрибут размера адреса равен 32бита.Команда INS не позволяет задавать номер порта непосредственным значением.Порт должен адресоваться значением в регистре DX. Перед выполнениемкоманды INS в DX должно быть загружено правильное значение.Адрес назначения определяется содержимым регистра индекса назначения.Перед выполнением команды INS в регистр индекса назначения должно бытьзагружено правильное значение.После выполнения пересылки регистр DI или EDI автоматически получаетсоответствующее приращение. Если флаг DF равен 0 (была выполнена командаCLD), то происходит инкремент регистров DI или EDI; Если флаг DF равен 1(была выполнена команда STD), то происходит декремент регистров DI илиEDI. Инкремент или декремент регистров равен 1 при вводе байта, 2 привводе слова и 4 при вводе двойного слова.Команды INSB, INSW и INSD - это синонимы команды INS, работающие с байтом,словом и двойным словом, соответственно. Команде INS может предшествоватьпрефикс REP для ввода блока, равного CX байтов или слов. Эта операцияописана для команды REP. Изменяемые флагиОтсутствуют Исключения защищенного режима#GP(0), если текущий уровень привилегированности численно больше уровняпривилегированности ввода/вывода (IOPL) или если любой из соответствующихбитов разрешения ввода/вывода в TSS равен 1. #GP (0), если результатдолжен помещаться в сегмент, для которого запрещена запись; #GP(0) вслучае недопустимого исполнительного адреса операнда памяти в сегментахCS, DS, ES, FS или GS; #SS(0) в случае недопустимого адреса в сегменте SS;#PF(код сбоя) в случае страничного сбоя; #AC для невыравненной ссылки кпамяти при текущем уровне привилегированности, равном 3. Исключения режима реальных адресовПрерывание 13, если какая-либо часть операнда лежит вне пространстваисполнительных адресов от 0 до 0FFFFH. Исключения виртуального режима 8086Сбой #GP(0), если любой из соответствующих битов разрешения ввода/вывода вTSS равен 1. #PF (код сбоя) для страничных сбоев; #AC для невыравненнойссылки к памяти при текущем уровне привилегированности, равном 3.