IN - 從埠輸入

操作碼

指令

說明

E4 ib

IN AL,imm8

imm8 I/O 埠地址將位元組輸入 AL

E5 ib

IN AX,imm8

imm8 I/O 埠地址將位元組輸入 AX

E5 ib

IN EAX,imm8

imm8 I/O 埠地址將位元組輸入 EAX

EC

IN AL,DX

從 DX 中的 I/O 埠將位元組輸入 AL

ED

IN AX,DX

從 DX 中的 I/O 埠將字輸入到 AX

ED

IN EAX,DX

從 DX 中的 I/O 埠將雙字輸入到 EAX

說明

從第二個運算元(源運算元)指定的 I/O 埠將值複製到目標運算元(第一個運算元)。源運算元可以是位元組立即數或 DX 暫存器,目標運算元可以是暫存器 AL、AX 或 EAX,具體取決於訪問的埠大小(分別為 8、16 或 32 位)。將 DX 暫存器用作源運算元時,可以訪問從 0 到 65,535 的 I/O 埠地址;使用位元組立即數時,可以訪問從 0 到 255 的 I/O 埠地址。

訪問 8 位 I/O 埠時,操作碼確定埠大小;訪問 16 與 32 位 I/O 埠時,運算元大小確定埠大小。

在機器程式碼級別上,訪問 8 位 I/O 埠時,I/O 指令更短。這裡,埠地址的高 8 位將是 0。

此指令只能用於訪問處理器 I/O 地址空間中的 I/O 埠。如需有關訪問 I/O 地址空間中的 I/O 埠的詳細資訊,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷第 9 章“輸入/輸出”。

操作

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; (* Reads from selected I/O port *)
FI;
ELSE (Real Mode or Protected Mode with CPL IOPL *)
DEST SRC; (* Reads from selected I/O port *)
FI;

影響的標誌

無。

保護模式異常

#GP(0) - 如果 CPL 大於(特權較低)I/O 特權級別 (IOPL),並且訪問的 I/O 埠的 TSS 中相應的任何 I/O 許可權位是 1。

實地址模式異常

無。

虛 8086 模式異常

#GP(0) - 如果訪問的 I/O 埠的 TSS 中的任何 I/O 許可權位是 1。