NASM中内联使用标签地址报错问题求助
NASM中正确使用标签地址的方法
你的错误根源是:单独写do_PLUS的行被NASM误认为是重新定义标签——NASM默认会把行首无指令前缀的标识符当作新标签,这就触发了"inconsistently redefined"错误,同时"label alone on a line without a colon"警告也明确指出这行语法不符合要求。
在NASM中,标签名本身就代表它的内存地址,直接将其作为指令的操作数即可。比如你想把do_PLUS的地址压入栈,正确代码应该是:
; _Plus: DB 1, "+" do_PLUS: POP EDX ADD EDX , ESP MOV EDX , ESP ; _COLON: PUSH do_PLUS ; 直接用标签名引用其地址,作为PUSH指令的操作数 PUSH $ ;
如果需要将标签地址加载到寄存器,示例写法如下:
MOV EBX, do_PLUS ; 将do_PLUS的地址存入EBX寄存器
核心规则:不要单独写标签名,必须把它放在合法的指令操作数位置,NASM才会解析为引用标签的地址,而不是试图定义新标签。
内容的提问来源于stack exchange,提问作者FJRusso
相关产品推荐
相关产品推荐

