操作碼 |
指令 |
說明 |
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。
無。
#GP(0) - 如果訪問的 I/O 埠的 TSS 中的任何 I/O 許可權位是 1。