时间:2021-05-20
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做了一层包装:
UINT8IoRead8 ( 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做了一层包装:
UINT8IoWrite8 ( 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寄存器中,不能是其他寄存器。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
内联汇编的重要性体现在它能够灵活操作,而且可以使其输出通过C变量显示出来。因为它具有这种能力,所以"asm"可以用作汇编指令和包含它的C程序之间的接口。简单得说
push是一个汇编术语,实现压入操作的指令是PUSH指令,实现弹出操作的指令是POP指令。PUSH入栈指令及POP出栈指令:堆栈操作是以“后进先出”的方式进行数
指令(instruction)是一种语句,它在程序汇编编译时变得可执行。汇编器将指令翻译为机器语言字节,并且在运行时由CPU加载和执行。一条指令有四个组成部分:
指令(instruction)是一种语句,它在程序汇编编译时变得可执行。汇编器将指令翻译为机器语言字节,并且在运行时由CPU加载和执行。一条指令有四个组成部分:
以计算机为例,一条指令通常由操作码和操作数组成。指令是一种语句,它在程序汇编编译时变得可执行。汇编器将指令翻译为机器语言字节,并且在运行时由CPU加载和执行。