Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 错误:操作数后应为逗号、冒号、装饰符或行尾_Assembly_Nasm_X86 64 - Fatal编程技术网

Assembly 错误:操作数后应为逗号、冒号、装饰符或行尾

Assembly 错误:操作数后应为逗号、冒号、装饰符或行尾,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,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 ret
因为这两行不是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(小)语法差异并修复它们,或者您应该切换书本或汇编程序。所有这些选项听起来都不错(甚至可以全部尝试!)。