[inline ASM] in delphi met ASM twee variable delen

Pagina: 1
Acties:

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
ik gebruik delphi 6 en ik wil enorm veel berekeningen er snel achter elkaar doen. Op dit moment het ik dit met gewoon pascal geschreven, maar ik begreep dat ASM vele male sneller zou zijn. Nu is het enigste probleem: dat kan ik nie :)

Ik heb allemaal topics opgezocht en heel veel handleidingen met registers, accumulators en weet ik wat nog meer naar me hoofd gekregen. En wordt er maar weinig wijs uit.

Als ik nu een klein simpel voorbeeldje heb kan ik van daaruit wel verder werken. Dit heb ik al verzonnen:
code:
1
2
3
4
5
6
7
8
9
10
11
procedure deel();
var
   in1, in2: byte;
begin
   in1:=50;
   in2:=100;
   asm
    
   end;
   showmessage(inttostr(in1)+' '+inttostr(in2));
end;

nu wil ik dat in1 op het eind het gemiddelde van in1 en in2 is. Het liefst nog per lijn uitgelegd waarom je dat commando gebruikt en wat het doet.

Bij voorbaad dank :)

Zie ook 123-3D voor 3D-printer stuff


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42

https://fgheysels.github.io/


Verwijderd

Voor simpele berekeningen zal het bar weinig uitmaken of je asm gebruikt, de compiler is slim genoeg om dit soort simpele dingen zelf al behoorlijk te optimizen..

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Idd, de Pascal compiler heeft overigens een zeer goeie optimizer.

https://fgheysels.github.io/


  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 21:53 schreef Yarvieh het volgende:
Voor simpele berekeningen zal het bar weinig uitmaken of je asm gebruikt, de compiler is slim genoeg om dit soort simpele dingen zelf al behoorlijk te optimizen..
Zijn geen simpele berekeningen en het zijn er heel erg veel. Dus een beetje beter is al gelijk een stuk verschil..

Zie ook 123-3D voor 3D-printer stuff


  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 21:51 schreef whoami het volgende:
http://www.xs4all.nl/~smit/asm01001.htm

alstublieft. :)
Dit is niet helmaal geschikt voor inline asm toch :?

Zie ook 123-3D voor 3D-printer stuff


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42

https://fgheysels.github.io/


  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 21:58 schreef whoami het volgende:
http://thsun1.jinr.ru/~alvladim/man/asm.html
Ik moet echt iets hebben waar aan de hand van een heleboel kleine voorbeelden dingen worden uitgelegd :)

Zie ook 123-3D voor 3D-printer stuff


Verwijderd

okay.
1) De optimizer van de delphi compiler is *GOED*
2) Jouw asm is *Slecht*..

kortom dat kans dat jij snellere asm schrijft dan de compiler is vrijwel te verwaarlozen, waarom zou je 'r dan tijd in steken :?

  • Tommel
  • Registratie: November 2000
  • Niet online
Hoe dat precies met die delphi var's gaat dat weet ik zo niet, maar wordt denk ik zoiets:

[brakke code]
code:
1
2
3
4
5
mov cx,32h  '32h is 50d
mov dx,64h  '64h is 100d
add cx,dx    'Tel cx en dx op en plaats uitkomst in cx
mov ax,2      'Zet deler op 2
div cx      'ax/cx=ax gem. in ax

[/brakke code]

Turtorial:
http://www.csn.ul.ie/~darkstar/assembler/

Voorbeeldjes:
http://www.programmersheaven.com/zone5/cat18/index.htm

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 22:27 schreef Tommel het volgende:
Hoe dat precies met die delphi var's gaat dat weet ik zo niet, maar wordt denk ik zoiets:

[brakke code]
code:
1
2
3
4
5
mov cx,32h  '32h is 50d
mov dx,64h  '64h is 100d
add cx,dx    'Tel cx en dx op en plaats uitkomst in cx
mov ax,2      'Zet deler op 2
div cx      'ax/cx=ax gem. in ax

[/brakke code]

hmm werk iig een beetje :)
en ik snap het zelfs bijna!

alleen geeft ax op het eind 43690 aan, denk niet dat dat het gemiddelde is :{

Zie ook 123-3D voor 3D-printer stuff


Verwijderd

Op maandag 22 april 2002 22:33 schreef Brupje het volgende:
hmm werk iig een beetje
en ik snap het zelfs bijna!

alleen geeft ax op het eind 43690 aan, denk niet dat dat het gemiddelde is
Komt omdat
code:
1
div cx

DX:AX deelt door CX en het result stored in AX, en in DX stond nog wat rommel van de optelling.

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 22:36 schreef Yarvieh het volgende:

[..]

Komt omdat
code:
1
div cx

DX:AX deelt door CX en het result stored in AX, en in DX stond nog wat rommel van de optelling.
mov cx,50d
mov dx,100d
add cx,dx
mov dx,0 <-- hier wordt dx nu op 0 gezet
mov ax,3
div cx
mov in1, ax <--- ax is hier nu weer 0 :?

Zie ook 123-3D voor 3D-printer stuff


  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
ah ik snap het al :)

mov ax,in1
mov dx,in2
add ax,dx
mov dx,0d
mov cx,2
div cx
mov in1, ax

nu werkt het. Thanks!!!

Zie ook 123-3D voor 3D-printer stuff


Verwijderd

Op maandag 22 april 2002 22:47 schreef Brupje het volgende:
ah ik snap het al :)
en nu nog optimizen ;)
code:
1
2
3
4
mov ax,in1
add ax,in2 //geen idee of ie dit toestaat, anders eerst in dx rammen zoals je al deed.
shr ax,1
mov in1, ax

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 22:50 schreef Yarvieh het volgende:

[..]

en nu nog optimizen ;)
code:
1
2
3
4
mov ax,in1
add ax,in2 <-- dit pakt ie
shr ax,1 <- maar wat doet dit?
mov in1, ax

Zie ook 123-3D voor 3D-printer stuff


Verwijderd

Op maandag 22 april 2002 22:56 schreef Brupje het volgende:
shr ax,1 <- maar wat doet dit?
Het hele boeltje 1 bit naar rechts schuiven (das ook delen door 2) bit operaties kosten veel minder kloktikken dan 'n dure div dus weer 'n paar kloktikken verdiend ;)

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 22:58 schreef Yarvieh het volgende:

[..]

Het hele boeltje 1 bit naar rechts schuiven (das ook delen door 2) bit operaties kosten veel minder kloktikken dan 'n dure div dus weer 'n paar kloktikken verdiend ;)
wonderbaarlijk genoeg werkt het :))
thanks!

Zie ook 123-3D voor 3D-printer stuff


Verwijderd

Op maandag 22 april 2002 22:15 schreef Yarvieh het volgende:
okay.
1) De optimizer van de delphi compiler is *GOED*
2) Jouw asm is *Slecht*..

kortom dat kans dat jij snellere asm schrijft dan de compiler is vrijwel te verwaarlozen, waarom zou je 'r dan tijd in steken :?
Dit is zeker niet waar. De kans dat je snellere of betere ASM schrijft (als je tenminste een klein beetje weet hoe ASM in elkaar zit) is HEEL GROOT.

Helaas, maar het is niet anders.

Verwijderd

Op maandag 22 april 2002 23:10 schreef delighteddennis het volgende:

[..]

Dit is zeker niet waar. De kans dat je snellere of betere ASM schrijft (als je tenminste een klein beetje weet hoe ASM in elkaar zit) is HEEL GROOT.

Helaas, maar het is niet anders.
Ik zeg ook niet dat het onmogelijk is betere code te schijven dan de compiler maar ik zeg dat brupje z'n asm niet goed genoeg is om betere code te schrijven dan de compiler, wel opletten hoor..

  • Brupje
  • Registratie: September 2001
  • Laatst online: 31-08 19:41
Op maandag 22 april 2002 23:13 schreef Yarvieh het volgende:

[..]

Ik zeg ook niet dat het onmogelijk is betere code te schijven dan de compiler maar ik zeg dat brupje z'n asm niet goed genoeg is om betere code te schrijven dan de compiler, wel opletten hoor..
Ik leer snel :)

Zie ook 123-3D voor 3D-printer stuff


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op maandag 22 april 2002 23:10 schreef delighteddennis het volgende:

[..]

Dit is zeker niet waar. De kans dat je snellere of betere ASM schrijft (als je tenminste een klein beetje weet hoe ASM in elkaar zit) is HEEL GROOT.

Helaas, maar het is niet anders.
Heel groot?? Ikzelf acht de kans erg klein eerlijk gezegd, tenzij jij een super kennis hebt van alle instructies van de 386 tot en met de laatste Pentiums en AMD's en ook rekening houdt met de gebruikte clockcycli per instructie.

Iets zegt me dat een compiler dit over het algemeen een stuk beter "weet" dan de gemiddelde programmeur. Uitzonderingen daargelaten natuurlijk.

En zeker met zulke "simpele" code denk ik niet dat je makkelijk snellere code in ASM kan schrijven..

Hmm.. hoor ik daar Benchmark??? :P

edit:

[code]var
in1, in2: byte;
begin
in1:=50;
in2:=100;
in1:=(in1+in2) shr 1;
end;[/code]
Delphi code is natuurlijk ook te "optimaliseren" (als de compiler dat al niet voor je deed)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op dinsdag 23 april 2002 09:33 schreef Creepy het volgende:

Heel groot?? Ikzelf acht de kans erg klein eerlijk gezegd ...
Het feit leert dat de gemiddelde compiler te veel zit vastgeroest in bepaalde patronen. Hierdoor ontstaan er heel vaak veel te veel onnodige jumps, branches, nops etc.

Een compiler kan namelijk (bijna) nooit bedenken wat de programmeur nou eigenlijk echt wil. En zal daarom bijna altijd blijven denken in vaste patronen. Deze vaste patronen zullen in het algemeen niet sneller zijn dan een recht toe recht aan stuk code van de programmeur zelf.

Verwijderd

Op maandag 22 april 2002 23:13 schreef Yarvieh het volgende:
Ik zeg ook niet dat het onmogelijk is betere code te schijven dan de compiler maar ik zeg dat brupje z'n asm niet goed genoeg is om betere code te schrijven dan de compiler, wel opletten hoor..
OK, punt voor jou... :P

Verwijderd

Op dinsdag 23 april 2002 09:33 schreef Creepy het volgende:
code:
1
2
3
4
5
6
7
var
   in1, in2: byte;
begin
   in1:=50;
   in2:=100;
   in1:=(in1+in2) shr 1;
end;
Dit benchmarken lijk mij onzinnig want het is het zelfde als
code:
1
2
3
4
5
var
   in1 : byte;
begin
   in1:=75;
end;

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op woensdag 24 april 2002 00:42 schreef borganism het volgende:

[..]

Dit benchmarken lijk mij onzinnig want het is het zelfde als
code:
1
2
3
4
5
var
   in1 : byte;
begin
   in1:=75;
end;
Daar ging het dus niet om. De topic starter geeft een voorbeeld en dat wilde hij omgezet hebben naar ASM omdat hij dacht dat dat sneller zou wezen. Dit voorbeeld is naar mijn idee niet te optimaliseren door gebruik van ASM.
Voor benchmarken moet je er een functie van maken natuurlijk.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1