15

私が構築した CPU アーキテクチャ用のアセンブラを構築する必要があります。アーキテクチャは MIPS に似ていますが、これは重要ではありません。

私は C# を使い始めましたが、C++ の方が適切でしょう。(C# は私にとって開発時間の短縮を意味します)。

私の唯一の問題は、このアプリケーションに適した設計ができないことです。私は2パスアセンブラを構築しています。各パスで何をする必要があるかはわかっています。\

私は最初のパスを実装しましたが、アセンブリ コードを同じ行に並べる必要がある場合、エラーは発生しないことに気付きました。

ですから、全能のプログラマー、アセンブラーの父たちは、私がどのように進めればよいかを教えてくれます。シンボルとデータ宣言をサポートする必要があるだけです。命令は固定サイズです。

さらに情報が必要な場合はお知らせください。

4

4 に答える 4

14

私は 3 つまたは 4 つの単純なアセンブラを作成しました。パーサー ジェネレーターを使用せずに、6502 で最もよく知っているSC アセンブラーをモデル化しました。

これを行うために、単純な構文を使用しました。行は次のいずれかです。

nothing
[label] [instruction] [comment]
[label] [directive] [comment]

ラベルは、1 文字の後に任意の数の文字または数字が続くものでした。

命令は <空白><ニーモニック> [オペランド] でした

ディレクティブは <空白>.XX [オペランド] でした

コメントは行末まで * でした。

オペランドは、命令とディレクティブに依存していました。

定数を定義するためのディレクティブが含まれています。

.OR コードの起点アドレスを設定

.HS バイトの 16 進文字列

.AS ascii バイト文字列 - 空白を除く任意の区切り文字 - 始まりと終わり

出力用の .TF ターゲット ファイル

.BS n n バイトの予約ブロック ストレージ

私がそれを書いたとき、私は各コ​​ンポーネントの簡単なパーサーを書きました。ラベルに遭遇するたびに、それをターゲットアドレスのテーブルに入れました。知らないラベルに遭遇したときはいつでも、その命令を不完全としてマークし、修正が必要な命令への参照とともに不明なラベルを付けました。

すべてのソース行が通過した後、「修正する」テーブルに目を通し、シンボル テーブルでエントリを見つけようとしました。見つかった場合は、指示にパッチを当てました。そうでない場合は、エラーでした。

命令名とオペランドのすべての有効なアドレッシング モードのテーブルを保持しました。命令を受け取ったとき、何かが機能するまで、各アドレッシング モードを順番に解析しようとしました。

この構造を考えると、すべてを実行するには 1 日から 2 日かかるはずです。

于 2008-12-21T20:15:59.023 に答える
5

Randy Hyde の著名な「The Art of Assembly Language」の著者によるこの Assembler Development Kit を見てください。

アセンブラ開発者キット

于 2008-12-21T20:10:43.467 に答える
2

2 パス アセンブラーの最初のパスでは、コードをアセンブルし、シンボルのプレースホルダーを配置します (アセンブラーを実行するまで、すべての大きさがわからないため)。2 番目のパスはアドレスを入力します。アセンブルされたコードを後で外部参照にリンクする必要がある場合、これは同名のリンカの仕事です。

于 2008-12-21T20:10:50.330 に答える
1

正常に動作し、マイクロコントローラにロードする 16 進ファイルを吐き出すアセンブラを作成する場合は、単純で簡単です。私の ciforth ライブラリの一部は、約 150 行のインライン定義を追加する完全な Pentium アセンブラです。数十行の 8080 用のアセンブラがあります。

原則はhttp://home.hccnet.nl/awmvan.der.horst/postitfixup.htmlで説明されています。黒板のデザインパターンを問題に当てはめることになります。命令を配置することから始めて、すべてのオペランドに穴を残します。次に、パラメーターに遭遇したら、穴を埋めます。
汎用ツールと命令セットは厳密に分離されています。

必要なアセンブラが自分用であり、ユーザビリティ以外の要件がない (宿題ではない) 場合は、http://home.hccnet.nl/awmvan.der.horst/forthassemblyr で実装例を使用できます。 html . Forth が気に入らない場合は、Perl での実装例もあります。Pentium の命令セットが難しすぎる場合でも、原理と一般的な部分を理解できなければなりません。最初にasi8080.frtファイルを確認することをお勧めします。これは 389 WOC (コードの行ではなくコードの語) です。命令セットに精通した経験豊富な Forther は、そのようなアセンブラーを一晩で完成させることができます。Pentiumは雌犬です。

于 2012-05-04T13:34:58.970 に答える