当前位置: 代码迷 >> 汇编语言 >> linux0.11内核代码有段内嵌汇编理解不能,
  详细解决方案

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

热度:9838   发布时间:2013-02-26 00:00:00.0
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.