操作碼 |
指令 |
說明 |
E6 ib |
OUT imm8, AL |
將 AL 中的位元組輸出到 I/O 埠地址 imm8 |
E7 ib |
OUT imm8, AX |
將 AX 中的字輸出到 I/O 埠地址 imm8 |
E7 ib |
OUT imm8, EAX |
將 EAX 中的雙字輸出到 I/O 埠地址 imm8 |
EE |
OUT DX, AL |
將 AL 中的位元組輸出到 DX 中的 I/O 埠地址 |
EF |
OUT DX, AX |
將 AX 中的字輸出到 DX 中的 I/O 埠地址 |
EF |
OUT DX, EAX |
將 EAX 中的雙字輸出到 DX 中的 I/O 埠地址 |
將值從第二個運算元(源運算元)複製到目標運算元(第一個運算元)指定的 I/O 埠。源運算元可以是 AL、AX 或 EAX 暫存器,具體取決於訪問埠的大小(分別為 8 位、16 位或 32 位);目標運算元可以是位元組立即數或 DX 暫存器。使用位元組立即數時,可以訪問 0 到 255 之間的 I/O 埠地址;將 DX 暫存器用作源運算元時,可以訪問 0 到 65,535 之間的 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 章“輸入/輸出”。
執行 OUT 指令之後,奔騰® 處理器會在開始執行下一條指令之前,確保 EWBE# 引腳已通過採樣啟用。(請注意,如果 EWBE# 處於未忽動狀態,則可以預取此指令,但是要到通過採用啟用 EWBE# 引腳之後,才可以執行它)。只有奔騰處理器系列有 EWBE# 引腳;其它 IA-32 處理器都沒有。
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; (* Writes to selected I/O port *)
FI;
ELSE (Real Mode or Protected Mode with CPL IOPL *)
DEST SRC; (* Writes to 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。