Function et assembleur de delphi [Résolu]

Signaler
Messages postés
220
Date d'inscription
lundi 30 octobre 2000
Statut
Membre
Dernière intervention
15 juillet 2013
-
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
-
Bonjour,
j'ai un souci avec l'assembleur.

J'ai un type TMyType=array[0..100] of byte;
et une fonction :

Function Calcul(a,b:TMyType):TMyType;assembler;
asm
end;

Et je n'arrive pas en assembleur à récupérer les deux tableaux et à remplir le résultat de la fonction avec mes valeurs.

6 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

Function Calcul(a,b:TMyType):TMyType;assembler;
asm
mov esi,a ; esi = adresse du tableau a
mov edi,b ; edi = adresse du tableau b
mov al,[esi] ; al = a[0]
mov cl,[edi+1] ; cl = b[1]
add al,cl ; al = a[0]+b[1]
mov [edi],al ; b[0] = a[0] + b[1]
mov Calcul,edi ; on retourne b[]
end;

@++
Messages postés
555
Date d'inscription
jeudi 28 novembre 2002
Statut
Non membre
Dernière intervention
5 septembre 2020
1
Salut,
l'assembleur de delphi est un assembleur ......delphi.Ce qui veut dire , poser la question de sa syntaxe sur un forum delphi pour avoir une réponse.
ToutEnMasm
Messages postés
220
Date d'inscription
lundi 30 octobre 2000
Statut
Membre
Dernière intervention
15 juillet 2013

Merci bien de cette réponse, mais je l'ai déjà posé dans delphifr mais on me répond que c'est plus de l'assembleur que du delphi...
Alors je demande aux deux en parallèle en espérant une réponse dans l'un comme dans l'autre...
c
barbichette
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
si c'est de l'asm normal:
myvar DB 100 dup(0)

ciao...
BruNews, MVP VC++
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

En + fonctionel, et en delphi dans le texte, ca donne :

unit pcalcasm;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;


type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;


Type TMyType=array[0..100] of byte;


implementation


{$R *.dfm}


Function Calcul(a,b:TMyType;size:Integer):TMyType;assembler;
asm
Push esi
Push ebx
mov esi,result
@NextByte:
mov bl,Byte[eax+ecx]
add bl,Byte[edx+ecx]
mov byte ptr([esi+ecx]),bl
loop @NextByte
pop edx
pop esi
end;


procedure TForm1.Button1Click(Sender: TObject);
var j : Integer;
a,b,c : TmyType;
begin
for j:=0 to 100 do
begin
a[j]:=j;
b[j]:=j+10;
end;
c:=Calcul(a,b,sizeof(TmyType));
for j:=0 to 100 do
Memo1.Lines.Add(Inttostr(a[j])+'+'+Inttostr(b[j])+'='+Inttostr(c[j]));
end;


end.

Bon Coding ....

ManChesTer.
Messages postés
368
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

oupps, faut lire :


Function Calcul(a,b:TMyType;size:Integer):TMyType;assembler;
asm
Push esi
Push ebx
mov esi,result
@NextByte:
mov bl,Byte[eax+ecx]
add bl,Byte[edx+ecx]
mov byte ptr([esi+ecx]),bl
loop @NextByte
pop ebx // et non edx
pop esi
end;

Bon Coding ....

ManChesTer.