asm基础――汇编指令之in/out指令
2020-03-13 12:08
127 查看
x86中的IO端口访问
汇编是直接面向硬件的,它可以访问系统的mem空间,也可以直接访问系统的io空间。
汇编中使用in/out来访问系统的io空间。
IN
从端口输入
OF |
DF |
IF |
SF |
ZF |
AF |
PF |
CF |
说明:从端口输入一个字节或字到AL或AX中(IA-32处理器上可以输入一个双字到EAX)。源操作数是端口地址,可以是8位的常量或者DX中的一个16位地址。
指令格式:
in accum, imm (应该不需要是8位,可以是16位,比如3F8h) in accum, dx
下面是一个例子,对in做了一层包装:
UINT8 IoRead8 ( IN UINTN Port ) { UINT8 Data; __asm { mov dx, word ptr [Port] in al, dx mov Data, al } return Data; }
OUT
输出到端口。
OF |
DF |
IF |
SF |
ZF |
AF |
PF |
CF |
说明:将累加器中的一个字节或字输出到端口(IA-32处理器上可以向端口输出一个双字)。端口地址如果在范围0-FFh之间,可以是一个常量,也可以在DX中存放0-FFFFh之间的端口地址。
指令格式:
out imm8, accum(应该不需要是8位,可以是16位,比如3F8h) out dx, accum
下面是一个例子,对out做了一层包装:
UINT8 IoWrite8 ( IN UINTN Port, IN UINT8 Value ) { __asm { mov al, byte ptr [Value] mov dx, word ptr [Port] out dx, al } return Value; }
注意,io地址要么是立即数,要么放在dx寄存器中;而数据也都放在al/ax/eax寄存器中,不能是其他寄存器。
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- ARM汇编编程基础之六 —— 其它寻址模式与其它指令
- 汇编语言基础教程-加法指令
- 汇编基础教程(二)——常用汇编指令之条件指令
- asm基础——使用nasm和bochs学习汇编
- asm基础——汇编中的结构体
- asm基础——汇编指令之in/out指令
- [BX]和loop指令05 - 零基础入门学习汇编语言27
- ARM汇编基础知识汇总与Inline Hook
- 端口和in /out指令
- 简图记录-ARM汇编基础(基本指令、伪指令、协处理器指令)
- 转移指令的原理02 - 零基础入门学习汇编语言44
- 汇编基础教程(二)——常用汇编指令之其他指令
- [BX]和loop指令05 - 零基础入门学习汇编语言27
- asm基础—— vs下使用汇编
- asm基础——汇编指令之ascii调整指令
- 转移指令的原理02 - 零基础入门学习汇编语言44
- 转移指令的原理04 - 零基础入门学习汇编语言46
- 对输入输出指令IN-OUT的理解
- 汇编基础教程(二)——常用汇编指令之其他指令
- 汇编语言基础学习以及各种指令记忆(实验七)