問題タブ [sic]
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.
c++ - SIC Assembler ソースのトークン化
システム プログラミング クラス用の SIC アセンブラーのコーディングはほぼ完了しましたが、トークン化の部分で困惑しています。
たとえば、次のソース コード行を見てください。
形式 (自由形式) は次のとおりです。 {LABEL} OPCODE {OPERAND{,X}} {COMMENT}
カールは、フィールドがオプションであることを示します。
また、各フィールドは少なくとも 1 つのスペースまたはタブで区切る必要があります。
上記のコードは整理するのが少し簡単ですが、次のスニペットが問題を引き起こしています。
私のコードは、コメントの最初の単語を OPERAND であるかのように読み取ります。
これが私のコードです:
私の教授は、アセンブラを 2 つのバージョンのソース コード (エラーのあるバージョンとないバージョン) でテストするように要求しています。
RSUB OPCODE は OPERAND に依存していないため、RSUB OPCODE の後のすべてがコメントと見なされることは理解していますが、誤ったソース コードの OPERAND フィールドに値が含まれている場合、または OPERAND に依存する OPCODE が欠落している場合OPERAND 値、どうすればこれを補正できますか? これらにエラーとしてフラグを立て、誤った OPERAND 値 (またはその欠如) を出力する必要があります。
私の質問は、コードのコメント部分がオペランドと見なされないようにするにはどうすればよいですか?
assembly - n、i、x、および e ビット設定 (SIC/XE) を識別する方法は?
System Software クラスのプロジェクトがあり、ソース行をラベル、オペコード、オペランド 1、オペランド 2 の 4 つのコンポーネントに分解し、n、i、x、および e ビット設定を識別するサブルーチンを作成する必要があります。nixbpe ビットを見つけようとして問題が発生しています。よろしくお願いします。
以下にいくつかの例を示します。 ソース行の次の 4 つの例のコンポーネントとビットは次のとおりです。
例 +LDA STUFF,X .MAIN
ラベル: "EXAMPLE" オペコード: "LDA" オペランド 1: "STUFF" オペランド 2: "X"
nixbpe: 111??1
RSUB NO OP
ラベル: "" オペコード: "RSUB" オペランド 1: "NO" オペランド 2: "OP"
nixbpe: 110??0
CMT BYTE @C'RESERVED BLOCK',XYZ SET Aside
ラベル: "CMT" op コード: "BYTE" オペランド 1: "C'RESERVED BLOCK'" オペランド 2: "XYZ"第2オペランド>
nixbpe: 101??0
RMO A,X
ラベル: "" オペコード: "RMO" オペランド 1: "A" オペランド 2: "X"
nixbpe: 11l??0
「?」とマークされた nixbpe ビット 呼び出しプログラムから受け取ったままになります。op コードの接頭辞によって e-bit が決まります。operand1 の接頭辞によって n ビットと i ビットが決まります。operand2 の最初の文字が x ビットを決定します。b ビットと p ビットは別の場所に設定されます。このルーチンではセマンティック チェックは想定されていません (したがって、特に、上記の RSUB ステートメントの解釈はどちらも OK です)。コンポーネントのデフォルト値は空の文字列です。「ni??pe」ビットのデフォルトは「00??00」です。
assembly - イミディエイトおよびプログラム カウンターの相対アドレッシング
sic/xe マシンのコードに出くわしました....以下は、私にとって問題の原因となった行です...
ここで、'a' には pc 相対および即時モードが使用されるオブジェクト コードが含まれることが与えられました....しかし、b には即時モードのみが含まれます....長さが 0033 であるため、なぜ pc 相対を使用するのですか?モード....そして、PC 相対モードをあまりにも使用することが慣例により不可欠である場合、'b' で PC 相対モードと即時モードの両方を使用しないのはなぜですか?
assembly - sicxe アセンブリ言語プログラミング
以下は、sic/xe マシンのアセンブリ言語コードです。
これはブートストラップ ローダーです...このプログラムの目的は、デバイス F1 から読み取り、入力を 80 から始まるアドレスに格納することです...私の質問は、なぜシフト s,4.. .入力を一度取得すると、その ascii 値から元の値を見つけ、それを「ループ」に送信して保存します...プログラムからは、最初の半バイトの文字のみがループに送信され、次にその他...これが事実である場合、最初にcharcterの最初の半分のバイトがあるため、最初の半分のASCII操作は入力の実際の値を提供しません...また、プログラムが「getc」に戻ったとき' 残りの半バイトを取得するために、代わりにリスト内の他の文字が読み取られることはありません...以下は同じ本からのヘルプの行です...
assembly - オブジェクトコードの計算 - SIC/XE
のオブジェクトコードを計算するにはどうすればよいですか
010064(オブジェクトコード)の結果を取得するにはどうすればよいですか? 最初の部分 (010) の実行方法は既に知っていますが、064 の 2 番目の部分を取得する方法がわかりません。
どんな助けでも素晴らしいでしょう!
assembly - SICXE アセンブリの整数の逆リスト
私の課題では、数字のリストを取得し、SICXE を使用してそれらを逆順に並べる必要があります。私の問題は、反転が実際に発生したかどうかを実際に確認する方法がわからない場合に発生するため、プログラムが希望どおりに機能しているかどうかを実際に判断できません。ダンプを読んで、元のリストがどこにあるのかを知ることはできますが、実際に行ったことが実際に機能したかどうかを確認するために、反転したリストをどこに表示すればよいかわかりません。私は実際にここで尊敬されているリストを見つけることができません. BETA は 10 の予約語で始まるため、15F から開始することになっていると思います。しかし、そこには何も表示されないので、何か間違ったことをしたことを意味すると思いますが、これについて正しいかどうかは実際にはわかりません. 私が問題を解決するにはどうすればよいですか? .lst ファイルと sic.log ファイルを含めます。
.lst ファイル
sic.log ファイル
assembly - SIC アセンブラの出力でオブジェクト コードを生成する際の混乱
だから今、私はオブジェクトコードがどのように生成されるかを理解しようとしていますが、これらの2行は本当に私を混乱させます.誰か私に説明してくれませんか?
assembly - 算術のアセンブリ言語構文の問題
アセンブリ言語に関してかなり簡単な質問があります。SIC/XE アーキテクチャは、基本的に教育目的でのみ使用されますが、他のアーキテクチャの一般的な規則に従っています。さて、私の質問と答えについての最初の考えです。
シンボル ALPHA と BETA がソース プログラムのラベルであると仮定します。次の 2 つの一連のステートメントの違いは何ですか?
わかりやすくするために、LDA は算術演算に使用されるレジスタ A にデータをロードします。また、ここに示す SUB や ADD などの演算は、デフォルトでレジスタ A を宣言しなくても機能します。
さて、一見すると、A と B の両方が同等であると想定しています。私の論理は非常に簡単です。A に ALPHA と BETA の差をロードするか、A に ALPHA をロードしてから、レジスタ A の ALPHA から BETA を減算します。まったく同じことを達成しているように見えるのはどれですか? 些細な詳細が欠けていますか、それとも見た目ほど単純ですか?
assembly - SIC/XE アセンブリのフィボナッチ
誰かが次のコードの説明を手伝ってくれますか? 次の SIC/XE プログラムに、このプログラムが 3 から始まる最初の 20 個の数値のフィボナッチ数列を計算する方法を説明するコメントを追加しようとしています。
assembly - SIC アセンブリ オブジェクト コードでの BYTE 操作の混乱
SIC 用のアセンブラを作成しようとしているときに、これらの質問について考えました。
LABEL BYTE X'AB'
ここで生成されるオブジェクト コードはAB
. そのため、オブジェクト コードは例として次のようになります。
001045 4C1046 AB 001045
ここではスペースを使用してコードを区別していますが、オブジェクト コードは次のようになります。
0010454C1046AB001045
では、オブジェクト コードを実行しているときに、ローダーは、AB
それがニーモニック オブジェクト コードの一部ではない定数であることをどのように判断するのでしょうか?
WORD についても同じ質問があります。WORD の長さは 3 バイトかもしれませんが、ローダーは定数コードとニーモニック コードをどのように区別するのでしょうか。
明確化をいただければ幸いです。