J'ai un problème en asm pour récupérer les addresses de variables locales à l'intérieur d'une procedure. En effet, je souhaite récupérer l'addresse d'une variable qui est passée en paramètre dans une procedure mais avec du code assembleur. Pour exemple, j'ai fait une procedure length(s) qui doit récupérer la longueur de la chaîne s :

uses crt;
var leng:byte;

procedure length(s:string);assembler;
asm
MOV SI,OFFSET s;
LODSB;
MOV leng,AL;
end;


begin
clrscr;
length('salut');
writeln(leng);
readln;
end.

La longueur est donc stockée dans leng, seulement leng ne me retourne pas du tout la longueur de la chaîne ni même un des caractères de la chaîne. Après vérification, il se trouve que l'addresse que j'obtiens avec ce code n'est pas du tout la même que celle qui aurait du être c'est-à-dire l'addresse de s. Pourquoi est-ce que je n'obtiens pas la même addresse, et comment sont stockée en mémoire les variables locales dans les procedures ?
Merci