Lazarus Inline Assembler
From Lazarus wiki
Jump to navigationJump to searchThe printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This is a stub to encourage others to contribute further. Here is a very simple example to get started:
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.