Difference between revisions of "Lazarus Inline Assembler"

From Lazarus wiki
(code highlight)
Line 2: Line 2:
  
 
This is a stub to encourage others to contribute further. Here is a very simple example to get started:
 
This is a stub to encourage others to contribute further. Here is a very simple example to get started:
<pre>
+
<delphi>
 
unit unt_asm;
 
unit unt_asm;
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 45: Line 45:
 
initialization
 
initialization
 
   {$I unt_asm.lrs}
 
   {$I unt_asm.lrs}
end.
+
end.</delphi>
</pre>
 
  
 
==See also==
 
==See also==

Revision as of 12:41, 8 January 2011

English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) русский (ru) Tiếng Việt (vi)

This is a stub to encourage others to contribute further. Here is a very simple example to get started: <delphi> unit unt_asm; {$mode objfpc}{$H+} interface uses

 Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

 { TForm1 }
 TForm1 = class(TForm)
   btnGo: TButton;
   edtInput: TEdit;
   edtOutput: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   procedure btnGoClick(Sender: TObject);
 private
   { private declarations }
 public
   { public declarations }
 end; 

var

 Form1: TForm1; 

implementation { TForm1 }

procedure TForm1.btnGoClick(Sender: TObject); var

 num, answer : integer;

begin

 num := StrToInt(edtInput.Text);
 //This is required with Lazarus on x86:
 {$ASMMODE intel}
 asm
   MOV EAX, num
   ADD EAX, 110B //add binary 110
   SUB EAX, 2    //subtract decimal 2
   MOV answer, EAX
 end;
 edtOutput.Text := IntToStr(answer);

end;

initialization

 {$I unt_asm.lrs}

end.</delphi>

See also