leevis.com icon indicating copy to clipboard operation
leevis.com copied to clipboard

内嵌汇编

Open vislee opened this issue 3 years ago • 0 comments

简介

有一些场景需要用到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

vislee avatar Dec 06 '21 15:12 vislee