Autor Tema: Restar en assembler  (Leído 5663 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado bluesboy

  • PIC12
  • **
  • Mensajes: 89
Restar en assembler
« en: 16 de Abril de 2013, 21:28:55 »
buenas gente, estoy usando el ejemplo del tutorial de Suky para contar cosas, tengo 4 displays de 7 segmentos y no puedo usar LCD.
Mi programa tiene que restar de a uno si se lo indico mediante una llave, pero no logro hacerlo evidentemente porque no se.
Supongamos que tengo un 0 en unidades y un 1 en decenas, le estoy diciendo que cuando decremente la unidad, la pase a 9 y decremente la decena, para eso pregunto si el bit DC de status se pone a uno cuando a 0 le resto 1, y no funca, cada vez que resto me pone a 1 ese bit y se desncadena un error.
Para hacerlo mas fácil, si alguien me puede orientar en como hacer una resta en assembler, en especial restarle 1 a 0 y que pasa con los flags, se lo voy a agradecer.
Muchas gracias por el tiempo.
Sebastián.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Restar en assembler
« Respuesta #1 en: 16 de Abril de 2013, 21:59:45 »
Saludos bluesboy, la resta en los PIC  tiene la siguiente secuencia para la instruccion subwf :

dest = File + (WREG^0xFF) + 1

Es decir que usa el metodo de complemento a 2,  esto quiere decir que cuando el resultado de la resta es positivo, es decir, F >= WREG,  el bit C se pone en 1, y cuando el resultado de la resta es negativo el bit C se coloca 0.

En el caso del bit DC se debe tomar en cuenta el nible bajo del registro F y de WREG, es decir, si F<3:0>  >= WREG<3:0> el bit DC se pone en 1.

Si solo necesitas restar en uno puedes usar la instruccion decf , o decfsz . decf decrementa el registro en uno y  decfsz decrementa  y  salta la siguiente instruccion si se llego a cero.

Saludos
« Última modificación: 16 de Abril de 2013, 22:06:29 por sander »
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado bluesboy

  • PIC12
  • **
  • Mensajes: 89
Re: Restar en assembler
« Respuesta #2 en: 16 de Abril de 2013, 22:07:38 »
¡Gracias Sander! Me estoy quemando la cabeza hace 2 días con esto.
Entonces, si a 0 le resto 1 , ¿el flag C=0?
Gracias.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Restar en assembler
« Respuesta #3 en: 16 de Abril de 2013, 22:10:42 »
¡Gracias Sander! Me estoy quemando la cabeza hace 2 días con esto.
Entonces, si a 0 le resto 1 , ¿el flag C=0?
Gracias.

resumiendo.............  Si   :lol:

Cuando estuve aprendiendo ensamblador lei  en algun libro que el comportamiento de los flags en otros procesadores es distinto, y que eso siempre causaba confusion.

suerte con tu proyecto

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube


 

anything