Skip to content

slackydev/slackasm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A simple assembler in Lape, requires Simba 1.2+ or just the latest lape interpreter (might need tweaks). Operations follow the same order as found in AT&T syntax, opcode names are mainly similar to Intel's.

Basic example:

{$I slackasm/assembler.pas}

var
  Assembler: TSlackASM;
  Callable: external procedure();
  x: Int32 = 2;
  y: Int32 = 100;
  z: Int32;
begin
  // compute: (x + y) * x
  with Assembler := TSlackASM.Create() do
  try
    Code += _mov (mem(x), eax);        // eax := x
    Code += _add (mem(y), eax);        // eax := eax += y
    Code += _imul(mem(x), eax);        // eax := eax *= x;
    Code += _mov (eax, mem(z));        // z   := eax;
    Code += _ret;
    Callable := Finalize();   // "Build" the method
  finally
    Free();
  end;

  // execute the code
  Callable();
  WriteLn([x, y, z]); //prints 2, 100, 204

  // free the code
  FreeMethod(@callable);
end.

For more indepth examples, check out the Examples folder.

About

Partial x86 assembler in Lape (supports FPC as well).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published