¿De Visual Basic a Ensamblador?

Hola, tengo 17 años y estoy haciendo un trabajo de investigación para Bachillerato y tengo que programar un PIC16f84A.
Mediante un programa he hecho un organigrama y me lo ha pasado a Visual Basic. Me gustaría saber si alguien podría ayudarme a traducirlo a Ensamblador. Aquí os dejo el programa:
main:
label_6:    if pin0=1 then label_13
                 goto label_6
label_13:    if pin1=1 then label_1E
                  goto label_13
label_1E:    if pin2=1 then label_29
                 goto label_13
label_29:    if pin3=1 then label_3A
                  goto label_13
label_3A:    let pins = 128    ' %10000000
                   goto label_6
Gracias de antemano

1 Respuesta

Respuesta
1
Bueno el programa es bastante sencillo, aunque hay alguna peculiaridad de tu código que lo complica demasiado...
Te explico, únicamente haces comparaciones que son CMP en muchos ensambladores, el problema es que para comparar necesitar los valores de los pines. Si lo quieres gestionar con memoria sería sencillo, es decir, tu supones que el la dir xxxxx de memoria esta el valor del pin0, la siguiente el pin2, ... y así. Con eso cargarías la direccion de cada dato y la compararías con el 1 haciendo un salto despues según el resultado que obtienes en la comparación. Ejemplo
if pin0==1 then label_13
                 goto label_6
 suponiendo que tenemos cargados a partir de la direccion 1000 los datos de los pines..
salto1: push &1000 #apilamos pin0
              Pus 1 #apilamos el 1
              == #Operación de comparación (si los datos apilados son iguales apila un 1 sino un 0) (los datos anteriores se desapilan para la operación y ya desaparecen de la pila)
             Brz salto1 #salta si el valor de la pila es cero
            Jmp salto 2 # salta siempre
Salto2:...
salto 1 sería el goto recursivo
Salto2 sería la comprobación del bit siguiente
El ensamblador utilizado es para la maquina virtual stanIV, que se puede probar con el simulador stanley.
Para inicializar memoria se pondría &direccion=valor, ejemplo &1000 = 1
Ten en cuenta que stanley es una maquina de pila, es decir siempre opera con la pila, apila valores y los opera, dejando el resultado apilado. Se basa en eso en sus operaciones. Un saludo!
PD. La complicación vendría en la rutina que te cambiara el valor de memoria, que sería con una interrupción, que llamaría a una rutina y esta rutina leería el dato de teclado. Se supone que tu código lee valores y hace un bucle hasta que el valor correspondiente es 1, si no lo puedes poner a 1 nunca harías bucles infinitos (colgarías el ordenador vamos...) para que esto tenga sentido tendría que haber una posibilidad de cambiar el valor a 1, esto se conseguiría con interrupciones que llaman a subrrutinas que te permita leer el valor nuevo.
Si usas un ensamblador concreto me lo comenstas y te puedo ayudar, ademas puedes poner el código explicado, por si quieres hacer algo distinto a lo que yo entiendo que quieres.
Muchas gracias por la información ! Me ha sido muy útil saber estos conceptos. Antes de avanzar en mi proyecto tengo que informar a mi profesor de todo . No dudare en consultarte algo más adelante si fuera necesario porque me has respuesto fenomenal y estoy muy satisfecho.
Gracias y saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas