行内数字的含义是什么 assemble

What is the meaning of numbers in inline assemble

有谁知道下面的代码是做什么的? 我不确定 1、2、3 指的是什么以及它们在这里是如何使用的。 :-(

 95         asm volatile("2: wrmsr ; xor %[err],%[err]\n"
 96                      "1:\n\t"
 97                      ".section .fixup,\"ax\"\n\t"
 98                      "3:  mov %[fault],%[err] ; jmp 1b\n\t"
 99                      ".previous\n\t"
100                      _ASM_EXTABLE(2b, 3b)
101                      : [err] "=a" (err)
102                      : "c" (msr), "" (low), "d" (high),
103                        [fault] "i" (-EIO)
104                      : "memory");
105         return err;​

代码来自Linux:http://lxr.free-electrons.com/source/arch/x86/include/asm/msr.h#L91

如果有人能给我一些google它的关键词,我将不胜感激。

非常感谢您!

这些是 local labels(数字后跟一个冒号)。

稍后引用它们时,b(如 jmp 1b)表示引用该数字最近的本地标签向后f 稍后会在代码中查找匹配的本地标签 (forwards)。

该代码声明了一个异常table,当执行wrmsr指令发生异常时,错误处理程序(通常在arch/<your_CPU_arch>/mm/fault.c)搜索异常table相应的条目,然后跳转到那里。

如您所见,该异常的条目将 EIO 移动到 err,并跳回到 xor 之后的指令(这将清除 err万一没有错误)。