Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
OUT
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
E6 ib |
OUT imm8,AL |
Вывести байт из AL в порт в/в по адресу imm8 |
8086 |
out 60h,al |
E7 ib |
OUT imm8,AX |
Вывести слово из AX в порт в/в по адресу imm8 |
8086 |
out 00h,ax |
E7 ib |
OUT imm8,EAX |
Вывести двойное слово из EAX в порт в/в по адресу imm8 |
Intel386 |
out 81h,eax |
EE |
OUT DX,AL |
Вывести байт из AL в порт в/в по адресу в DX |
8086 |
out dx,al |
EF |
OUT DX,AX |
Вывести слово из AX в порт в/в по адресу в DX |
8086 |
out dx,ax |
EF |
OUT DX,EAX |
Вывести двойное слово из EAX в порт в/в по адресу в DX |
Intel386 |
out dx,eax |
Описание:
Команда OUT пересылает байт, слово или двойное слово данных из регистра AL, AX или EAX в порт вывода, заданный первым операндом. Адрес порта может задаваться непосредственным операндом imm8 или содержимым регистра DX. Таким образом, возможно обращение к 256 портам, адреса которых фиксированы в программе (байт imm8), или к 65536 портам, адреса которых могут изменяться путем перезагрузки содержимого регистра DX.
При работе с 16-разрядными данными число адресуемых портов уменьшается вдвое, а их адресация обычно производится четными числами — 0, 2, 4, ... 254 при адресации непосредственным операндом и 0, 2, 4, ... 65534 при адресации через регистр DX. Соответственно, для 32-разрядных данных число портов сокращается еще вдвое, а их адресация производится числами кратными четырем 0, 4, 8, ... 252, ... 65532. Таким образом, номера портов должны быть выровнены по границам передаваемых данных согласно их разрядности (1, 2 или 4 байта). В этом случае пересылка осуществляется за один цикл. Если заданный номер 16- или 32-разрядного порта имеет невыровненное значение, то для передачи данных требуется дополнительный цикл шины.
Операция:
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;
[DEST] = SRC; (* Запись в пространство ввода-вывода *)
Особые ситуации защищенного режима:
#GP(0), если значение текущего уровня привилегий CPL больше по значению уровеня привилегий ввода-вывода IOPL и любой из соответствующих порту битов разрешения ввода-вывода в TSS равен 1.
Особые ситуации режима реальной адресации:
Нет.
Особые ситуации режима V86:
#GP(0), если любой из соответствующих порту битов разрешения ввода-вывода в TSS равен 1.
Замечание:
По окончании выполнения команды OUT процессоры, начиная с Pentium, проверяют, установлен ли сигнал на выводе EWBE# в активное состояние, задерживая выполнение следующей команды до его установления. Заметьте, что команда может быть выбрана с упреждением, даже если EWBE# не активен, но она не выполняется до тех пор, пока сигнал отсутствует. В более ранних моделях процессоров вывод EWBE# отсутствует и никаких задержек не производится.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru