Difference between revisions of "Lazarus inline assembler"
From Free Pascal wiki
Jump to navigationJump to searchLine 1: | Line 1: | ||
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> | <pre> | ||
− | + | 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. | ||
</pre> | </pre> |
Revision as of 13:28, 27 September 2008
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.