OUT
输出到端口
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
E6 ib | OUT imm8, AL | I | 有效 | 有效 | AL中输出字节到 I/O 端口地址 imm8. |
E7 ib | OUT imm8, AX | I | 有效 | 有效 | 在AX到I/O端口地址imm8中输出单词. |
E7 ib | OUT imm8, EAX | I | 有效 | 有效 | EAX输出双字到I/O端口地址imm8. |
EE | OUT DX, AL | ZO | 有效 | 有效 | 输出字节在 AL 到 DX 的 I/O 端口地址 。 |
EF | OUT DX, AX | ZO | 有效 | 有效 | 在DX的AX到I/O端口地址中输出单词. |
EF | OUT DX, EAX | ZO | 有效 | 有效 | EAX输出双字到DX的I/O端口地址. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
I
imm8指令后的立即数字节
实测开销
正在从 arch-data 加载实测数据...
说明
将第二个 操作数 (源操作数) 的值复制到用 目标操作数 (第一个 操作数)指定的 I/O 端口. 源操作数可以根据访问端口的大小(分别为8,16,或32位)注册AL,AX,或EAX;目标操作数可以是字节即时或DX注册. 使用字节即时允许访问I/O端口地址0至255;使用DX寄存器作为源操作数允许访问0至65,535的I/O端口.
正在访问的I/O端口的大小由8位I/O端口的操作码或16位或32位I/O端口的指令的操作数大小属性决定.
在机器代码级别上,I/O指令在访问8位I/O端口时较短. 在这里,端口地址的上八位位将是0.
此指令仅用于访问位于处理器I/O地址空间的I/O端口. 有关访问I/O地址空间I/O端口的更多信息,见Intel(R)64和IA-32 Architecture Software开发者手册第1卷第20章"输入/输出".
此指令的操作在非64位模式和64位模式中是相同的.
IA-32 架构兼容性
执行 OUT 指令后,Pentium(R) 处理器确保EWBE# pin在开始执行下一个指令前被采样. (注意,如果EWBE#不活动,则指令可以预设,但直到EWBE# pin被采样为活性. ) 只有Pentium处理器家族有EWBE# pin.
行动
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;受影响的旗帜
None.
异常
保护模式
#GP(0) | 如果 CPL 大于(拥有较少的特权) I/O 特权级(IOPL),而任何正在访问的 I/O 端口在 TSS 中相应的 I/O 权限位是 1 。 |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
#GP(0) | 如果正在访问的 I/O 端口的 TSS 中的任何 I/O 许可位是 1. #PF(fault-code) 如果 页面错误 发生的话. |
#UD | 如果使用 LOCK 前缀 。 |
兼容模式
| 与保护模式例外相同. |
64 位模式
| 与保护模式例外相同. |