IN

Entrada desde Puerto

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
E4 ibIN AL, imm8IValidoValidoInput byte de imm8 I/O dirección portuaria en AL.
E5 ibIN AX, imm8IValidoValidoPalabra de entrada de imm8 I/O dirección de puerto en AX.
E5 ibIN EAX, imm8IValidoValidoEntrada dword desde la dirección de puerto imm8 I/O a EAX.
ECIN AL,DXZOValidoValidoByte de entrada del puerto I/O en DX en AL.
EDIN AX,DXZOValidoValidoEntrada del puerto I/O en DX en AX.
EDIN EAX,DXZOValidoValidoDoble palabra de entrada del puerto I/O en DX en EAX.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

I

  1. imm8byte inmediato que sigue a la instruccion

Coste medido

Cargando las mediciones de arch-data...

Descripción

Copie el valor del puerto I/O especificado con el segundo operando (operando de origen) al operando de destino (primer operando). El operando de origen puede ser un byte-immediate o el registro DX; el operando de destino se puede registrar AL, AX o EAX, dependiendo del tamaño del puerto que se accede (8, 16, o 32 bits, respectivamente). Utilizando el registro DX como un operando de origen permite acceder a direcciones portuarias I/O de 0 a 65.535; utilizando un byte inmediato permite acceder a direcciones portuarias I/O 0 a 255.

Al acceder a un puerto I/O de 8 bits, el código de operación determina el tamaño del puerto; al acceder a un puerto I/O de 16 y 32 bits, el atributo el operando-size determina el tamaño del puerto. En el nivel de código de máquina, las instrucciones I/O son más cortas al acceder a puertos I/O de 8 bits. Aquí, las ocho partes superiores de la dirección del puerto serán 0.

Esta instrucción sólo es útil para acceder a los puertos I/O ubicados en el espacio de dirección I/O del procesador. Ver el capítulo 20, "Input/Output", en el Manual de Software de Arquitecturas Intel(R) 64 e IA-32, Volumen 1, para obtener más información sobre el acceso a puertos I/O en el espacio de direcciones I/O.

La operación de esta instrucción es la misma en modos no-64-bit y modo 64-bit.

Operación

IF ((PE = 1) and ((CPL > IOPL) or (VM = 1)))

    THEN (* Protected mode with CPL > IOPL or virtual-8086 mode *)

        IF (Any I/O Permission Bit for I/O port being accessed = 1)

                THEN (* I/O operation is not allowed *)
                      #GP(0);

                ELSE ( * I/O operation is allowed *)
                      DEST := SRC; (* Read from selected I/O port *)

          FI;
    ELSE (Real Mode or Protected Mode with CPL  IOPL *)

          DEST := SRC; (* Read from selected I/O port *)
FI;

Banderas afectadas

None.

Excepciones

Modo protegido
#GP(0)Si el CPL es mayor que (tiene menos privilegio) el nivel de privilegios I/O (IOPL) y cualquiera de los bits de permiso I/O correspondientes en TSS para el puerto I/O que se accede es 1. #PF(fault-code) Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.
Modo real
#UDSi se utiliza el prefijo LOCK.
Modo virtual-8086
#GP(0)Si alguno de los bits de permiso I/O en el TSS para el puerto I/O que se accede es 1. #PF(fault-code) Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#GP(0)Si el CPL es mayor que (tiene menos privilegio) el nivel de privilegios I/O (IOPL) y cualquiera de los bits de permiso I/O correspondientes en TSS para el puerto I/O que se accede es 1. #PF(fault-code) Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.

Fuentes