Недопустимая комбинация ошибок кода операции и операндов

Я пытаюсь написать программу, которая берет двоичный ввод из текстового файла и отправляет его как параметр функции сборки. Эта функция сборки должна печатать этот двоичный вход на экране. Вход отправляется из кода c в код сборки по его адресу.

Когда я пытаюсь собрать мой asm файл, я получаю ошибку "неправильная комбинация опкодов и операндов" в строке mov msg, [esp+8]. Я хочу скопировать мой аргумент char из стека в мою статическую переменную. Почему это не действительная инструкция?

Полный код:

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

Интересно, что вы пытались сделать в этой строке:

mov msg, [esp+8]

Но вам не разрешено mov e из памяти в память. Например, эта страница.

Если вы хотите переместить что-то из памяти в память, используйте регистр как временное хранилище. Например:

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