码迷,mamicode.com
首页 > 系统相关 > 详细

《linux 内核完全剖析》 include/asm/io.h

时间:2014-06-29 23:13:13      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:linux   内核   asm   

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 区别在于前者有短暂延时,后者没有










bubuko.com,布布扣





《linux 内核完全剖析》 include/asm/io.h,布布扣,bubuko.com

《linux 内核完全剖析》 include/asm/io.h

标签:linux   内核   asm   

原文地址:http://blog.csdn.net/cinmyheart/article/details/35785993

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!