Lazarus Inline Assembler

From Lazarus wiki
Revision as of 12:41, 8 January 2011 by Chronos (talk | contribs) (code highlight)

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