RE:procedure con assembler
por lo que yo sé esto no se puede hacer, lo que tienes que hacer mover el valor de bx a si, o asignarle directamente el valor a si (en caso de que el array sea de tipo word) ya que si es el que controla en index de ds, para ponerte un ejemplo:
var
arreglo :array[0..400] of byte ;
index2 :word ;
resultado :byte ;
function leer(index : word ; var arreglo2) ;
begin
asm
push ds {guardas ds]
push si {guardas si]
lds si, arreglo2 {ds:si. apunta a arreglo2, ds = seg(arreglo2), si = 0}
cld {para que si se incremente}
mov si, index {te vas al index que deseas}
lodsb {AL = DS:SI}
mov @result, al {resultado de la funcion = al}
pop si
pop ds
end ;
end ;
begin
writeln('¿cual es el index a buscar?') ;
readln(index2) ;
resultado := leer(index2,arreglo) ;
writeln(el resultado es: `,resultado) ;
readkey ;
end .
espero que te sirva, cualquier duda porfavor escribeme ok ^^.