Lazarus Inline Assembler/vi

From Lazarus wiki
Revision as of 20:39, 4 September 2012 by Vincent (talk | contribs) (Reverted edits by Vincent (talk) to last revision by Akarin)
Jump to navigationJump to search
The 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.

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

1 ví dụ đơn giản về sử dụng inline assembler trong Lazarus:

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 //cộng thêm 110 (hệ cơ số 2)
    SUB EAX, 2    //trừ đi 2 (hệ cơ số 10)
    MOV answer, EAX
  end;
  edtOutput.Text := IntToStr(answer);
end;

initialization
  {$I unt_asm.lrs}
end.

Xem thêm