编程语言
首页 > 编程语言> > 内嵌汇编

内嵌汇编

作者:互联网

内嵌汇编(英语:Inline assembly)通俗来讲,就是将汇编语言代码嵌入到高级语言的程序中,例如嵌入到 C 语言程序中。

linux 操作系统下,C 语言程序的编译一般使用 GCC 来编译,而 GCC 编译器提供了内嵌汇编的功能,也就是说可以在 C 代码中直接内嵌汇编语言语句。

GNU 汇编器使用的是 AT&T 汇编语言语法,因此内嵌在 C 语言中的汇编语言语法就是 AT&T 语法。

1. 内嵌汇编的用途

2. 内嵌汇编的基本语法形式

asm (
  "汇编语句模板"
  :输出寄存器
  :输入寄存器
  :会被修改的寄存器
)

3. 具体示例

以 linux-0.11 下 kernel/traps.c 文件中第 22 行开始的一段代码为示例

#define get_seg_byte(seg, addr) ({ \
    register char __res; \
    __asm__("push %%fs; \
             mov %%ax, %%fs; \
             movb %%fs:%2, %%al; \
             pop %%fs"\
             :"=a" (__res) \                  // 输出寄存器列表
             :"0" (seg), "m" (*(addr))); \    // 输入寄存器列表
    __res; \
})

(1)示例的解释

(2)示例的具体功能

4. 常用寄存器限制符说明

5. 参考

更具体的内容请参考书籍:《Linux内核完全剖析》 赵炯

标签:__,内嵌,fs,汇编,%%,寄存器
来源: https://www.cnblogs.com/wanghuizhao/p/16388211.html