Pascal/Turbo Pascal - procedure con assembler

 
Vista:

procedure con assembler

Publicado por nico (11 intervenciones) el 14/11/2007 01:02:22
Hola una consulta,no puedo utilizar el bx como registro para llevar el indice de un arreglo(por ejemplo: mov ax,word ptr [arre+bx]) dentro de una accion(procedure), porque puede ser? esta bien que use el SI(mov ax,word ptr [arre+si])?

Gracias, Nicolas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:procedure con assembler

Publicado por juan mendoza (47 intervenciones) el 23/11/2007 02:38:39
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 ^^.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:procedure con assembler

Publicado por nico (11 intervenciones) el 23/11/2007 03:53:49
Gracias Juan, al final termine utilizando el registro si y por lo que parece funciono bien, realmente utilizar acciones y funciones con assembler es un poco complicado, lo mismo me sucedia cuando utilizaba alguna variable pasada como referencia, asi que lo que hice fue desprolijo, casi ni utilice acciones. Desde ya Muchas Gracias, Nico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar