問題タブ [dcpu-16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - DCPU-16 の I レジスタと J レジスタは特殊ですか?
DCPU-16 にはA, B, C, X, Y, Z, I
、 およびという名前の 8 つの汎用レジスタが含まれていJ
ます。ループ カウンターI
を使用するのは、ちょっとしたプログラマーの "トロープ"です。J
DCPU-16 では、ループでのみ使用する必要がある特殊なレジスタがI
ありJ
ます。それとも、最終的にはすべて同じ色になりますか?
assembly - DCPU-16スペックの組み立て例の1行目はどうやって理解するの?
仕様を理解しようとしていますが、与えられた例の最初の行を理解できません:
スペックからわかったことは以下のとおりです。
- 最初のワード (7c01) は命令を完全に定義します
- 演算子はコマンドである 0x1 です
SET a, b
- b = 111100 = 0x3C (Hex に変換すると) = リテラル値 0x3C
- a = 000000 = レジスタ A
だから私はSET A、0x3Cとして命令を理解しています
誰が私が間違っているのかアドバイスできますか?
dcpu-16 - [PC]に書き込めますか?
DCPU 仕様によると、SET
命令が失敗するのは、a
値がリテラルの場合のみです。
それで、次のように動作しますか?
より便利なバージョンは のオフセットを設定するPC
ため、かなり奇妙な無限ループは次のようになります。
scheme - このコードに適したRacket/Schemeイディオムは何ですか?
私はラケット/スキームに慣れていないので、単純な16ビットプロセッサであるDCPU-16用のエミュレーターを実装することによって学ぶことにしました。
したがって、私の質問は次のとおりです。私のソリューションを実装するためのより良い方法は何ですか?
これは、CPUのレジスタを制御するために一緒にハッキングしたソリューションです。重要な点は、レジスタを変更する関数をチェーン化できるようにすることでした。例えば:
私の登録ソリューションの全文は以下のとおりです。私の完全なプログラムもgithubにあります。繰り返されるロジックは非常に多いので、もっと簡単な方法があるはずです。
アップデート:
oobviatの推測のおかげで、リストを使用してリファクタリングしました。唯一注意が必要なのは、リストの値を更新することでした。目的のレジスタを更新し、他のレジスタを元の値のままにするマップの手順を作成しました。
dcpu-16 - DCPU-16 アセンブラ 'dat' は、1 文字あたり 1 バイトまたは 1 ワードを生成することになっている文字列を使用していますか?
かどうかは私には明らかではありません
dat "Hello"
5ワードまたは3ワードを生成することになっています(1バイトのパディング付き)
assembly - DCPU-16FizzBuzzの最適化
DCPU-16にFizzBuzzを実装してみました。私はこのWebエミュレーターを使用しています:http://mappum.github.com/DCPU-16/(リポジトリー:https ://github.com/mappum/DCPU-16 )。
ループが終了する前に停止します。なんで?
どうすれば最適化できますか?私はasmについて何も知らない高級言語プログラマーです。これに関する基本的なリソースはありますか?
DCPU-16の詳細:公式仕様:http://0x10c.com/doc/dcpu-16.txt-非公式仕様: http: //0x10.cc/
コード:
c - さまざまなメモリ アドレッシング スキームに対する C コードの移植性
私の理解が正しければ、0x10c のDCPU-16 仕様は、他のほとんどのメモリ アーキテクチャのようにバイトではなく、各オフセットが 16 ビット ワードをアドレス指定する 16 ビット アドレス空間を記述しています。これにはいくつかの奇妙な結果があります。sizeof(char)
sizeof(short)
1
このような異なるメモリ アドレッシング スキーム間で C コードの移植性を維持することは可能ですか? 覚えておくべき落とし穴は何ですか?
編集:おそらく、より具体的な例を挙げるべきでした。バイト ストリームを処理するネットワーク コードがあるとします。コードを同じままにできるように、各アドレスに 1 バイトだけを配置してメモリの半分を破棄しますか?それとも、オフセットごとに N バイトを処理するためにビットシフトですべてを一般化しますか?
edit2:答えはデータ型のサイズの問題に焦点を当てているようですが、それは重要ではありませんでした-言及するべきではありませんでした。問題は、ポインタを使用してメモリ内の任意のバイトをアドレス指定できなくなったことにどう対処するかということです。コードがこれにとらわれないことを期待するのは合理的ですか?
assembly - DCPU-16DIV命令
DCPU-16の仕様を見ていますが、DIV命令でオーバーフロー値の目的を理解するのに問題があります。
DIV a、b-aをa / bに設定し、Oを((a << 16)/ b)&0xffffに設定します。
ここでOの意味的な意味を誰かが説明できますか?それは何に役立つでしょうか?
cryptography - DCPU-16 用のストリーム暗号を作成していますが、制限があるため、どれに焦点を当てる必要がありますか?
楽しみのために、 DCPU-16 (ゲーム0x10 cの架空の CPU)のアセンブリでストリーム暗号を作成しています。プロセッサには 16 ビットのレジスタしかなく、100 Khz で動作します。ただし、現時点では、メモリ アクセスと乗算や除算などは非常に高速です ( DIV
2 つの間接メモリ アクセスを使用する場合、5 サイクルしかかかりません)。
このような制約がある場合、私の最善の選択肢は何でしょうか? 私は RC4 を検討していましたが、私のコードを使用している他の人が正しく使用できず、別の WEP 災害が発生する可能性があることを懸念しています。他のプログラマーを自分たちから守るために、RC4 よりも複雑なことを行う必要があると感じていますが、最小単位として 16 ビット ワードではなく 8 ビット バイトを期待するマジック ナンバーまたは事前計算されたテーブルを使用するアルゴリズムについて懸念しています。
assembly - DCPU-16命令のバイナリ表現に先頭の1があるのはなぜですか
私は現在、DCPU-16アセンブラをいじっています(http://0x10c.com/doc/dcpu-16.txtおよびhttp://jazzychad.net/dcpu.htmlを参照)。
アセンブラ命令が16進数/バイナリに変換される方法で私が理解していないことが1つあります。
例として、次のような命令を取ります
これは、レジスタBの値を10進数の2(または16進数の0x0002または2進数の0b000010)に設定することになっています。
DCPU-16の命令フォーマットは
したがって、下端のオペコード用に4ビット、最初の値用に6ビット、2番目の値用に6ビットです。
命令を手動で変換する場合、これが私が行う方法です。
完全な命令で終わる
ただし、DCPU-16の正しい値は次のとおりです。
つまり、先頭に1が追加されます-それはなぜですか?
私はアセンブラーやその他のハードコアな低レベルのマシン命令にまったく慣れていないので、これが非常に愚かな質問である場合はご容赦ください。