From be8a9768eca1ba8f36ecf9fa993cf01027be85ff Mon Sep 17 00:00:00 2001 From: Creeper Lv Date: Mon, 28 Jul 2025 23:11:24 +1000 Subject: [PATCH] The assembler is partially working now. --- src/SVM.Assembler.Core/Assembler.cs | 22 ++++++------------- src/SVM.Assembler.Core/ISADefinition.cs | 2 +- src/SVM.Assembler.Core/Linker.cs | 3 +-- .../SVM.Assembler.Core.csproj | 2 +- src/SVM.Assembler/ISA.xml | 10 ++++----- src/SVM.Assembler/Program.cs | 5 ----- 6 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/SVM.Assembler.Core/Assembler.cs b/src/SVM.Assembler.Core/Assembler.cs index 379be0f..6315046 100644 --- a/src/SVM.Assembler.Core/Assembler.cs +++ b/src/SVM.Assembler.Core/Assembler.cs @@ -13,7 +13,7 @@ namespace SVM.Assembler.Core @" Match: -D [0-9] +D \d Number {D}+ InstMath bmath InstCvt cvt @@ -24,18 +24,14 @@ Register \${D}+ LabelCode \.code\: LabelData \.data\: LabelConst \.const\: -word \w* +word [\w\d]+ GenericLabel {word}\: LineEnd \n -string "".*"" +string ""\"".*\"""" -OpAdd add -OpSub sub -OpMul mul -OpDiv div Id: - +word Word InstMath inst InstCvt inst InstSystem inst @@ -64,7 +60,6 @@ LabelConstant InternalLbl } else { - Console.WriteLine("Lexer Definition load failed."); } ISA = isaDefinition; @@ -76,10 +71,13 @@ LabelConstant InternalLbl var r = lexer.Lex(); if (r.HasError()) return r; if (r.Result == null) return r; + if (r.Result.LexSegmentId != null && r.Result.LexMatchedItemId != null) { + if (r.Result.LexSegmentId == "LE") continue; return r; } + } } private OperationResult<(string, string)?> ParseKVPair(ILexer lexer, LexSegment currentSeg) @@ -121,11 +119,9 @@ LabelConstant InternalLbl } if (!ISA.InstructionDefinitionAliases.TryGetValue(LexDef.Content ?? "", out var instructionDef)) { - Console.WriteLine($"Cannot find matching instruction:{LexDef.Content}"); operationResult.AddError(new Error()); return operationResult; } - Console.WriteLine($"Found:{instructionDef.PrimaryInstruction}"); intermediateInstruction.inst = instructionDef.PrimaryInstruction; foreach (var item in instructionDef.ParameterPattern) { @@ -148,14 +144,12 @@ LabelConstant InternalLbl } intermediateInstruction.Parameters.Add(next.Result); } - Console.WriteLine($"Parsed:{intermediateInstruction.inst}"); return intermediateInstruction; } public OperationResult AssembleIntermediateObject(string input, string ID = "main.asm") { StringLexer lexer = new StringLexer(); lexer.SetDefinition(definition); - Console.WriteLine(input); lexer.Content = input; lexer.SourceID = ID; OperationResult operationResult = new OperationResult(new IntermediateObject()); @@ -163,7 +157,6 @@ LabelConstant InternalLbl while (true) { var lexResult = Lex(lexer); - Console.WriteLine($"{lexResult.Result?.Content ?? ""}"); if (lexResult.Result == null) break; var r = lexResult.Result; switch (r.LexSegmentId) @@ -189,7 +182,6 @@ LabelConstant InternalLbl { case InternalLabel.Code: { - Console.WriteLine($"Code Seg:{r.Content}"); OperationResult instR = r.LexSegmentId switch { "LblG" => ParseInstruction(lexer, r, r), diff --git a/src/SVM.Assembler.Core/ISADefinition.cs b/src/SVM.Assembler.Core/ISADefinition.cs index 75bd3b5..0863be3 100644 --- a/src/SVM.Assembler.Core/ISADefinition.cs +++ b/src/SVM.Assembler.Core/ISADefinition.cs @@ -108,6 +108,7 @@ namespace SVM.Assembler.Core return false; } } + instruction.ParameterPattern.Add(parameter); return true; } static bool ParseDefinition(XmlNode node, ref ISADefinition definition) @@ -120,7 +121,6 @@ namespace SVM.Assembler.Core { return false; } - Console.WriteLine($"Definition of: {pi}"); instDefinition.PrimaryInstruction = pi; foreach (XmlNode item in node.ChildNodes) { diff --git a/src/SVM.Assembler.Core/Linker.cs b/src/SVM.Assembler.Core/Linker.cs index 6cc78bc..3d09c11 100644 --- a/src/SVM.Assembler.Core/Linker.cs +++ b/src/SVM.Assembler.Core/Linker.cs @@ -80,7 +80,7 @@ namespace SVM.Assembler.Core SVMNativeTypes.Double => sizeof(double), _ => 0, }; - Buffer.MemoryCopy(dataStart, inst + Pos * sizeof(byte), size, size); + Buffer.MemoryCopy(dataStart, ((byte*)inst) + Pos * sizeof(byte), size, size); } public unsafe static bool ParseAndWriteData(SVMInstruction* inst, SVMNativeTypes nativeType, int Pos, string value) { @@ -291,7 +291,6 @@ namespace SVM.Assembler.Core offset += (uint)data2.Length; Data.Add(data); } - Console.WriteLine($"Instruction Count:{Obj.instructions.Count}"); foreach (var item in Obj.instructions) { if (definition.InstructionDefinitions.TryGetValue(item.inst, out var def)) diff --git a/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj b/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj index 17adff0..e454314 100644 --- a/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj +++ b/src/SVM.Assembler.Core/SVM.Assembler.Core.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/SVM.Assembler/ISA.xml b/src/SVM.Assembler/ISA.xml index e504207..8f3d398 100644 --- a/src/SVM.Assembler/ISA.xml +++ b/src/SVM.Assembler/ISA.xml @@ -18,33 +18,33 @@ - + - + - + - + - + diff --git a/src/SVM.Assembler/Program.cs b/src/SVM.Assembler/Program.cs index e205a7b..2604f8d 100644 --- a/src/SVM.Assembler/Program.cs +++ b/src/SVM.Assembler/Program.cs @@ -40,11 +40,6 @@ namespace SVM.Assembler break; } } - - foreach (var item in files) - { - Console.WriteLine(item); - } Assembler.Core.Assembler assembler = new Core.Assembler(def); foreach (var item in files) {