错误:逗号,冒号,装饰器或操作数后预期的行尾

时间:2017-11-02 11:04:00

标签: assembly nasm x86-64

我正在使用NASM,x86并且它给了我这个错误,我不明白为什么

%include "io.inc"
section .data
 msg: db "hello world",0 
 msg2: db 13
 count: dw 13
section .text
extern printf
global CMAIN

CMAIN:
        push ebp
        mov ebp,esp
        mov eax,msg
        mov ebx,count
        mov esi,0
        mov edi,0
        add edi,count
        dec edi

   again:
            mov eax, msg[esi]
            mov msg2[edi],eax
            inc esi
            dec edi
            loop again

            call printf






        mov esp,ebp
        pop ebp
        ret

1 个答案:

答案 0 :(得分:1)

因为这两行不是NASM语法。

mov eax, msg[esi]几乎被解析为mov eax,msg(加载eax,地址为msg),但后来发生意外的[esi]而非新行。< / p>

mov msg2[edi],eax很难猜测,解析器(mov immediate,eax不存在)是什么样的,但是没有任何合法的。

如果要使用内存值,请将整个地址计算放在括号内,例如:

        mov eax, [msg+esi]
        mov [msg2+edi], eax

有关内存操作数的完整语法,请参阅NASM documentation - 3.3 Effective Addresses