Label NASM x86_64,重新定义标签

Label NASM x86_64,重新定义标签,label,nasm,Label,Nasm,我的目标是在Nasm代码的.data部分重新定义现有标签 预期的结果应该是现有内存标签被相同的过程覆盖 出现的错误消息如下: exp3.asm:230: error: comma, colon, decorator or end of line expected after operand exp3.asm:191: ... from macro `var' defined here exp3.asm:230: warning: character constant too long ex

我的目标是在Nasm代码的.data部分重新定义现有标签

预期的结果应该是现有内存标签被相同的过程覆盖

出现的错误消息如下:

exp3.asm:230: error: comma, colon, decorator or end of line expected after operand

exp3.asm:191: ... from macro `var' defined here

exp3.asm:230: warning: character constant too long

exp3.asm:191: ... from macro `var' defined here

exp3.asm:230: error: parser: instruction expected

exp3.asm:195: ... from macro `var' defined here

exp3.asm:231: error: comma, colon, decorator or end of line expected after operand

exp3.asm:191: ... from macro `var' defined here

exp3.asm:231: error: symbol `test' redefined

exp3.asm:195: ... from macro `var' defined here

exp3.asm:231: error: parser: instruction expected

exp3.asm:195: ... from macro `var' defined here
我试图改变词类,但这只是使问题复杂化,而不是解决问题

所需的宏:

%macro ifexis 3
    push rax ; make room
    mov rax, %1 ; platziere wert in Vergleichsregister
    test rax, rax ; wenn werte gleich oder nicht leer
    jz [%2] ; Gehe zu erfolg
    jmp [%3] ; gehe zu fail
    pop rax ; clear rax
%endmacro
通过将内容加载到RAX中,然后相互测试来检查该值是否存在

    %macro var 2
        ifexis %1, %%overwrite, %%establish  ;<--------------------------------------- Für gleiche labels muss eine lösung gefunden werden
        %%overwrite: ;<---------------------------------------------------------------
        mov db[%1], %2 ;<-------------------------------------------------------------
        jmp %%end;<-------------------------------------------------------------------
        %%establish:;<----------------------------------------------------------------
        section .data
        %1: db %2
        ;db 0
        section .text
        %%end:
%endmacro

欢迎学习汇编程序的任何传统来源

什么是
mov db[%1],%2
应该是什么意思?在任何情况下,我在NASM手册中都没有看到任何东西表明您正在尝试的操作是受支持的。你为什么需要这个呢?它应该得到mem地址,然后覆盖它,我调整了它你是对的错误:逗号,冒号,修饰符或行尾,在操作数现在被解决之后,应该是,但现在覆盖仍然显示在nasm中
section .text 
global _start
_start:
 var test, "a"
 var test, "b"