Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
        private static MemoryAddress GetExecStartAddress(
            ItemSelectableCollection <RelocatableModule> relModules)
        {
            RelocatableModule selectedRelModule  = relModules.SelectedItem;
            EntryPoint        selectedEntryPoint = selectedRelModule.EntryPoint;

            return(selectedEntryPoint.ExecStartAddress);
        }
Ejemplo n.º 3
0
        internal override void GenerateCode(Label definedLabel, RelocatableModule relModule)
        {
            Word firstWord = MakeFirstWord();

            relModule.AddWord(firstWord);

            m_operand.GenerateCode(relModule);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// このオペランドのコードを生成します。
 /// </summary>
 public virtual void GenerateCode(RelocatableModule relModule)
 {
     // デフォルトは、コードを生成しない。
 }
Ejemplo n.º 7
0
 public void GenerateCode(RelocatableModule relModule)
 {
     relModule.AddReferenceWord(m_label);
 }
Ejemplo n.º 8
0
 public override void GenerateCode(RelocatableModule relModule)
 {
     m_constants.ForEach((constant) => constant.GenerateCode(relModule));
 }
Ejemplo n.º 9
0
        public override void GenerateCode(RelocatableModule relModule)
        {
            Word word = new Word(m_value);

            relModule.AddWord(word);
        }
Ejemplo n.º 10
0
 internal override void GenerateCode(Label definedLabel, RelocatableModule relModule)
 {
     // 指定した語数の領域を確保する。指定の語数分の 0 を追加する。
     relModule.AddWords(Word.Zero, m_wordCount.Value);
 }
Ejemplo n.º 11
0
 internal override void GenerateCode(Label definedLabel, RelocatableModule relModule)
 {
     m_constants.GenerateCode(relModule);
 }
Ejemplo n.º 12
0
 private static void GenerateCode(this IEnumerable <ProgramLine> lines, RelocatableModule relModule)
 {
     lines.ForEach((line) => line.GenerateCode(relModule));
 }
Ejemplo n.º 13
0
 /// <summary>
 /// この定数のコードを生成します。
 /// </summary>
 /// <param name="relModule">
 /// 生成したコードを格納する <see cref="RelocatableModule"/> のオブジェクトです。
 /// </param>
 public abstract void GenerateCode(RelocatableModule relModule);
Ejemplo n.º 14
0
 internal void GenerateCode(RelocatableModule relModule)
 {
     m_instruction.GenerateCode(m_label, relModule);
 }
Ejemplo n.º 15
0
 internal override void GenerateCode(Label definedLabel, RelocatableModule relModule)
 {
     // END 命令はラベルを指定できないことになっている。
     // 指定しても特に問題はないので、ラベルはチェックしない。
 }
Ejemplo n.º 16
0
 public override void GenerateCode(RelocatableModule relModule)
 {
     m_adrX.GenerateCode(relModule);
 }
Ejemplo n.º 17
0
 /// <summary>
 /// この命令のコードを生成します。
 /// </summary>
 /// <param name="definedLabel">
 /// この命令行に定義されたラベルです。
 /// ラベルが定義されていない場合は、<see langword="null"/> を渡します。
 /// </param>
 /// <param name="relModule">
 /// 生成したコードを格納する <see cref="RelocatableModule"/> のオブジェクトです。
 /// </param>
 internal virtual void GenerateCode(Label definedLabel, RelocatableModule relModule)
 {
     // デフォルトは、コードを生成しない。
 }