我正在使用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
答案 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。