gnu 汇编器:获取标签/变量的地址 [INTEL SYNTAX]
我有这样的代码:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
现在我想将 woof 的地址移到 eax 中。用于执行此操作的英特尔语法代码是什么?将 bleh 的地址移动到 ebx 中也是如此。
非常感谢您的帮助!
I have a code like this:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
now I would like to move the address of woof into eax. What's the intel syntax code here for doing that? The same goes with moving bleh's address into, say, ebx.
Your help is much appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
bss 部分中不能有任何实际对象。某些汇编器可能仍然允许您切换到 .bss 部分,但您所能做的就是说类似:
x: 。 = 。 + 4
。如今,在大多数汇编器中,特别是在 gnu for intel 中,不再有
.bss
指令,因此您可以暂时切换到 bss,并使用以下内容一次性创建 bss 符号:。通信符号、大小、对齐方式
。这就是为什么您可能会收到错误“.bss 指令无法识别”或类似的错误。然后您可以使用以下任一方式获取地址:
或
更新: 啊哈,英特尔语法,而不是英特尔架构。好的:
所有
lea
表单都应该生成相同的代码。The bss section can't have any actual objects in it. Some assemblers may still allow you to switch to the .bss section, but all you can do there is say something like:
x: . = . + 4
.In most assemblers these days and specifically in gnu for intel, there is no longer a
.bss
directive, so you temporarily switch to bss and create the bss symbol in one shot with something like:.comm sym,size,alignment
. This is why you are presumably getting an error ".bss directive not recognized" or something like that.And then you can get the address with either:
or
Update: aha, intel syntax, not intel architecture. OK:
All the
lea
forms should generate the same code.