Assembly 错误:操作数后应为逗号、冒号、装饰符或行尾
我正在使用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 %包括“io.inc” 第二节数据 msg:db“你好,世界”,0 msg2:db 13 计数:dw 13 第节.案文 外部打印 全球CMAIN CMAIN: 推ebp 电动汽车 mov-eax,msg mov ebx,计数 电影esi,0 mov edi,0 添加edi,计数 十二月电子数据交换 再一次: mov eax,msg[esi] mov msg2[edi],eax 公司esi 十二月电子数据交换 再次循环 调用printf 电除尘器 流行ebp retAssembly 错误:操作数后应为逗号、冒号、装饰符或行尾,assembly,nasm,x86-64,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
因为这两行不是NASM语法
mov-eax,msg[esi]
几乎被解析为mov-eax,msg
(加载eax
,地址为msg
),但是意外的[esi]
发生,而不是新行
mov-msg2[edi],eax
很难猜测,解析器是什么样子的(mov-immediate,eax
不存在),但也不合法
如果要处理内存值,请将整个地址计算放在括号内,如:
mov eax, [msg+esi]
mov [msg2+edi], eax
有关内存操作数的完整语法,请参阅。,因为这两行不是NASM语法
mov-eax,msg[esi]
几乎被解析为mov-eax,msg
(加载eax
,地址为msg
),但是意外的[esi]
发生,而不是新行
mov-msg2[edi],eax
很难猜测,解析器是什么样子的(mov-immediate,eax
不存在),但也不合法
如果要处理内存值,请将整个地址计算放在括号内,如:
mov eax, [msg+esi]
mov [msg2+edi], eax
有关内存操作数的完整语法,请参阅。出现了什么错误?“it give me this error”不是错误描述。你的问题是什么?错误指示的是哪一行?@fuz错误出现在问题标题中,但一开始我也感到困惑,然后编辑甚至添加了更多代码,而这两行代码在这个特定问题中已经足够了。OP:我快速查看了源代码的其他部分,它看起来像MASM风格,即执行
mov ebx,count
可能期望ebx
加载值13,但在NASM中,内存值必须在括号中,因此这将相反地将内存地址count
存储到ebx
中,而不是内存中的值。不确定您使用的是哪本教程/书,但您可能会在开始时投入更多精力,不仅要学习x86 asm,还要学习识别MASM与NASM(小)语法差异并修复它们,或者您应该切换书本或汇编程序。所有这些选项听起来都不错(甚至可以全部尝试!)。您会遇到什么错误?“it give me this error”不是错误描述。你的问题是什么?错误指示的是哪一行?@fuz错误出现在问题标题中,但一开始我也感到困惑,然后编辑甚至添加了更多代码,而这两行代码在这个特定问题中已经足够了。OP:我快速查看了源代码的其他部分,它看起来像MASM风格,即执行mov ebx,count
可能期望ebx
加载值13,但在NASM中,内存值必须在括号中,因此这将相反地将内存地址count
存储到ebx
中,而不是内存中的值。不确定您使用的是哪本教程/书,但您可能会在开始时投入更多精力,不仅要学习x86 asm,还要学习识别MASM与NASM(小)语法差异并修复它们,或者您应该切换书本或汇编程序。所有这些选项听起来都不错(甚至可以全部尝试!)。