组装太多同名标签

问题描述 投票:0回答:1

我正在使用 nasm 在汇编 x64 中创建一个简单的代码,但在我的算法中,我的函数内需要许多 while 和 for 循环。因此,我的代码充满了诸如

loop1
loop2
loop3
...之类的标签...有没有办法跳转到下一个或上一个名为
loop
的标签,以便我可以将所有这些循环称为唯一一个标签?

assembly x86-64 nasm
1个回答
0
投票

我自己刚刚学习x86-64,我处理它的方式如下。

假设我的函数名为 my_func。我声明这是一个常规标签。

我的_函数:

然后我在 my_func 中使用的所有本地标签都用起始点声明,如 .loop、.end_while 等。这些点是 nasm 中名称的一部分。所以我的 .loop 标签实际上扩展为 my_func.loop 和 .end_while 扩展为 my_func.end_while。

幸运的是,在该函数中,您可以通过较短的名称来引用这些点标签。函数中通常不会有两个以上的循环,因此您可以使用 .loop1 和 .loop2。

当您继续执行下一个函数 my_func2: 时,您可以再次声明一个全新的 .loop 标签。这次该标签的扩展名称是 my_func2.loop,它与您在上一个函数中声明的先前 .loop 标签不同。同样,您可以通过函数 2 中的短名称来引用新的 .loop 函数。

nasm 实际上所做的似乎是,它跟踪先前声明的非点标签 (my_func2),并默默地将其添加到函数中遇到的所有“点标签”的开头。

如果您需要更多详细信息,请参阅 nasm 手册中的第 3.9 节:

https://www.nasm.us/xdoc/2.16.03/html/nasmdoc3.html#section-3.9

我认为这是他们想出的一个绝妙主意。我希望这个解决方案有所帮助。祝你学习顺利。

© www.soinside.com 2019 - 2024. All rights reserved.