問題タブ [lc3]
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.
lc3 - 私は初心者のプログラマーで、LC3 アセンブリーで戦艦プログラムを設計したいと考えています。
ゲームの表示グリッドを表示する際にアルゴリズムを開始する方法や場所がよくわかりません。
assembly - LC-3 .BLKW 仕組み
解決しました!
ユーザーが必要なすべての文字を入力するのを待ってから、Enter キーを押した後にのみモニターに出力することになっている LC-3 のアセンブリでプログラムを作成しています。
ユーザーが入力ボタンのみを押すと、問題を解決することができました。例:
Enter キーを押します ---> プログラムは正常に動作します。(改行して停止)
「ABCDEF」を押します ---> プログラムは、改行して ABCDEF を表示する代わりに「F」を表示します。解決済み
.BLKW は、メモリのブロックを保存することになっています。SO この問題を解決するには、.blkw をレジスタにロードし、新しい文字値をそのレジスタに格納し、格納場所を更新して次の場所に移動する必要がありました。
assembly - アセンブリ内の特定のアドレスの値を変更する
LC-3でアセンブリを書いています。特定のアドレスを指すレジスタ R1 があります。そのアドレスの値を 0 に変更するにはどうすればよいですか? 残念ながら、これは本当にすぐに期限が切れるので、迅速な助けをいただければ幸いです! ありがとう!
PS: LC-3 がわからない場合は、15 の命令があります: ADD、AND、BR、JMP、JSR、JSRR、LD、LDI、LDR、LEA、NOT、RET、RTI、ST、STI、STR、トラップ
assembly - サブルーチン内からTRAPルーチンを使用しますか?-LC3アセンブリ
これで、文字を要求し、それを読み取り、エコーし、それを4回繰り返してから、それらの文字を連続した文字列に出力するアセンブリプログラムを終了しました。次に、サブルーチン(クラスではまだ学習していません)を試してみたかったので、次のサブルーチンを作成して、コンソールに改行文字を出力しました。
次のように「呼び出され」ます。
これを実行した後、私は何か奇妙なことに気づきました。プログラムは、への最初の呼び出しの後に停止したように見えましたPRINT_NEWLINE
。次に、TRAPが次の命令のアドレスを保存することに気付きました。この場合はRET
、R7
サブルーチンのリンクに使用されるレジスタです。これにより、によって保存されたアドレスが上書きさR7
れJSR
ます。したがって、停止しているように見える理由は、TRAP
ルーチンが終了した後、それが私のRET
命令をロードするためです。これは、実際にはTRAP
、PCカウンターをそれ自体に変更するためです。無限ループのようなものです。
それはすべて素晴らしいことであり、何が起こっているのかは理解していますが、システム命令TRAP
を使用しながら、サブルーチン内でシステムルーチンを使用できる方法はありますか?JSR
もちろん、呼び出し後の命令のアドレスを別のレジスタに手動で格納し、サブルーチンJSR PRINT_NEWLINE
の最後にそのレジスタのアドレスに格納することもできます。PRINT_NEWLINE
JMP
しかし、それは私には間違っているように思えます。私はプログラマーなので、怠け者であり、他の人の労力の成果を楽しんで、との組み合わせを使用したいと思っていJSR
ますRET
。
TRAP
では、サブルーチン内のルーチンを呼び出してもRET
、そのサブルーチンから「戻る」ために使用することは可能ですか?これをどのように達成しますか?
ありがとう!
assembly - lc3-実行する複数のソースファイルをロードする
で作業しているので、特定のドライバーを実行するLC3
ためのを構築する割り当てが与えられました。この時点でライブラリを作成しましたが、とlibrary functions
をよく読んでも、ライブラリとドライバを同時にシミュレータメモリにロードして一緒に実行する方法がわかりません。McGraw book
dreadfully-lacking-in-this-subject Google
誰かがこれを達成する方法についてのノウハウを持っていますか?
assembly - 2 進右シフト、加算のみを指定
私はメモリの場所を読み取っていて、それらの 16 進値を ASCII で出力する必要があるプロジェクトに取り組んでいます。
この言語では 16 ビットの語長が得られるため、一度にニブルを取得して 16 進数に変換するために分割する必要があります。残念ながら、この言語は数学/論理関数に対して and、or、not、および add のみを提供します。
左にシフトし、負のフラグをテストしてシフト後に最後に 1 を追加することで、目的の効果を作成できると考えましたが、これを行うためのより良い方法が必要であると考えています。
任意の洞察をいただければ幸いです。
assembly - アセンブリ LC-3 に文字列を保存する
LC-3 アーキテクチャを使用して簡単なプログラムを作成しようとしています。私がやろうとしているのは、コンソールから文字列を読み取り、何らかの方法でメモリに保存してから、再度出力することだけです。
これは私がこれまでに持っているものです
出力には、文字列の最後の文字のみが表示されます。「steve」と入力すると、「e」が出力されます
明らかに私の問題は、読み込んだ各文字を独自のメモリ位置に保存する必要があることです。.blkw を使用するとこれが行われると思っていましたが、明らかにその位置にあるビットを上書きします。
私の質問は、文字を連続したメモリ位置に保存してからコンソールに出力する方法です。
rotation - 右回転操作、LC3 シミュレーター
私は LC3 シミュレーター用のルーチンを作成しています。Shift Right ルーチンは正常に作成されましたが、Rotate Right ルーチンに行き詰まっています。ビットを右に移動する必要があり、右に移動するたびに最下位ビットが最上位ビットにコピーされます。AND、NOT、ADD 操作、データ移動操作、値を格納するための 7 つのレジスタ、およびメモリの全範囲があります。それをどのように実装できるか、いくつかの基本的なアイデアが必要です。
if-statement - LC-3 If/Else ステートメント
if
この LC-3 プログラムに問題があります。/else
ステートメントから表示する文字列を取得できません。ステートメントが間違っているのか、文字列を間違って表示しているのかわかりません。目標はIF
、ユーザーが入力0
したときに を表示し、else
入力したときに (プログラムを停止) を表示すること1
です。