示例1:
# unsigned char fun (unsigned short int port)
# {
# unsigned char _v;
#
# __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (port));
# return _v;
# }
这是at&t汇编格式
inb 是intel x86的一条指令
%w1表示宽度为w的1号占位符
%0表示0号占位符
inb %w1,%0 意思是将%w1读到%0,
嵌入式汇编除指令外有三部分(可选的),依次为
输出:"=a" (_v),_v0对应0号占位符,=表示只写,a表示最终从%eax / %ax / %al传送给_v
输入:"Nd" (port),port对应1号占位符号,N表示 0-255 之间的立即数 d表示将port传送给%edx / %dx / %d
示例2:
#inb : in BYTE 相当于 intel指令格式的 in.
#但是它指示出这是一个字节长度.
#比如:
#*AT&T: movb FOO,al
#相当于:
#*Intel: mov al,byte ptr FOO
在AT&T的汇编语言中,操作数的字长是由操作码助记符的最后一个字母决定的,后缀'b'、'w'、'l'分别表示操作数的字长为8比特(字节,byte),16比特(字,word)和32比特(长字,long),而Intel格式中操作数的字长是用“word ptr”或者“byte ptr”等前缀来表示的。