Я пытаюсь написать программу, которая берет двоичный ввод из текстового файла и отправляет его как параметр функции сборки. Эта функция сборки должна печатать этот двоичный вход на экране. Вход отправляется из кода 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
'mov msg, [esp + 8]' что вы думаете, что это делает? И это 'msg resb 0'? И имеет ли 'edx' равный фиксированному 31? Таким образом, код C всегда будет отправлять 31+ символов? – Ped7g
BTW, если это действительно двоичные данные, в нем будут непечатаемые символы, что не очень хорошо работает в Linux, поэтому, возможно, вам захочется выполнить некоторую обработку над ними, чтобы изменить непечатаемые значения на ''.'', или для печати шестнадцатеричных значений вместо самих байтов. (поэтому из данных '' '' (тройное пространство) вы будете печатать '' 20 20 20 "') – Ped7g