#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.