バイトの配列(またはその配列へのポインター)を8086アセンブリの関数に渡したい。
そのポインタにしようとするPUSH
と、コンパイルエラーが発生します。エラーは「間違ったパラメータ」です。
org 100h
JMP Start
Donnee DB 0ABh,0CDh,0EFh
;; Principal program ;;
Start:
PUSH Donnee
CALL CalculeCRC
POP CRC
ret
PUSHオペコードは、メモリまたはレジスタのいずれかにDWORD値を期待します。あなたの場合、3バイトの配列をプッシュしようとしています。技術的に言えば、これは有効なコードだと思いますが、アセンブラーは、それが本当に意図したものではないことを認識しています。(バイトの配列に別の要素を追加した場合にコードがアセンブルされるかどうかを確認するのは興味深いかもしれませんが、それは重要ではありません)。
いずれにせよ、あなたがやろうとしていることは、あなたがしたいことではありません。関数を呼び出す前に、配列へのポインタをスタックにプッシュする必要があります。配列全体をスタックにプッシュしようとしているのではありません。アセンブラがあなたに許可したとしても、それはメモリの浪費になるので、これは非常に悪いことです。やりたいことを行うには、配列のアドレスを取得してスタックにプッシュする必要があります。LEAを使用して、アレイの「実効アドレス」を取得できます。
lea eax, Donnee
push eax
あなたの次のことができます:
push OFFSET Donnee
私は確かに8086の専門家ではありませんが、PUSH命令を読んで、それが本当にあなたが期待することを実行できることを確認します。
非常に簡単なチェックから、レジスタが必要だと思います。そのため、最初にアドレスをレジスタにロードしてから、レジスタをプッシュする必要があります。
おそらくこのようなもの:
lea ax, Donnee
push ax
ここで句読点や引数の順序付けエラーが発生する可能性があります。私は8086アセンブラを手元に持っていません。