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