Rastsでアセンブラを書く方法と、レクチャーの再操作の仕方


こんにちは人々!それは少しだった.具体的には2ヶ月程度.しかし、私は戻って、私はまだこのプロジェクトに取り組んでいます.義務的なgithub参照

AshtonSnapp / chasm
現代のコンピュータのための公式セリア十字アセンブラ
抱擁

現代のコンピュータのための公式セリア十字アセンブラ
建物の割れ目
ローカルリポジトリをcdにCHASMディレクトリにクローンし、cargo buildを実行します.簡単!
View on GitHub
そして今あなたがおそらく前に聞いたことのために:私はレクサーを再加工しています.私はlogosクレートから離れていない、心配しないでください.私は、トークン変種とそれらのコールバックのいくつかを実装するより良い方法があると気がつきました、そして、また、アセンブリ演算子で扱う方法を理解する必要があります.
まず、例を挙げましょう.レクサで使用するアドレスは、アドレス型、数値ベース、および符号付き32ビット整数として値を格納したaddressInfo構造体が存在したことです.しかし、私は2つのことを実現しました:最初に、私たちは、ベースの数が何であったかについて覚えている必要はありません、そして、第2に、我々はアドレスタイプで番号タイプを対にすることができます.したがって、相対アドレスはI 16を使用することができますが、絶対アドレスはU 32を使用することができます(U 24タイプがないので).
これはAddressType ENUMを生成しました.そして、それは各タイプがアドレスタイプに従いサイズで変化する整数引数を持っています.これは次のようになります.
pub enum AddressType {
    Absolute(u32),
    IndirectAbsolute(u32),
    ZeroBank(u16),
    IndirectZeroBank(u16),
    DirectPage(u8),
    Port(u16),
    Relative(i16),
    StackRelative(i16)
}
次に、アドレスコールバックである進行中の仕事をします.そのロゴを学習した後、コールバックをトリガーしたテキストを返すだけで、コードはずっと簡単になります.また、棘前接線と棘状接尾辞が錆安定している.それで、私は代用を使用する必要はありません.ああ!
コールバックはかなり単純に動作します.これはトークンのスライスを取り、特定の開始または終了文字のためにそれをチェックします.1つの括弧は例えば間接アドレスである.それがIPかSPかどちらかで始まるならば、それはそれがどんなポインタであるかについて示しているPの前に手紙で相対的なアドレスです.終了Pはポートアドレスを示し、終了Dは直接ページアドレスを示す.そして、$は16進数を示し、%は10進数を示します.シンプル.
このコードはまだ進行中の作品ですが、特定のポイントに到達すると、Githubレポにコミットするつもりです.それまで、Y ' allは素晴らしい一日を過ごす!