; Copyright (C) 2011 Alen D. Archuleta (zeafoo@gmail.com) ;
设备和芯片的I/O端口操作实现,其实没有复杂的东西在里边 ;
I/O端口操作主要是看一堆文档,把整个X86架构的PC机所有I/O端口记住, ;
并记住它们每一个数据寄存器、命令寄存器等操作访问标准(也可以称之协议) ;
记住之后,整个过程中就是按标准使用I/O指令: ;
in, out(只能与DX,AX,AL寄存器结合使用) ;
下面的实现是提供给C使用,因为不太喜欢GNU的inline asm,语法太 ;
晦涩,所以直接使用汇编实现。 ;
inb 从I/O端口读取一个字节(BYTE, HALF-WORD) ;
outb 向I/O端口写入一个字节(BYTE, HALF-WORD) ;
inw 从I/O端口读取一个字(WORD,即两个字节) ;
outw 向I/O端口写入一个字(WORD,即两个字节) ;
byte inb(word port); ;
word inw(word port); ;
void outb(word port, byte value); ;
void outw(word port, word value); ;
编译: ;
nasm -f elf -o io.o io.asm ;
与内核一起链接使用
global inb, outb, inw, outw
[section .text]
inb:
xor eax, eax ; 在C语言中,都是以EAX寄存器作为返回值
push dx ; 这个过程要对DX修改,所以先保存一下
; 返回地址占加个字节,所以偏移4开始读取,第一个参数
; 对于参数传递过程不作详细的记录,另写日志详细介绍
mov dx, [esp + 4]
in al, dx
pop dx ; 恢复DX寄存器
ret

outb:
push dx
mov dx, [esp + 4]
mov al, [esp + 6]
out dx, al
pop dx
ret
inw:
xor eax, eax
push dx

mov dx, [esp + 4]
in ax, dx
pop dx
ret

outw:
push dx
mov dx, [esp + 4]
mov ax, [esp + 6]
out dx, ax

pop dx
ret

汇编in和out介绍相关推荐

  1. Go汇编语法和MatrixOne使用介绍

    目录 MatrixOne数据库是什么? Go汇编介绍 为什么使用Go汇编? 为什么不用CGO? Go汇编语法特点 操作数顺序 寄存器宽度标识 函数调用约定 对写Go汇编代码有帮助的工具 avo tex ...

  2. 一步步编写操作系统 77 内联汇编与ATT语法简介

    内联汇编 之前和大家介绍过了一种汇编方法,就是C代码和汇编代码分别编译,最后通过链接的方式结合在一起形成可执行文件. 另一种方式就是在C代码中直接嵌入汇编语言,强大的GCC无所不能,咱们本节要学习的就 ...

  3. go语言调度器源代码情景分析之五:汇编指令

    本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运 ...

  4. keil c语言pdf,Keil软件“C语言”与“汇编”混编 —— 相关知识整理.pdf

    Keil软件"C语言"与"汇编"混编 -- 相关知识整理.pdf Keil 软件软件C 语言语言与与汇编汇编混编混编 相关知识整理相关知识整理 用 Keil 在 ...

  5. ARM汇编指令 SUB MOV LDR STR

    开启arm汇编学习. 环境介绍:使用的是TI TDA4平台.该平台是基于ARMV8架构,64bit的CPU. 先上一段C代码: #include <stdio.h>int main(voi ...

  6. 编译器构造概述(详细)

    一.             编译器简介 前面谈到静态链接器构造的基本流程,最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器,本文构造一个符合这种具体格式要 ...

  7. 计算机系统大作业:Hello's P2P

    计算机系统大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术 指 导 教 师 史先俊 计算机科学与技术学院 2019年12月 摘 要 本文介绍了一个.c源程序在计算机系统中从编 ...

  8. [转]STL的内存分配器

    题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...

  9. 【计算机系统】ICS大作业论文-程序人生-Hello’s P2P

    计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术专业 学 号 200111026 班 级 20级计算机9班 学 生 陈弘毅 指 导 教 师 郑贵滨 计算机科学与技 ...

  10. 虚幻4渲染编程(环境模拟篇)【第五卷:可交互物理植被模拟 - 上】

    我的专栏目录: 小IVan:专题概述及目录 开篇综述 这一卷将会开始研究可交互植被环境的模拟.我把可交互植被环境模拟这个大的课题拆解为几个部分.我挑选了几个森林模拟至关重要的几个要素并且实现它们. [ ...

最新文章

  1. 【收藏】Java多线程/并发编程大合集
  2. 公司虚拟化平台VMware vCenter Server无法连接故障排查解决
  3. 30道最常问的Java基础面试题
  4. centos系统中kaptcha没有按指定的字体显示验证码问题解决
  5. [PHP] 深度解析Nginx下的PHP框架路由实现
  6. 200726C的数据传递方式
  7. Ubuntu 常用工具、指令安装
  8. Docker笔记三 Docker镜像制作
  9. 力扣题目——653. 两数之和 IV - 输入 BST
  10. 安装MySQL出现 Install/Remove of the Service Denied!
  11. php md5校验工具下载,md5校验工具下载_md5校验工具下载「最新|免费」-太平洋下载中心...
  12. 游戏修改器(一)瞬移
  13. Spring学习笔记—Spring之旅
  14. android手机usb设置在哪里,手机usb调试在哪,教您安卓手机怎么打开USB调试
  15. Premiere常用快捷键+网站推荐
  16. 1466:Girls and Boys:优美的拆散早恋学生?
  17. 夕阳美,美到骨子里了
  18. 怎么用计算机算出锁屏密码,电脑怎么设置锁屏密码
  19. 基于layui后台html模板免费下载
  20. 内存对齐规则及为什么内存对齐

热门文章

  1. 快递100支持的物流公司
  2. 软件工程专业英语翻译句子
  3. 百度编辑器(ueditor)魔改:5、自定义一键排版(按照需求保留标签和样式)
  4. 国密算法使用-SM3
  5. LDA算法原理及LDA与PCA的比较
  6. 使用Java抓取解析汽车之家车型配置数据
  7. 侧信道实验实验三 S盒CPA侧信道攻击
  8. 免费资源网站,你想要的全都有【各类宝藏资源 】
  9. 神奇宝贝HTML游戏代码,《我的世界》神奇宝贝召唤神兽指令 各神兽召唤代码大全...
  10. 电气工程cad实用教程电子版_电气工程CAD实用教程 pdf epub mobi txt 下载