《linux 内核全然剖析》 include/asm/io.h
2017-08-02 21:28
381 查看
include/asm/io.h
#define outb(value,port) \ __asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) //宏定义outb用汇编实现了在端口地址port处写入值value //使用的寄存器是al,一个byte长度,而端口port使用的是2byte长度地址来标记的寄存器,注意这里寄存器的使用 #define inb(port) ({ \ unsigned char _v; \ __asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \ _v; \ }) //这里inb是在端口port处读入读入一个byte长度的数据。并把读入数据保存在变量_V中 #define outb_p(value,port) \ __asm__ ("outb %%al,%%dx\n" \ "\tjmp 1f\n" \ "1:\tjmp 1f\n" \ //这里jmp 1f是老把戏了。就是继续向下运行语句。纯粹的通过“反复运行没啥意义的机器指令”短暂延时一下而已 "1:"::"a" (value),"d" (port)) //outb_p 和outb 差别在于前者有短暂延时。后者没有 #define inb_p(port) ({ \ unsigned char _v; \ __asm__ volatile ("inb %%dx,%%al\n" \ "\tjmp 1f\n" \ "1:\tjmp 1f\n" \ "1:":"=a" (_v):"d" (port)); \ _v; \ }) //inb_p 和inb 差别在于前者有短暂延时,后者没有
相关文章推荐
- 《linux 内核全然剖析》 mktime.c
- 《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程
- 《linux 内核全然剖析》 fork.c 代码分析笔记
- 《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境
- 《linux 内核全然剖析》 chapter 2 微型计算机组成结构
- 《linux 内核全然剖析》 sys.c 代码分析
- 《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
- Linux 内核网络协议栈源码剖析】bind 函数剖析
- Linux 内核剖析
- Linux 内核剖析 历史和体系结构分析
- Linux 内核剖析
- KSM(Kernel Samepage Merging) 剖析:Linux 内核中的内存去耦合[转]
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.4 分页机制
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护
- KSM(Kernel Samepage Merging) 剖析:Linux 内核中的内存去耦合
- 【深入剖析Linux内核】Linux内核之旅——(二)内核抢占与中断返回
- linux0.11内核源码剖析:第一篇 内存管理、memory.c【转】
- Linux 内核剖析
- Linux 同步方法剖析--内核原子,自旋锁和互斥锁
- 【Linux 内核网络协议栈源码剖析】bind 函数剖析