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, dxmov 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指令相关推荐

  1. 汇编语言基础--汇编操作指令概述

    本文是接续"汇编语言基础--机器级数据存储",主要介绍汇编指令的构造.寻址和指令主要分类. 操作指令 指令的基本要素:       在"计算机处理器(CPU)基础&quo ...

  2. C语言if和汇编jcc程序对比,逆向基础笔记六 汇编跳转和比较指令

    JCC指令 cc 代表 condition code(状态码) Jcc不是单个指令,它只是描述了跳转之前检查条件代码的跳转助记符 例如JNE,在跳转之前检查条件代码 典型的情况是进行比较(设置CC), ...

  3. 汇编idiv带符合除法指令。。。。

    汇编基础一日一学习33                     大家好,今天我们来学习下有符号整数除法指令 IDIV,此指令进行有符号的除法运算,使用的操作数格式与DIV指令格式相同. 在进行8位除法 ...

  4. 汇编中的字符串操作指令

    每一种语言都有一些字符串操作函数,反汇编后的代码也不例外.网上讲的都比较零碎,我将它们收集起来,并配上自己的理解,形成本文. 一.字节操作指令:lodsb和stosb 1. lodsd需要寄存器esi ...

  5. 汇编 DA A 十进制调整指令

    [转载]小伙伴们求同去<汇编 DA A十进制调整指令>, 一起来围观吧 https://blog.csdn.net/m0_58836581/article/details/12152571 ...

  6. ARM汇编:MRS和MSR指令

    ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...

  7. 汇编quad_ARM汇编(2)(指令)

    一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...

  8. Linux常用基础知识必备三之常用指令及操作

    Linux常用基础知识必备三之常用指令及操作 1.vi和vim vi如何使用 vi几种模式下的操作指令 命令模式进入编辑模式 命令模式下的快捷键 底行模式(指按了esc键之后输入按键:后出现) 字符串 ...

  9. Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化

    Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...

  10. windows debug下验证汇编指令中的mov指令传送数据

    一.知识储备 1.8086CPU是16位结构,有16根数据线,20根地址线.16根数据线可以一次性传送16位数据,也就是两个字节(也就是一个字)的数据. 什么是字? 在这个特定计算机中,字是其用来一次 ...

最新文章

  1. 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
  2. android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)
  3. html网页语言是什么,HTML是什么?
  4. boost::dynamic_property_map相关的测试程序
  5. qt4 连接mysql_Qt4访问mysql 数据库的简单教程
  6. 3-5:常见任务和主要工具之归档和备份
  7. UVA116 单向 DSP(多段图最短路)
  8. JavaScript设计模式与开发实践系列之单例模式
  9. 我的2013——不平凡的第一次
  10. Python基础教程---读书笔记一
  11. WPF教程:依赖属性
  12. 百度网盘四种方法免费提速
  13. 好用免费的FTP软件工具推荐,支持中文 速来领取
  14. PHP计算一年有多少周,每周开始日期和结束日期
  15. play框架使用起来(6)
  16. 考研英语单词-近义词分类-Second Day
  17. 【附源码】Java计算机毕业设计基于微信小程序停车系统(程序+LW+部署)
  18. Makefile文件是什么?(一)
  19. java map key是否存在_java如何判断map集合中是否存在key?
  20. MAT的 thread overview 功能

热门文章

  1. 微软最走运/倒霉的十个瞬间
  2. C#动态创建lambda表达式
  3. 新支点国产服务器操作系统与虚拟化平台和云管理平台实现兼容
  4. 从容不迫——《稀缺》的读书笔记范文3700字
  5. python模拟鼠标键盘操作_python3实现复制粘贴 Python-模拟鼠标键盘动作 | 猴头客
  6. 腾讯云API与国家气象局API获取实时天气
  7. Hive坑之Where语句的“不等于”
  8. 天梭手表Tissot手表更换电池的方法
  9. mysql 安装与连接数据库_Mysql 安装、登录以及链接数据库
  10. mysql-select查询操作