leevis.com
leevis.com copied to clipboard
内嵌汇编
简介
有一些场景需要用到c内嵌汇编。 例如,操控一些硬件,nginx在读取cpu信息就是用的内嵌汇编。 再例如,为了更好的性能表现。下面例子计算字符串长度。
语法:
__asm__(
"汇编语句"
:输出寄存器
:输入寄存器
:会被修改的寄存器
)
代码例子
#include <stdio.h>
int slen(const char *s) {
register int __res __asm__("cx");
__asm__("cld; repne; scasb\n\t"
"notl %0; decl %0\n"
:"=c" (__res)
:"D" (s),"a" (0),"0" (0xffffffff)
:);
return __res;
}
int main(int argc, char const *argv[])
{
printf("%d\n", slen("abcdef"));
return 0;
}
编译: gcc -o s s.c