public override void GenerateCode(RelocatableModule relModule) { // 文字列の文字数 (> 0) 分の連続する領域を確保し、 // 最初の文字は第 1 語の下位 8 ビットに、2 番目の文字は第 2 語の下位 8 ビットに、··· // と順次文字データとして格納する。各語の上位 8 ビットには 0 のビットが入る。 m_jisx0201Bytes.Select((jisx0201Byte) => new Word(jisx0201Byte)) .ForEach((word) => relModule.AddWord(word)); }
private static MemoryAddress GetExecStartAddress( ItemSelectableCollection <RelocatableModule> relModules) { RelocatableModule selectedRelModule = relModules.SelectedItem; EntryPoint selectedEntryPoint = selectedRelModule.EntryPoint; return(selectedEntryPoint.ExecStartAddress); }
internal override void GenerateCode(Label definedLabel, RelocatableModule relModule) { Word firstWord = MakeFirstWord(); relModule.AddWord(firstWord); m_operand.GenerateCode(relModule); }
internal override void GenerateCode(Label definedLabel, RelocatableModule relModule) { if (definedLabel == null) { throw new Casl2SimulatorException(Resources.MSG_NoLabelForStart); } // 実行開始番地は、そのプログラム内で定義されたラベルで指定する。 // また、この命令につけられたラベルは、他のプログラムから入口名として参照できる。 Label execStartLabel = GetExecStartLabel(definedLabel); Label entryLabel = definedLabel; EntryPoint entryPoint = new EntryPoint(execStartLabel, entryLabel); relModule.SetEntryPoint(entryPoint); }
private static RelocatableModule Assemble(Casl2Program program) { RelocatableModule relModule = new RelocatableModule(); Boolean processingError = program.ProcessTextLines(relModule.LabelTable); if (processingError) { // ソーステキストの処理でエラーなら、ここで終了。 return(null); } else { // ソーステキストの処理に成功すれば、ラベルのオフセットを設定し、コードを生成する。 program.ProcessedLines .SetLabelOffset(relModule.LabelTable) .GenerateCode(relModule); return(relModule); } }
/// <summary> /// このオペランドのコードを生成します。 /// </summary> public virtual void GenerateCode(RelocatableModule relModule) { // デフォルトは、コードを生成しない。 }
public void GenerateCode(RelocatableModule relModule) { relModule.AddReferenceWord(m_label); }
public override void GenerateCode(RelocatableModule relModule) { m_constants.ForEach((constant) => constant.GenerateCode(relModule)); }
public override void GenerateCode(RelocatableModule relModule) { Word word = new Word(m_value); relModule.AddWord(word); }
internal override void GenerateCode(Label definedLabel, RelocatableModule relModule) { // 指定した語数の領域を確保する。指定の語数分の 0 を追加する。 relModule.AddWords(Word.Zero, m_wordCount.Value); }
internal override void GenerateCode(Label definedLabel, RelocatableModule relModule) { m_constants.GenerateCode(relModule); }
private static void GenerateCode(this IEnumerable <ProgramLine> lines, RelocatableModule relModule) { lines.ForEach((line) => line.GenerateCode(relModule)); }
/// <summary> /// この定数のコードを生成します。 /// </summary> /// <param name="relModule"> /// 生成したコードを格納する <see cref="RelocatableModule"/> のオブジェクトです。 /// </param> public abstract void GenerateCode(RelocatableModule relModule);
internal void GenerateCode(RelocatableModule relModule) { m_instruction.GenerateCode(m_label, relModule); }
internal override void GenerateCode(Label definedLabel, RelocatableModule relModule) { // END 命令はラベルを指定できないことになっている。 // 指定しても特に問題はないので、ラベルはチェックしない。 }
public override void GenerateCode(RelocatableModule relModule) { m_adrX.GenerateCode(relModule); }
/// <summary> /// この命令のコードを生成します。 /// </summary> /// <param name="definedLabel"> /// この命令行に定義されたラベルです。 /// ラベルが定義されていない場合は、<see langword="null"/> を渡します。 /// </param> /// <param name="relModule"> /// 生成したコードを格納する <see cref="RelocatableModule"/> のオブジェクトです。 /// </param> internal virtual void GenerateCode(Label definedLabel, RelocatableModule relModule) { // デフォルトは、コードを生成しない。 }