Ensamblador - Ayuda porfavor urge

 
Vista:

Ayuda porfavor urge

Publicado por Asm (2 intervenciones) el 04/07/2007 05:19:36
Hola necesito que me ayuden, tengo el siguiente codigo en C y necesito hacerlo en ensamblador pero no tengo ni idea de como hacerlo, ya que mi profe de ensamblador no explica nada
les agradesco cualquier ayuda

void main()
{

vec[0][0]=1;
vec[0][1]=0;
vec[1][0]=2;
vec[1][1]=0;
vec[2][0]=2;
vec[2][1]=3;
vec[3][0]=1;
vec[3][1]=-1;
vec[4][0]=-1;
vec[4][1]=-1;
printf("Dame cadena");
scanf("%s",cadena);
estado=0;
i=0;
do
{
if(strcmp(cadena[i],'0')==0)
{
entrada=0;
}
if(strcmp(cadena[i],'1')==0)
{
entrada=1;
}

estado=vec[estado][entrada];
i=i+1;
if(estado == -1)
{
break;
}
}while(strcmp(cadena[i],'\x0')!=0);
if(estado == -1)
{
printf("HECHO");
}
else
{
printf("INCORRECTO");
}

}
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:Ayuda porfavor urge

Publicado por klaytor (10 intervenciones) el 06/07/2007 14:04:02
Hola.

Por lo que he visto tu programa en C implemeta un diagrama de estados. Se me ocurre lo siguiente.

- Para guardar las transiciones entre estados, es decir, el array de 2 dimensiones 'vec' puedes guardarlos en memoria asi:

_________________ORG_________XXXX
_________________BRA__________inicio
est0_ent0_________DC.B_________1
est0_ent1_________DC.B_________0
est1_ent0_________DC.B_________2
est1_ent1_________DC.B_________0
...

o ten en cuenta que, con las transiciones asi empaquetadas se cumple que:

estado_sig = XXXX + 2*estado_actual + entrada

- Para guardar la cadena del teclado simplemente vete leyendo del teclado y guardando en memoria.

while (no final de cadena)
{
___leo_caracter_del_teclado();
___guardo_caracter_en memoria();
}

Reserva una zona de memoria para una cadena de 20 caracteres por lo menos:

__________________ORG_________YYYY
__________________BRA__________inicio
__________________DS.B_________20

- Posteriormente, en un bucle, vas leyendo caracter a caracter y haciendo CMP.B para ver si se trata de un '0', un '1', o '\x0'.

- Si es un '0' o un '1' avanzas de estado según la tabla de transiciones.

- Para saber si tienes que visualizar por pantalla "HECHO" o "INCORRECTO" crea una bandera o reserva una posición de memoria que cuando lea el caracter '\x0' se ponga uno. Si llegas al final del programa y vale uno tendrás que visualizar "INCORRECTO", sino "HECHO" en el otro caso. Recuerda inicializarla a 0 al comienzo del programa.

Espero que te sirva de ayuda.

Saludos.
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