Valor absoluto de un numero en pic

Buenas,

tengo una duda, hay alguna instruccion para pasar un numero a absoluto, es decir, que siempre sea positivo?
Muchas gracias!
 
¿Para qué familia de pic estás hablando y en que lenguaje?

Los pic de gama media y baja, no manejan negativos y flotante. Para saber si una resta es negativa, te tiene que fijar en el bit C del registro Status. Pero al fin y al cabo, el resultado es un valor absoluto.
 
Los tipos con signo tiene el bit de signo en el MSB (bit más significativo).
Poniendo a 0 ese bit ya tenes el valor absoluto.
Ojo!, dije tipos con signo, si a un unsigned char (tipo sin signo) le cambiás el MSB vas a cambiar el valor y no el signo = problemas.
 
Ardogan tiene razón. Si manejas números negativos en el pic y programas en ensamblador en un número negativo el MSB siempre será igual a 1. Para obtener el valor absoluto simplemente revisas este bit y si es igual a 1 sacas su complemento a 2. Con eso tendrás el mismo número pero positivo.

Recordemos que el complemento a 2 se realiza complementando el valor de un número y después sumandole 1. En ensamblador esto se hace asi:
Código:
   comf    NUMERO,f
   incf    NUMERO,f
Donde NUMERO tiene el valor que deseamos pasar a positivo.
 
Cierto Pic-man... menos mal que aclaraste lo del complemento a 2. Si es un número complemento a 2 y uno solo le pone a 0 el bit de signo sonamos, no es el valor absoluto, hay que hacer el complemento a 2 como decís.
Si se trata de un float creo que con el bit de signo solamente alcanza no?
 
Hm, pero se me ocurre que en pics de gama baja igual se puede hacer, pero se complica si trabajas con números más grandes que 255. Y en general es complicado. Te explico lo que me imagino yo:

Si haces por ejemplo, 10 - 20, el resultado será 245, pero esto no es cierto, verdad? Entonces:
Una vez hecha la resta, revisas el Bit C del Status para ver si el resultado se hizo negativo. Para llegar al resultado correcto debes tomar el resultado que acabas de encontrar (245), y haces "255 - 245" = 10, pero por haber revisado el bit C del Status y haber visto que está en 1, ya sabrás que ese 10 es negativo.
... pero no te interesa que sea negativo, nisiquiera revises el C del Status. Entonces el 10 que acabas de obtener... es simplemente el resultado en valor absoluto.

Resumen:
Paso 1:
10 - 20 = 245

Paso 2:
255 - resultado anterior (245) = 10, siempre positivo!

Se entiende lo que dije?
Es una idea nomás...

Saludos!
 
El modo de hacer una resta en assembler es:

restas los dos valores, revisas el bit C del STATUS, si este es 0 realizas el complemento y luego le sumas 1, por el contrario, si el bit C es 1, el resultado es positivo y no hay que hacer nada.

Les adjunto una rutina que cree para restar 2 números de 8 bit. Luego subo una rutina para restar 2 números de 32 bit en pic de 8 bit.
 

Adjuntos

  • resta_8_bits_751.lib
    1.6 KB · Visitas: 65
Atrás
Arriba