x86采用独立编址的方式,IO端口地址和存储器地址是分开的。
对于IO存储器访问,需要使用独立的IO指令,也就是IN
和OUT
两类地址
- 地址空间大小在8位以下
- 地址空间大小在16位以下
两种格式
对于两类不同的地址,IO指令的格式不一样。
Mnemonic | Description |
---|---|
OUT imm8, AL | Output byte in AL to I/O port address imm8. |
OUT imm8, AX | Output word in AX to I/O port address imm8. |
OUT DX, AL | Output byte in AL to I/O port address in DX. |
OUT DX, AX | Output word in AX to I/O port address in DX. |
目的操作数:
对于8位地址,是直接寻址,直接给出8位立即数即可,一般用2位十六进制表示。
对于16位地址,是间接寻址,需要先把地址送入DX,再寻址。
mov DX,address
out DX,AL
源操作数:
可以是8位或者16位,必须存在累加器AX或AL中,这是设计规定。
对于IN指令同理。
特别注意,IO端口的访问与存储器访问是一样的,都是通过地址访问存储单元,把不管是imm8还是DX,都是地址。