内联汇编中数字的含义是什么?

时间:2015-07-29 18:40:19

标签: linux-kernel inline-assembly

有谁知道以下代码的作用? 我不确定引用的是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

如果有人能给我一些关键词来谷歌,我真的很感激。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

那些是local labels(数字后跟冒号)。

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

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

正如您所看到的,该异常的条目会将EIO移至err,然后跳回xor后的指令(如果err清除-keepclassmembers class com.company.user.* { public *; } 没有错误。)

相关问题