首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nasm虚线标签

Nasm虚线标签
EN

Stack Overflow用户
提问于 2017-02-26 22:12:01
回答 1查看 2.1K关注 0票数 3

我熟悉TASM,但不太熟悉NASM。我读过NASM允许使用本地标签,这些标签在名称之前用一个点表示。例如,代码

代码语言:javascript
复制
.loop: ;some code
       jmp .loop

定义一个名为.loop的本地标签,并在后面的指令jmp中使用引用的地址。

然而,在网上阅读一些代码示例,我会发现以下几行:

代码语言:javascript
复制
.label1:
        push label1
        ;other push

我感到困惑,因为label1没有在任何地方定义(所以它必须与.label1有某种联系),但我既不理解这种推的含义,也不理解代码是否应该是push .label1。push label1是做什么的?

EN

回答 1

Stack Overflow用户

发布于 2018-10-05 00:11:52

引导点是NASM的本地标签的语法,它本质上嵌套在最后一个普通(非本地)标签之上。

代码语言:javascript
复制
sum_ints: ; input: ecx is loop counter
    mov eax,0  ; the sum
    jmp .check
    .loopstart:
        add eax,ecx ; add counter to sum
        sub ecx,1 ; decrement counter
        .check:
        cmp ecx,0 ; see if we're done
        jg .loopstart
    ret

这里,"sum_ints“是普通的顶级标签,而.loopstart和.check是本地标签。

.loopstart变成了sum_ints.loopstart,因此您实际上可以从它们的作用域之外引用点标签。(这样,NASM就可以将本地标签放入对象文件的符号表中,而不会发生冲突。)

详细信息在NASM手册:https://www.nasm.us/doc/nasmdoc3.html#section-3.9中作了解释。

本地标签之所以有用,原因与局部变量在其他语言中有用的原因相同:它允许您在不污染全局命名空间的情况下使用简短、合理的名称(如“循环”)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42474854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档