Bonjour,

J'essaye d'intégrer directement dans une fonction pascal quelques lignes d'assembleur.
J'utilise pour me guider le cours disponible sur le forum (Merci Nono40)
Malheureusement il n'y a pas d'exemple sur l'usage de tableaux avec des strings ou de éléments de tailles diverses interdisant, a priori, l'usage de la directive Type

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
function Doublons: longint;
var i: Longint;
 Index: Longint;
 L:array[0..99] of strng[9];
begin
 for i:=0 to 99
   L[i]:= IntotoStr((Random 1000)+1);
 i := 0;
 Index := 0;
 repeat
  if L[i] <> L[i + 1] then
   begin
    Inc(Index);
    asm
      PUSH    ESI
      PUSH    EDI
      LEA     ESI, L[i]
      LEA     EDI, L[Index]
      MOV    ECX, 2
      REP     MOVSD //  8
      MOVSW          // 2
      POP   EDI
      POP   ESI
 
    end;
   //  L[Index]:= L[i];
   end;
  inc(i);
 until i >= 98;
 Doublons := Index;
end;
Il est normal que cela ne fonctionne pas car le L[[I] n'est pas correct il devrait être L[[I * 10] 10 tant la sizeof(string[9]);
Le LEA attends l'offset pas l'index
Le problème est que je ne trouve pas la syntaxe correcte
Le compilateur me refuse L[i * 10]
Quelqu'un peu-il me donner la bonne syntaxe?
Merci
PapyJohn

J'ai pense à poster sur le forum assembleur mais comme il s'agit d'intyegration dans Delphi je pense avoir plus de reponse ici.