問題タブ [nand2tetris]
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.
hdl - 「Nand to Tetris」コースで ALU の出力フラグを設定するにはどうすればよいですか?
この宿題にタグを付けましたが、実際には無料で自分でやっているコース用です。とにかく、このコースは「ナンドからテトリスへ」と呼ばれており、誰かがこのコースを見たり受講したりしているので、助けが得られることを願っています. 提供された hdl 言語で ALU を構築している段階です。私の問題は、チップを適切にコンパイルできないことです。ALU の出力フラグを設定しようとすると、エラーが発生します。問題は、中間変数に添字を付けられないことだと思います。これは、ランダム変数(入力フラグなど)に基づいてフラグをtrueまたはfalseに設定しようとすると、エラーが発生しないためです。すべての組み込みチップを使用しているため、使用しようとしているチップに問題がないことはわかっています。
これまでのところ、私のALUチップは次のとおりです。
そのため、'out' の添字付きバージョンを Or8Way チップに送信しようとすると、問題が発生します。「out」とは異なる変数を使用してみましたが、同じ問題があります。次に、中間変数に添字を付けることができないことを読みました。中間変数を他のチップに送信し、そのチップに添字を付ければ問題は解決するのではないかと思いましたが、同じエラーが発生しました。残念ながら、中間変数に添え字を付けずに zr フラグと ng フラグを設定する方法が思い浮かびません。
ご存知のように、問題のある行を次のように置き換えると、コンパイルされます (ただし、ランダムな入力を使用しているだけなので、正しい結果は得られません)。
誰にもアイデアはありますか?
編集:これは、hdlの仕組みを指定するコースの本の付録です。具体的には、バスについて説明しているセクション 5 を見てください。
編集:ここに私が得る正確なエラーがあります:「68行目、ゲートの出力ピンをパーツに接続できません」。ただし、実際の問題ではないように見えるため、エラーメッセージはやや混乱しています。「Or8way( in=out[0..7], out=zr1 );」を置き換えるだけなら 「Or8way( in=false, out=zr1 );」で このエラーは生成されないため、付録を調べたところ、 out 変数は中間として導出されたため、添え字を付けることができませんでした。
assembly - ジャンプなしでアセンブリに eq, lt gt を実装する
AND、OR、および NOT 演算子のみを使用して 2 つのオペランドを比較し、ジャンプを使用せずに true/false (-1、0) を返すロジックを作成することは可能ですか? もしそうなら、私には不可能に見えるので、ヒントを教えてください。本「The Elements of Computing Systems」のアセンブリ言語でeq、lt、およびgtを実装しようとしています。
assembly - nand 2 tetris ASM「式が必要です」
現在、 Nand から Tetris へのコース ( )の第 4 章にあるプロジェクトを完成させようとしていFill.asm
ます。ただし、アセンブラーで次のエラーが表示されます。
「3行目、式が必要です」
何が間違っているのかわかりません...しかし、以下は私が持っているコードのスニペットです:
3 行目 ( ) でこのエラーが発生する理由を誰か教えてもらえます@sum
か?
hdl - DMux 4ウェイの何が問題になっていますか?
動作に近いように見えますが、7行目で混乱しているようです。
私はDMuxを次のように実装し、それをツリーのように使用しています。
nand2tetris - Jackで2つの配列を比較する方法(Nand2Tetrisのコース)?
コース Nand2Tetris で 2 つの配列を比較する必要があります
しかし、リターンは良くありません!!!
algorithm - Hack Assembly 言語の 'eq' のインタープリターを作成するにはどうすればよいですか?
The Elements of Computing Systems を読んで勉強していますが、ある時点で立ち往生しています。次の 5 つの命令をスキップする章のサンプルは、ここにあります。
とにかく、私は仮想マシン (またはアセンブリ トランスレータへのバイト コード) を実装しようとしていますが、次の 5 つの命令を 1 点スキップすることで立ち往生しています。
アセンブリ表記については、こちらを参照してください。
目標は、特定のバイト コードをこのアセンブリ コードに変換するトランスレータを実装することです。
私が成功した例は、バイトコードです
これは次のように翻訳されます。
私が言ったように、Hack のアセンブリ言語は私が提供したリンクにありますが、基本的には次のとおりです。
さて、これはかなり簡単でした。定義により、メモリ位置 256 はスタックのトップです。そう
に翻訳されます:
これはすべて問題ありません..
また、もう 1 つ例を挙げたいと思います。
は次のように翻訳されます。
かなり明確だと思います。
ただし、バイトコードをどのように変換できるかわかりません
アセンブリへ。eq の定義は次のとおりです。
コマンドのうち 3 つ (eq、gt、lt) はブール値を返します。VM は、true と false をそれぞれ -1 (マイナス 1、0xFFFF) と 0 (ゼロ、0x0000) として表します。
したがって、レジスタ A と D にそれぞれ 2 つの値をポップする必要がありますが、これは非常に簡単です。しかし、値をチェックして結果が true の場合は 1 をプッシュし、結果が false の場合は 0 をプッシュするアセンブリ コードを作成するにはどうすればよいでしょうか?
Hack Computer でサポートされているアセンブリ コードは次のとおりです。
私は次のようなことができます:
スタックにプッシュされた 2 つの値が等しい場合は値 0 を保持し、そうでない場合は !0 を保持しますが、それはどのように役立ちますか? D&AまたはD&Mを使用してみましたが、どちらもあまり役に立ちませんでした..
条件付きジャンプを導入することもできますが、ジャンプ先の命令をどのように知る必要があるのでしょうか? Hack Assembly コードには、「次の 5 つの命令をスキップする」などのようなものはありません。
[Spektre による編集] 私が見たターゲット プラットフォームの概要
- 16 ビット フォン ノイマン アーキテクチャ (アドレスは 15 ビット、16 ビット ワード アクセス)
- データメモリ 32KW (読み取り/書き込み)
- 命令 (プログラム) メモリ 32KW (読み取り専用)
- ネイティブ 16 ビット レジスタ A、D
- 0x0000 ~ 0x000F のデータ メモリにマッピングされた汎用 16 ビット レジスタ R0 ~ R15
- これらは、次の目的にも使用される可能性が最も高いです。
SP(R0),LCL(R1),ARG(R2),This(R3),That(R4)
- 画面は 0x4000-0x5FFF (512x256 B/W ピクセル 8KW) のデータ メモリにマップされます。
- キーボードは 0x6000 のデータ メモリにマップされます (最後にキーを押した場合は ASCII コード?)