操作系统与网络实现 之十六

来源:互联网 发布:神枪手交易软件 编辑:程序博客网 时间:2024/05/16 00:54

 

内嵌汇编

以后我们要和一些端口打交道,端口0xCF8PCI的地址寄存器IO地址,端口0xCFCPCI的数据寄存器IO地址,还有网卡端口。

要执行写入端口和从端口读出操作,在汇编中是这样实现的:

mov al,0x02

in 0xcf8,al

Linuxc语言内嵌汇编格式:

__asm__("<asm routine>" : output : input : modify);

output要用“=”开头

__asm__ 表示后面的代码为内嵌汇编,

寄存器前缀为%

寄存器缩写约定

a   %eax/%ax/%al

d   %edx/%dx/%dl

 

C语言是这样子:

unsignedchar readb(unsignedshort p )                  //读字节8

{

unsignedchar result ;

  __asm__("in %%dx , %%al":"=a"( result ):"d"( p ));

return result ;

}

 

"result"前面的限制字符串是"=a",其中"="表示"result"是输出操作数,"a" 表示需要将"result"ax(al)寄存器相关联,指令执行完后需要将寄存器中的值存入变量"result""d"( p )表示dx=p

0 0