From c09c0f24595c4ee65825c2af73dfd76092496409 Mon Sep 17 00:00:00 2001 From: mterwoord_cp <7cd3fd84a0151ea055c2f79e4d2eef9576fe9afesxUZAwxD> Date: Thu, 30 Aug 2007 17:33:25 +0000 Subject: [PATCH] --- source/HelloWorldAssembler/Program.cs | 22 +++++++++++++++++-- source/Indy.IL2CPU.Assembler/Assembler.cs | 7 +++++- source/Indy.IL2CPU.Assembler/Compare.cs | 18 +++++++++++++++ .../Indy.IL2CPU.Assembler.csproj | 4 ++++ source/Indy.IL2CPU.Assembler/Invoke.cs | 2 +- source/Indy.IL2CPU.Assembler/JumpIfZero.cs | 16 ++++++++++++++ source/Indy.IL2CPU.Assembler/Label.cs | 11 ++++++++-- source/Indy.IL2CPU.Assembler/Move.cs | 19 ++++++++++++++++ source/Indy.IL2CPU.Assembler/Test.cs | 20 +++++++++++++++++ 9 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 source/Indy.IL2CPU.Assembler/Compare.cs create mode 100644 source/Indy.IL2CPU.Assembler/JumpIfZero.cs create mode 100644 source/Indy.IL2CPU.Assembler/Move.cs create mode 100644 source/Indy.IL2CPU.Assembler/Test.cs diff --git a/source/HelloWorldAssembler/Program.cs b/source/HelloWorldAssembler/Program.cs index 0dfcd56cd..1de8a5b0b 100644 --- a/source/HelloWorldAssembler/Program.cs +++ b/source/HelloWorldAssembler/Program.cs @@ -11,8 +11,26 @@ namespace HelloWorldAssembler { using (Assembler a = new Assembler(xSW)) { a.OutputType = Assembler.OutputTypeEnum.Console; a.Includes.Add("win32w.inc"); - a.DataMembers.Add(new DataMember("_class", "TCHAR", "'Win32 program template'")); - new Invoke("GetModuleHandle", new object[] {0}); + a.DataMembers.Add(new DataMember("_class", "TCHAR", "'FASMWIN32'")); + a.DataMembers.Add(new DataMember("_title", "TCHAR", "'Win32 program template'")); + a.DataMembers.Add(new DataMember("_error", "TCHAR", "'Startup failed.'")); + a.DataMembers.Add(new DataMember("wc", "WNDCLASS", "0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class")); + new Invoke("GetModuleHandle", 0); + new Move("[wc.hInstance]", "eax"); + new Invoke("LoadIcon", 0, "IDI_APPLICATION"); + new Move("[wc.hIcon]", "eax"); + new Invoke("LoadCursor", 0, "IDC_ARROW"); + new Move("[wc.hCursor]", "eax"); + new Invoke("RegisterClass", "wc"); + new Test("eax", "eax"); + new JumpIfZero("error"); + new Invoke("CreateWindowEx", 0, "_class", "_title", "WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU", 128, 128, 256, 192, "NULL", "NULL", "[wc.hInstance]", "NULL"); + new Test("eax", "eax"); + new JumpIfZero("error"); + new Label("msg_loop"); + new Invoke("GetMessage", "msg", "NULL", 0, 0); + new Compare("eax", "1"); + a.Flush(); } } diff --git a/source/Indy.IL2CPU.Assembler/Assembler.cs b/source/Indy.IL2CPU.Assembler/Assembler.cs index 04a5e048b..a63a74992 100644 --- a/source/Indy.IL2CPU.Assembler/Assembler.cs +++ b/source/Indy.IL2CPU.Assembler/Assembler.cs @@ -102,7 +102,12 @@ namespace Indy.IL2CPU.Assembler { mOutputWriter.WriteLine(); mOutputWriter.WriteLine(" " + EntryPointLabelName + ":"); foreach (Instruction x in mInstructions) { - mOutputWriter.WriteLine("\t" + x); + string prefix = "\t"; + if (x is Label) { + mOutputWriter.WriteLine(); + prefix = " "; + } + mOutputWriter.WriteLine(prefix + x); } } } diff --git a/source/Indy.IL2CPU.Assembler/Compare.cs b/source/Indy.IL2CPU.Assembler/Compare.cs new file mode 100644 index 000000000..f6f14674f --- /dev/null +++ b/source/Indy.IL2CPU.Assembler/Compare.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Indy.IL2CPU.Assembler { + public class Compare: Instruction { + public readonly string Address1; + public readonly string Address2; + public Compare(string aAddress1, string aAddress2) { + Address1 = aAddress1; + Address2 = aAddress2; + } + public override string ToString() { + return "cmp " + Address1 + "," + Address2; + } + } +} \ No newline at end of file diff --git a/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj b/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj index 2fa6458f2..715582aa3 100644 --- a/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj +++ b/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj @@ -50,14 +50,18 @@ + + + +