【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, 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指令相关推荐
- 汇编语言基础--汇编操作指令概述
本文是接续"汇编语言基础--机器级数据存储",主要介绍汇编指令的构造.寻址和指令主要分类. 操作指令 指令的基本要素: 在"计算机处理器(CPU)基础&quo ...
- C语言if和汇编jcc程序对比,逆向基础笔记六 汇编跳转和比较指令
JCC指令 cc 代表 condition code(状态码) Jcc不是单个指令,它只是描述了跳转之前检查条件代码的跳转助记符 例如JNE,在跳转之前检查条件代码 典型的情况是进行比较(设置CC), ...
- 汇编idiv带符合除法指令。。。。
汇编基础一日一学习33 大家好,今天我们来学习下有符号整数除法指令 IDIV,此指令进行有符号的除法运算,使用的操作数格式与DIV指令格式相同. 在进行8位除法 ...
- 汇编中的字符串操作指令
每一种语言都有一些字符串操作函数,反汇编后的代码也不例外.网上讲的都比较零碎,我将它们收集起来,并配上自己的理解,形成本文. 一.字节操作指令:lodsb和stosb 1. lodsd需要寄存器esi ...
- 汇编 DA A 十进制调整指令
[转载]小伙伴们求同去<汇编 DA A十进制调整指令>, 一起来围观吧 https://blog.csdn.net/m0_58836581/article/details/12152571 ...
- ARM汇编:MRS和MSR指令
ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...
- 汇编quad_ARM汇编(2)(指令)
一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...
- Linux常用基础知识必备三之常用指令及操作
Linux常用基础知识必备三之常用指令及操作 1.vi和vim vi如何使用 vi几种模式下的操作指令 命令模式进入编辑模式 命令模式下的快捷键 底行模式(指按了esc键之后输入按键:后出现) 字符串 ...
- Java Web学习day26------Redis基础、Redis数据类型、常用指令、jedis、持久化
Redis基础.Redis数据类型.常用指令.jedis.持久化 1. Redis 简介 1.1 NoSQL概念 1.2 Redis概念 1.3 Redis 的下载与安装 1.4 Redis服务器启动 ...
- windows debug下验证汇编指令中的mov指令传送数据
一.知识储备 1.8086CPU是16位结构,有16根数据线,20根地址线.16根数据线可以一次性传送16位数据,也就是两个字节(也就是一个字)的数据. 什么是字? 在这个特定计算机中,字是其用来一次 ...
最新文章
- 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
- android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)
- html网页语言是什么,HTML是什么?
- boost::dynamic_property_map相关的测试程序
- qt4 连接mysql_Qt4访问mysql 数据库的简单教程
- 3-5:常见任务和主要工具之归档和备份
- UVA116 单向 DSP(多段图最短路)
- JavaScript设计模式与开发实践系列之单例模式
- 我的2013——不平凡的第一次
- Python基础教程---读书笔记一
- WPF教程:依赖属性
- 百度网盘四种方法免费提速
- 好用免费的FTP软件工具推荐,支持中文 速来领取
- PHP计算一年有多少周,每周开始日期和结束日期
- play框架使用起来(6)
- 考研英语单词-近义词分类-Second Day
- 【附源码】Java计算机毕业设计基于微信小程序停车系统(程序+LW+部署)
- Makefile文件是什么?(一)
- java map key是否存在_java如何判断map集合中是否存在key?
- MAT的 thread overview 功能