这个大会声明是什么意思?
我正在查看 gcc 使用 -s 标志生成的汇编代码。一些语句如下所示。
movl is_leader(%rip), destination
这里,is_leader是C代码中全局定义的int类型变量。我不明白这里的术语 is_leader(%rip) 。 rip 不是指令指针吗?我需要知道如何使用此语句来访问 is_leader。
I am looking at the assembly code generated by gcc by using the -s flag. Some statements look like the following.
movl is_leader(%rip), destination
Here, is_leader is a globally defined variable of type int in the C code. What I don't understand is the term is_leader(%rip) here. Isn't rip the instruction pointer? I need to know how is this statement used to access is_leader.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它要求汇编器生成代码,将当前指令的地址与指令指针的对象地址之间的差值相加或相减。
这给出了对象的地址,而不生成绝对地址(通常,偏移量适合 16 或 32 位,因此生成的代码也更短,因此更快)。
这增加了两个项目之间的距离保持不变的约束,因此这只能用于同一可加载对象中的数据;如果不满足该条件,链接器将标记错误。
It asks the assembler to generate code that adds or subtracts the difference between the address of the current instruction and the address of the object to the instruction pointer.
This gives the address of the object without generating an absolute address (and generally, the offset fits into 16 or 32 bits, so the resulting code is also shorter and thus faster).
This adds the constraint that the distance between both items remains constant, so this can be used only for data in the same loadable object; the linker will flag an error if that condition is not met.
可能与 *.so 可执行文件内的位置无关代码有关。
Perhaps related to position independent code, inside a *.so executable.