logo

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

Система команд 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

IN

Ввод из порта

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

                 

 

Код

Команда

Описание

Проц.

Пример

E4 ib

IN AL,imm8

Загрузить байт из порта в/в imm8 в регистр AL

8086

in al,60h

E5 ib

IN AX,imm8

Загрузить слово из порта в/в imm8 в регистр AL

8086

in ax,00h

E5 ib

IN EAX,imm8

Загрузить двойное слово из порта в/в imm8 в регистр AL

Intel386

in eax, 03h

EC

IN AL,DX

Загрузить байт из порта в/в DX в регистр AL

8086

in al,dx

ED

IN AX,DX

Загрузить слово из порта в/в DX в регистр AL

8086

in ax,dx

ED

IN EAX,DX

Загрузить двойное слово из порта в/в DX в регистр AL

Intel386

in eax,dx

Описание:

Команда IN пересылает байт, слово или двойное слово данных из порта, адресуемого при помощи второго операнда, в регистр (AL, AX или EAX), указанный первым операндом. Адрес порта может задаваться вторым байтом команды imm8 или содержимым регистра DX. Таким образом, возможно обращение к 256 портам, адреса которых фиксированы (байт imm8), или к 65536 портам, адреса которых могут изменяться путем перезагрузки содержимого регистра DX. При работе с 16-разрядными данными число адресуемых портов уменьшается вдвое, а их адресация должна производиться четными числами: 0, 2, 4 ... 254 для фиксированных портов; 0, 2, 4 ... 65534 для изменяемых портов. Соответственно для 32-разрядных данных число портов сокращается еще вдвое, а их адресация производится числами кратными четырем: 0, 4, 8 ... 252 ... 65532. Таким образом, номера портов должны быть выровнены по границам передаваемых данных согласно их разрядности: 1, 2 или 4 байта. В этом случае пересылка осуществляется за один цикл. Если заданный номер 16 или 32-разрядного порта имеет невыровненное значение, то для передачи данных требуется дополнительный цикл шины.

Операция:

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

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

      IF (Любой из соответствующих порту битов карты в/в = 1)

         THEN (* Операция в/в недопустима *)

            #GP(0);

         ELSE (* Операция в/в разрешена *)

            DEST = [SRC]; (* Читает из адресного пространства ввода/вывода *)

      FI;

   ELSE (Режим реальной адресации или защищенный режим с CPL ≤ EFLAGS.IOPL *)

      DEST = [SRC]; (* Читает из адресного пространства ввода/вывода *)

FI;

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

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

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

Нет.

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

#GP(0), если любой из соответствующих битов разрешения ввода-вывода в TSS равен 1.


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




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

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

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