asm基础——汇编指令之in/out指令

来源:互联网 发布:优化开镜hud压 编辑:程序博客网 时间:2024/05/29 00:34

汇编是直接面向硬件的,它可以访问系统的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寄存器中,不能是其他寄存器。

0 0
原创粉丝点击