2017-05-26 5 views
-1

私は組み込みアプリケーション用の仮想マシンで動作する単純なソフトCPUをC言語で書こうとしています。私はこれに新しいので、私と一緒に熊。仮想マシンのソフトCPUを書き込むためのパーティション化されたメモリ

私はこれをIDEで実行しようとしていましたが、メモリをmallocする必要があり、レジスタを割り当てるための一貫したメモリアドレスが得られないという問題が発生しました。デバッグ。実際のハードウェアでは、ドキュメントによって特定のレジスタ、メインメモリ、およびハードディスクのアドレスが正しいことがわかりました。私は私のレジスタのマクロを定義して読み書きできるようにしたいと思っていますが、静的メモリアドレスがなければ不可能です。

これは、静的アドレスを持つ静的なチャンクをIDEまたはテキストエディタを使用して自分のマシンに割り当てるのに適しているようです。これを行う最善の方法は何でしょうか?参考までに、私はCloud9 IDEを使用していますが、このプラットフォームでそれを行う方法を理解することはできません。

ありがとうございます!

+1

あなたは間違っていると思っています...あなたの仮想CPU上で実行されているコードは、I/Oレジスタなどの固定アドレスを必要とするかもしれません。あなたのコードは*アドレスを翻訳することになっています。例えば。 RAMの場合、 'malloc'で割り当てられたチャンクにオフセットとして使うことができます。 –

答えて

1

​​のような処理を行い、戻り値を確認してから、すべてのマシンアドレスのインデックスをaddress_space[dest] = register[src];のようにする必要があります。エミュレートされたCPUが異なるサイズのデータ​​を処理できる場合や、ホストCPUよりも厳密な配置制限がない場合は、memcpy()またはポインタキャストを使用してデータを転送する必要があります。

デバッガは、address_spaceが静的​​または動的に割り当てられるかどうかを理解しますが、正確に65536の16ビットアドレスを持つマシンをエミュレートするなど、正確なサイズを事前に知っている場合は静的に割り当てることができます。 RAMのバイト。

+0

これは完璧です、私は配列のようなmalloc'dメモリのチャンクを扱うことができたとは思いませんでした。ありがとう! – Davigor

関連する問題