pero si hago: Y=2(1+3)-10 me da 252
aqui os dejo el código a ver si veis algo raro:
Código
list p=16F84 ;indicamos el pic que se vaa usar include "P16F84.INC";indicamos la librería del PIC que tiene que cargar REGA equ 0x11 ;Damos un nombre a esta posición de memoria REGISTRO A REGB equ 0x12 ;Damos un nombre a esta posición de memoria REGISTRO B DE USUARIO REGC equ 0x13 ;Damos un nombre a esta posición de memoria REGISTRO C DE USUARIO REGY equ 0x14 ;Damos un nombre a esta posición de memoria REGISTRO DE USUARIO DE RESULTADO REGAUX equ 0x15 ;Este registro lo vamos a usar para almacenar temporalmente resultados de pasos de operaciones intermedias org 0x00 ;vector de reset goto inicio org 0x05 ;el programa empieza en la posición 5 de la memoria ;********************* ;INICIO DE PROGRAMA ;********************* inicio MOVLW 0X01 ; Como no se puede cargar directamente un valor a una posición de memoria cualquiera, es necesario cargarlo previamente primero en el registro REGW MOVWF REGA ;Ahora si se puede mover el valor de REGW a una posición de memoria deseada MOVLW 0X02 ;Con los siguientes pasa lo mismo MOVWF REGB MOVLW 0X0A MOVWF REGC ;______________________________ BUCLE ; es necesario poner un bucle para que no finalice el programa el programa ;Suma de A+B MOVF REGA,0 ;CARGA EL VALOR REGA EN W ADDWF REGB,0 ;SUMA EL VALOR DE W + REGB Y COMO ES 0 SE GUARDA EN W MOVWF REGAUX ;EL VALOR DE LA SUMA ESTÁ EN EL REGISTRO AUXILIAR como ahora vamos a necesitar usar el registro REGW lo movemos a una posicón de memoria temporal ;Multiplicación 2(A+B) ->(A+B)+(A+B) ADDWF REGAUX,1 ;SUMA EL VALOR DE W + REGAUX Y COMO ES 0 SE GUARDA EN REGAUX. Como el valor de A+B ya lo teníamos en REGW y tiene el mismo valor que el REGAUX si se suman ambos será como una multiplicación. MOVF REGC,0 ;CARGA EL VALOR DE REGC EN W PARA PODER HACER LA RESTA Y=REGAUX-C ya que la instrución hace la resta en dirección contraria: F-W ;resta 2(A+B)-C SUBWF REGAUX,0 ;REALIZA LA RESTA Y LO GUARDA EN W MOVWF REGY ;CARGAMOS EL RESULTADO EN LA POSICIÓN REGY GOTO BUCLE ; Devuelve a donde esté la palabra bucle END ; fin de programa
Uso MPLAB para programarlo y simularlo.
Gracias
Fox_Neo[/size]