[Delphi] Assembler mee compileren in file...

Pagina: 1
Acties:

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Topicstarter
Ik heb een stukje assembler code in een aparte file. Hoe kan ik die in een projectje mee laten compileren? Het is uiteraard BASM-compatible...

Cogito Ergo Credo


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
1) die ASM-file ook in uw project file steken (hoe je het moet doen, weet ik niet)

2) embedded ASM gebruiken ... (zoals in C met asm{ ... }

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Topicstarter
Op dinsdag 11 juni 2002 13:15 schreef -Avalanche- het volgende:
1) die ASM-file ook in uw project file steken (hoe je het moet doen, weet ik niet)
lijkt me gewoon project manager gebruiken dus...
2) embedded ASM gebruiken ... (zoals in C met asm{ ... }
ok.. zal eens proberen...

Cogito Ergo Credo


Verwijderd

code:
1
2
3
4
5
asm
.
.
.
end;

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Op dinsdag 11 juni 2002 13:18 schreef deur het volgende:
code:
1
2
3
4
5
asm
.
.
.
end;
idd..bewoon Begin wijzigen in Asm

procedure bla;
asm
mov blaat,blaat
[..]
end;

...beter bekend als AMFan


Verwijderd

Even wat geprobeerd
Unit1.pas:
code:
1
2
3
4
5
6
7
8
9
function Blaat: Integer;
asm
  {$I File1.txt}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Blaat));
end;

File1.txt:
code:
1
  mov @Result, 4

Nou slaat bovengenoemd voorbeeld natuurlijk nergens op maar het compileert wel en sterker nog: het werkt zelfs.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 11:52

Tomatoman

Fulltime prutser

De assemblercode invoegen halverwege de procedure/functie kan ook.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function APlusBMaalTwee(A, B: Integer): Integer;
begin
  Result := 0;
  ShowMessage(IntToStr(Result));
  asm
            { eax, ecx en edx kun je vrijelijk gebruiken. }
            { Je hoeft ze na afloop niet te herstellen. }
    mov edx,A
    add edx,B
    shl edx,1
            { Het functieresultaat wordt voor ordinale }
            { typen altijd geretourneerd in eax. }
    mov eax,edx   { betekent hetzelfde als Result := edx }
  end;
  ShowMessage(IntToStr(Result));
end;

Een goede grap mag vrienden kosten.


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Oud topic, maargoed :) Ik haak ff in op de opmerking van tomatoman over het vrijelijke gebruik van eax, ecx en edx: mag je ebx dan niet vrijelijk gebruiken?

Valt er trouwens veel te optimaliseren door het zelf schrijven van stukjes assembler tussen de code?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

* LordLarry geeft gewoon nog een antwoord op het topic

Je kan ook .obj bestanden gewoon mee linken...zie {$L SomeFile.OBJ}

We adore chaos because we like to restore order - M.C. Escher


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

GerbenW schreef op 09 oktober 2002 @ 20:50:
Oud topic, maargoed :) Ik haak ff in op de opmerking van tomatoman over het vrijelijke gebruik van eax, ecx en edx: mag je ebx dan niet vrijelijk gebruiken?

Valt er trouwens veel te optimaliseren door het zelf schrijven van stukjes assembler tussen de code?
mij is altijd geleerd voor de zekerheid de bx/cx/dx registers even op te slaan volgens mij

er is op zich best wat te optimaliseren, maar je moet goed kijken waar je het doet. Een stukje code wat slechts enkele keren gebruikt wordt in een programma is niet echt de moeite waard imho, een soort sorteer routine die vaak gebruikt wordt kan soms (en mits je genoeg verstand hebt van optimaliseren in asm) best veel sneller gemaakt worden

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Ja voor een gemiddeld windowsprogramma zal het weinig uitmaken maar ik heb 't over 3D engines :)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

geen idee eigenlijk, kan me voorstellen dat het wel kan, maar de voorbeelden van snelheidswinst die ik gezien heb hadden meestal betrekking op sorteren van data en zoeken in tekenreeksen etc.

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Inderdaad, ik gebruik dan radix-sort om de poly's te sorteren en die vreet tijd. Misschien zet ik die es om in asm...

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 11:52

Tomatoman

Fulltime prutser

GerbenW schreef op 09 oktober 2002 @ 20:50:
Oud topic, maargoed :) Ik haak ff in op de opmerking van tomatoman over het vrijelijke gebruik van eax, ecx en edx: mag je ebx dan niet vrijelijk gebruiken?
ebx mag je best gebruiken, maar moet je bij het verlaten van het asm-blok in de oude staat herstellen.
Delphi:
1
2
3
4
5
asm
  push ebx        // ebx bewaren op de stack
  { doe iets met ebx }
  pop ebx         // ebx herstellen vanaf de stack
end;
Valt er trouwens veel te optimaliseren door het zelf schrijven van stukjes assembler tussen de code?
Meestal is het resultaat absoluut niet merkbaar, omdat Delphi-code snel genoeg is. Heel soms kan het enorm veel schelen als je bijvoorbeeld exotische assembler-bevelen gebruikt. Dat is echter een grote uitzondering.

Een goede grap mag vrienden kosten.

Pagina: 1