1

バイトの配列(またはその配列へのポインター)を8086アセンブリの関数に渡したい。

そのポインタにしようとするPUSHと、コンパイルエラーが発生します。エラーは「間違ったパラメータ」です。

org 100h

JMP Start  

Donnee DB 0ABh,0CDh,0EFh  

;; Principal program ;;
Start:

PUSH Donnee

CALL CalculeCRC  

POP CRC 

ret
4

2 に答える 2

2

PUSHオペコードは、メモリまたはレジスタのいずれかにDWORD値を期待します。あなたの場合、3バイトの配列をプッシュしようとしています。技術的に言えば、これは有効なコードだと思いますが、アセンブラーは、それが本当に意図したものではないことを認識しています。(バイトの配列に別の要素を追加した場合にコードがアセンブルされるかどうかを確認するのは興味深いかもしれませんが、それは重要ではありません)。

いずれにせよ、あなたがやろうとしていることは、あなたがしたいことではありません。関数を呼び出す前に、配列へのポインタをスタックにプッシュする必要があります。配列全体をスタックにプッシュしようとしているのではありません。アセンブラがあなたに許可したとしても、それはメモリの浪費になるので、これは非常に悪いことです。やりたいことを行うには、配列のアドレスを取得してスタックにプッシュする必要があります。LEAを使用して、アレイの「実効アドレス」を取得できます。

lea eax, Donnee
push eax

あなたの次のことができます:

push  OFFSET Donnee
于 2011-02-23T15:03:57.137 に答える
0

私は確かに8086の専門家ではありませんが、PUSH命令を読んで、それが本当にあなたが期待することを実行できることを確認します。

非常に簡単なチェックから、レジスタが必要だと思います。そのため、最初にアドレスをレジスタにロードしてから、レジスタをプッシュする必要があります。

おそらくこのようなもの:

lea  ax, Donnee
push ax

ここで句読点や引数の順序付けエラーが発生する可能性があります。私は8086アセンブラを手元に持っていません。

于 2011-02-23T14:56:09.897 に答える