我是靠谱客的博主 鳗鱼小白菜,最近开发中收集的这篇文章主要介绍asm基础——汇编指令之in/out指令,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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寄存器中,不能是其他寄存器。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。

最后

以上就是鳗鱼小白菜为你收集整理的asm基础——汇编指令之in/out指令的全部内容,希望文章能够帮你解决asm基础——汇编指令之in/out指令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部