操作码和操作数错误的组合错误

时间:2016-10-10 12:19:05

标签: assembly x86 nasm

我正在尝试编写一个程序,该程序从文本文件中获取二进制输入并将其作为参数发送到汇编函数。该汇编函数必须将此二进制输入打印到屏幕上。输入通过其地址从c代码发送到汇编代码。

当我尝试组装我的asm文件时,mov msg, [esp+8]行出现“操作码和操作数无效组合”错误。我想将我的char arg从堆栈复制到我的静态变量。为什么这不是一个有效的指令?

完整的代码是:

segment .data
        len equ 31
segment .bss
        msg resb 0
segment .text
global sequence_generator

sequence_generator:

       push ebp
       mov ebp, esp
       mov msg, [esp+8]

       mov eax,4
       mov ebx,1
       mov ecx,msg
       mov edx,len
       int 80h

       pop ebp
       ret

1 个答案:

答案 0 :(得分:4)

我想知道你在这行中尝试过什么:

mov msg, [esp+8]

但是你不允许mov从记忆到记忆。例如,请参阅this页面。

如果要将某些内容从内存移动到内存,请使用寄存器作为临时存储。例如:

mov eax, [var1]
mov [var2], eax