首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

linux0.11内核代码有段内嵌汇编理解不能,

2012-04-16 
linux0.11内核代码有段内嵌汇编理解不能,求助~#define outb(value,port) \__asm__ (outb %%al,%%dx::a

linux0.11内核代码有段内嵌汇编理解不能,求助~
#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))  

这段内嵌汇编的宏, 不明白其中为什么 %%al,和%%dx有2个%,还有::后面的两个参数是如何与前面的对应的呢?应该如何从语法结构上去理解 这段代码呢?

[解决办法]
你可以看赵炯 linux剖析 的 47页:
这是AT&T汇编语法,与intel汇编语法有些不同。
这是一个宏。
out-b中的b表示输出一个byte。

AT&T汇编语法寄存器前需要一个%,而现在是内嵌汇编,所以有2个%。

outb %%al,%%dx 用intel汇编语法就是 out dx,al。秩序是反的。

::"a" (value),"d" (port))是输入参数,a代表eax,d代表edx.

热点排行