Function et assembleur de delphi

Résolu
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013 - 15 juin 2005 à 16:32
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021 - 6 juil. 2005 à 20:24
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

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
21 juin 2005 à 12:35
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;

@++
3
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
15 juin 2005 à 18:07
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
0
cs_barbichette Messages postés 220 Date d'inscription lundi 30 octobre 2000 Statut Membre Dernière intervention 15 juillet 2013
15 juin 2005 à 19:19
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juin 2005 à 20:03
si c'est de l'asm normal:
myvar DB 100 dup(0)

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
6 juil. 2005 à 20:20
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.
0
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
6 juil. 2005 à 20:24
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.
0
Rejoignez-nous