3
テキストファイルからバイナリ入力を受け取り、パラメータとしてアセンブリ関数に送信するプログラムを作成しようとしています。アセンブリ関数は、このバイナリ入力を画面に出力する必要があります。入力は、そのアドレスによってcコードからアセンブリコードに送信されます。オペコードとオペランドの組み合わせが正しくありません
私のasmファイルをアセンブルしようとすると、mov msg, [esp+8]
行に「オペコードとオペランドの無効な組み合わせ」エラーが発生します。 char
argをスタックから静的変数にコピーしたいと思います。それはなぜ有効な指示ではないのですか?
完全なコードは次のとおりです。
mov msg, [esp+8]
しかし、あなたは、メモリからメモリへのmov
Eに許可されていません。
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
本当にバイナリデータであれば、印字不可能な文字が含まれていますが、これはLinuxではうまくいきません。そのため、印刷できない値を ''。 ''に変更したり、バイト自体ではなく16進値を出力する。 (データ '' "(' 3重スペース)から '20 20 20' 'を印刷します) – Ped7g